暗示搜索使用Java中的下拉菜单

时间:2018-04-25 07:49:09

标签: java autocomplete dropdown

下拉建议正常,但问题是例如:

如果我输入“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); 
}

2 个答案:

答案 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

的值