我想在我的自定义代码编辑器中使用自动完成功能。我已经编写了以下代码,但是此代码的问题是它显示了下拉列表中的所有值,而不是仅显示应该与键入的关键字匹配的那些值。
这是代码。
Quality
如果有人可以帮助我解决这个难题,那将非常有帮助。我不是专业人士,可能会犯一些错误。非常感谢您的回答。
答案 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)