- 締切済み
JDBCのDB検索
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.mysql.jdbc.PreparedStatement; import com.mysql.jdbc.Statement; public class AddressDB { private static enum Procnumlist { NAME("名前"), FNAME("フルネーム"), END("終了"); private String name; private Procnumlist(String name) { } } //上の列挙型を基にした処理判定用マップを作成 private static final Map<Integer, Procnumlist> procmap; static { procmap = new HashMap<Integer, Procnumlist>(); procmap.put(1,Procnumlist.NAME); procmap.put(2,Procnumlist.FNAME); procmap.put(6,Procnumlist.END); } //結果 //ResultSetは受け取らない private static void ans(List<Addr> ans) { try { System.out.println("検索結果"); for (int i = 0; i < ans.size(); i++) { Addr addr = ans.get(i); System.out.println(addr.getName() + ":" ); } } catch (SQLException e) { e.printStackTrace(); } finally { //閉じる。 close(); } } //名前検索(フルネーム) private static List<Addr> srchFName(String keyword,Connection con) throws IOException { String sql = "SELECT * FROM data2 where name=?"; PreparedStatement ps = null; try{ ps = (PreparedStatement) con.prepareStatement(sql); ps.setString(1,keyword); ResultSet rs = ps.executeQuery(); //List<Addr> result = new ArrayList(Addr); while(rs.next()){ rs.getString("name"); } }catch (SQLException ex) { } return null; } //名前検索 private static List<Addr> srchName(String keyword,Connection con) throws IOException { String sql = "SELECT * FROM data2 where name like ?"; PreparedStatement ps = null; try{ ps = (PreparedStatement) con.prepareStatement(sql); ps.setString(1,"%"+keyword+"%"); ResultSet rs = ps.executeQuery(); while(rs.next()){ Addr addr = rs.getString("name"); } }catch (SQLException ex) { } return result; } private static boolean checkProcNum(int value) { return procmap.get(value) != null; } public static void main(String[] args)throws IOException{ while(true) { createConeection(); //処理条件入力 System.out.println("検索\n1.名前(ファーストネーム)で検索\n2.フルネームで検索\n6.終了"); //検索値入力 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int procnum = Integer.valueOf(br.readLine()); //入力チェック if (!checkProcNum(procnum)) { System.out.println("正しい値を入れてください。"); continue; } Procnumlist proc = procmap.get(procnum); if (proc == Procnumlist.END) { break; } if(proc == Procnumlist.NAME){ System.out.println("名前を入力してください。"); BufferedReader name = new BufferedReader(new InputStreamReader(System.in)); String keyword = name.readLine(); List<Addr> result = srchName(keyword,null); ans(result); } if(proc == Procnumlist.FNAME){ System.out.println("フルネームを入力してください。"); BufferedReader name = new BufferedReader(new InputStreamReader(System.in)); String keyword = name.readLine(); List<Addr> result = srchFName(keyword,null); ans(result); } } } //コネクション private static Connection createConeection() { String url = "jdbc:mysql://localhost/address"; String user = "test"; String password = "pass"; try { return DriverManager.getConnection(url, user, password); } catch (SQLException e) { e.printStackTrace(); return null; } } } 現在JDBCでDB接続し入力された値をDBから検索し出力するものを作成しておりますが詰んでしまいました。 入力した値をsrchで検索し結果をansで出力しようとしています。どのようにしたらよいのでしょうか
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 どこがどう詰んだのでしょうか? 何かエラーになるとか、思ったとおりの出力にならないとか情報が足り無すぎます。 ぱっと見ておかしいと思ったのはsrchNameもしくはsrchFNameの引数に文字列とコネクションがありますが、 呼び出し側でnullを渡しています。 これでcon.prepareStatement(sql);を実行したらNullpointerExceptionが発生します。 catch ( Exception e ) { e.printStacktrace(); } とすることで詳細なエラーを見ることが出来ます。