0

JDBC を使用して SQL テーブルからデータを取得しようとしていますBufferedReader。この実行用に作成したコードです。

System.out.println("Type a name");
    String nname = br.readLine();

        Class.forName("com.mysql.jdbc.Driver");
        Connection con=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/VetTest", "root", "root");
        Statement stmt=(Statement) con.createStatement();
        String query = "select * from Pet WHERE name LIKE '?%'";
        ResultSet rs=(ResultSet) stmt.executeQuery(query);

        while(rs.next()) 
            System.out.println(rs.getString("name"));

        if (petn.equals(query)) {
        System.out.println("Searching names.." + nname + query);
        }

間違っているかどうかわからないので、質問を要約すると、ユーザーがコンソールに入力した内容に応じてデータを取得しようとしています。たとえば、データベースで Jack という名前を検索しようとしています。アプリケーションでこの人物の名前または類似の人物名を検索する必要があります。

ペット名を入力すると常に得られる結果 (ペットの名前がデータベースで利用可能であっても):

そんな名前ない

4

2 に答える 2

4

何が問題だったのか教えてくれませんでしたが、問題が 1 つあります。

WHERE name LIKE '?%'

それは正しくありません。句は

WHERE name LIKE ?

ステートメントを準備し、ワイルドカード ( ) を含む文字列をバインドして%から、この準備済みステートメントを実行する必要があります。

PreparedStatement stmt = con.prepareStatement("select * from Pet WHERE name LIKE ?");
stmt.setString(1, name + "%");
ResultSet rs = stmt.executeQuery();

準備済みステートメントに関するチュートリアルを読んでください。

于 2013-11-03T14:31:48.717 に答える
0

私が間違っていなければ、他の名前の一部でもある可能性のある名前を検索したかったのです。たとえば、Jack と入力すると

Jackson、Helen Jack の値もデータベースから取得する必要があります。次に、クエリを次のように変更します。

System.out.println("Type a name");
    String nname = br.readLine();

        Class.forName("com.mysql.jdbc.Driver");
        Connection con=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/VetTest", "root", "root");
        Statement stmt=(Statement) con.createStatement();
        **String query = "select * from Pet WHERE name LIKE '%nname%'";**
        ResultSet rs=(ResultSet) stmt.executeQuery(query);

        while(rs.next()) 
            System.out.println(rs.getString("name"));

        if (petn.equals(query)) {
        System.out.println("Searching names.." + nname + query);
        }
于 2013-12-06T17:22:02.337 に答える