代码自动补全从数据库中获取值显示下拉列表中的所有值

时间:2019-06-07 11:20:40

标签: java

我想在我的自定义代码编辑器中使用自动完成功能。我已经编写了以下代码,但是此代码的问题是它显示了下拉列表中的所有值,而不是仅显示应该与键入的关键字匹配的那些值。

这是代码。

Quality

如果有人可以帮助我解决这个难题,那将非常有帮助。我不是专业人士,可能会犯一些错误。非常感谢您的回答。

1 个答案:

答案 0 :(得分:2)

必须对SQL进行参数设置。 name LIKE 'ab%'会找到所有以“ ab”开头的名称。

    public List<String> completeArea(String inputName) {

        List<String> result = new ArrayList<>();
        try {
            Class.forName("com.mysql.jdbc.Driver");

            String query1 = "select name from labels where name like ? order by name";
            try (Connection con = DriverManager.getConnection(
                            "jdbc:mysql://localhost/company", "root", "");
                    PreparedStatement pst = con.prepareStatement(query1)) {

                pst.setString(1, inputName + "%");
                try (ResultSet rs = pst.executeQuery()) {}
                    while (rs.next()) {
                        result.add(rs.getString(1));
                    }
                }
            }
        } catch (Exception ex) {
            System.out.println("error occured: " + ex);
        }
        return result;`
    }

使用try-with-resources会导致自动关闭con,pst,rs,即使在异常,中断或返回时也是如此。

占位符?用撇号,转义的名称,%和撇号填充:例如name"d'Or"的{​​{1}}之类。

此处'd''Or'会不必要地导致结果集中出现更多数据,并且select *允许select name使用基于1的索引而不是使用列标签。

快速故障版本,在发生错误时引发异常:

rs.getString(1)