我正在制作一个具有文本字段和列表的组件,其中将侦听文本字段中键入的键,并相应地生成结果集并将其添加到列表中。
当我擦除键入的键并键入新的键时,它不起作用。不会再次相应地获取结果集。该怎么办?
码:
@Override
public void keyTyped(KeyEvent ke) {
searchstring = searchstring + ke.getKeyChar();
System.out.println(searchstring);
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException ex) {
System.out.println(ex.toString());
}
try {
Connection con = DriverManager.getConnection(url+databasename,username,password);
Statement st = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
String s = "select "+columnname+" from "+tablename+" where "+columnname+" like "+"'"+searchstring+"%"+"'";
System.out.println(s);
ResultSet rs = st.executeQuery(s);
list.removeAll();
while(rs.next()){
System.out.println(rs.getString(1));
list.add(rs.getString(1));
}
}catch(Exception ex){
System.out.println(ex.toString());
}
}
最佳答案
您不断在搜索字符串后附加键入的字符:
searchstring = searchstring + ke.getKeyChar();
由于此搜索会随着您的键入而不断变化-键入时都使用退格键删除该字段。最后,
searchstring
将不匹配数据库中的任何内容。这就是为什么列表不变的原因!无需修改
searchstring
,而是创建另一个用于附加键char的变量,然后在查询的where子句中使用该值。注意:这种将用户输入附加到查询的方式为SQL注入攻击打开了您的应用程序。您应该使用准备好的语句来保护您的应用程序免受SQL注入攻击。