下拉建议正常,但问题是例如:
如果我输入“Outlook”,它会显示(下拉)以“Outlook”开头的所有项目,但不显示String中包含“Outlook”的项目。
我在这里使用了Autocompleter
图书馆,也尝试了Autocomplete
图书馆。
还有其他方法吗?或者需要做任何改变?
非常感谢任何帮助。
//Below code when key Typed:
TextAutoCompleter complete=new TextAutoCompleter(t1);
complete.removeAllItems(); // Remove all from drowndown list
String temp = t1.getText(); //t1 is the textfield
Connection conn = null;
PreparedStatement pst = null;
ResultSet rs = null;
String value = null;
try{
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
conn = DriverManager.getConnection("jdbc:ucanaccess://src\\Mydb.accdb");
String sql = "select KB_Title from JD" ;
pst = conn.prepareStatement(sql);
rs =pst.executeQuery();
while (rs.next())
{
value = rs.getString(1);
if(value.contains(temp))
complete.addItem(rs.getString("KB_Title"));
}
catch(ClassNotFoundException | SQLException | HeadlessException e){
JOptionPane.showMessageDialog(null,e);
}
答案 0 :(得分:1)
complete.setMode(0); // Infix mode, "contains"
SQL可以更好:
// Not needed nowadays: Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
String sql = "select KB_Title from JD where KB_Title like ?";
try (Connection conn = DriverManager.getConnection("jdbc:ucanaccess://src\\Mydb.accdb");
PreparedStatement pst = conn.prepareStatement(sql)) {
pst.setString(1, "%" + temp.trim() + "%");
try (ResultSet rs = pst.executeQuery()) {
while (rs.next()) {
value = rs.getString(1);
complete.addItem(rs.getString("KB_Title"));
}
}
}
也许order by length(KB_Title), KB_Title
。
答案 1 :(得分:0)
有一种方法可以像这样改变你的SQL语句
SELECT * FROM Customers
WHERE City LIKE '%Outlook%';
此语句仅返回包含outlook
的值