我正在制作一个具有文本字段和列表的组件,其中将侦听文本字段中键入的键,并相应地生成结果集并将其添加到列表中。
当我擦除键入的键并键入新的键时,它不起作用。不会再次相应地获取结果集。该怎么办?

码:

    @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注入攻击。

10-07 19:41
查看更多