使用数据库自​​动完成

时间:2019-06-20 09:17:13

标签: java mysql autocomplete

我想在inputTextArea中使用自动完成功能。我正在使用数据库中的值进行此操作。我有数据库中存储的单词,数字,符号(如#)。

问题是当我尝试在textArea中键入内容时,会出现整个列表。相反,我只希望出现那些与textArea中写的输入相匹配的选项,这是一种自动完成功能,但它会从数据库中获取值。 下面给出的是我到目前为止编写的Java代码。

public class DbConnect {


    public List<String> completeArea(String query1) {

        ResultSet rs;
        Statement st;
        Connection con;
        PreparedStatement pst;
        List<String> result = new ArrayList<String>();
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost/company", "root", "");

            try {
                query1 = "select name from labels";
                pst = con.prepareStatement(query1);
                rs = pst.executeQuery();
                while (rs.next()) {
                    result.add(rs.getString("name"));
                }
            } catch (Exception ex) {
                System.out.println(ex);
            }
        } catch (Exception ex) {
            System.out.println("error occured" + ex);
        }
        System.out.println("size is " + result.size());
        return result;
    }

我不想在数据库中指定用于搜索的任何特定字母,当用户键入时,它将自动选择。任何帮助都可以。非常感谢。

2 个答案:

答案 0 :(得分:1)

在您的示例中,query1方法的completeArea参数是用户输入,但是您用查询覆盖了它。尝试

public List<String> completeArea(String input) {
   ...
   String query = "select name from labels where name like ?";
   pst = con.prepareStatement(query);
   pst.setString(1, input + "%");
   ...
}

根据@Slaw注释进行编辑。感谢您的更正。 :)


在此用例中,我将使用<p:autoComplete />而不是inputTextArea。

您可以在this网站上找到一个不错的教程。

答案 1 :(得分:0)

您的查询是

select name from labels

将给出所有标签的名称...

  

我不想在数据库中指定要搜索的任何特定字母,当用户键入时,它会自动选择。任何帮助都可以。

如果要进行匹配,必须指定一个条件