Предлагающий поиск с выпадающим в Java - PullRequest
0 голосов
/ 25 апреля 2018

Выпадающее предложение работает нормально, но проблема, например:

Если я набираю «Outlook», он показывает (выпадающий) все элементы, которые начинаются с «Outlook», но не показываетэлементы, которые содержат «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 голосов
/ 25 апреля 2018
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.

0 голосов
/ 25 апреля 2018

есть способ, которым вы можете изменить свой оператор SQL следующим образом:

SELECT * FROM Customers
WHERE City LIKE '%Outlook%';

этот оператор будет возвращать только значения, содержащие outlook

...