我正试图通过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我希望我的应用程序搜索此人的姓名或类似的人名。
我输入宠物名时总是得到的结果(即使宠物名称在我的数据库中可用):
没有这样的名字
答案 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();
答案 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);
}