使用JDBC从mysql中检索数据

时间:2013-11-03 14:24:16

标签: java mysql sql database jdbc

我正试图通过BufferedReader使用JDBC从SQL表中检索一些数据,这是我为此执行编写的代码:

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我希望我的应用程序搜索此人的姓名或类似的人名。

我输入宠物名时总是得到的结果(即使宠物名称在我的数据库中可用):

没有这样的名字

2 个答案:

答案 0 :(得分:4)

你没有告诉我们问题是什么,但我看到一个问题:

WHERE name LIKE '?%'

这是不正确的。该条款应为

WHERE name LIKE ?

你应该准备一个语句,绑定一个包含通配符(%)的字符串,然后执行这个准备好的语句:

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

阅读the tutorial about prepared statements

答案 1 :(得分:0)

如果我没错,你想搜索名字,这也可能是其他一些名字的一部分。 例如,如果你输入杰克

还应该从数据库中检索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);
        }