使用逗号分隔的多个关键字搜索数据库

时间:2015-02-26 10:19:57

标签: java sql

我已经尝试了几天来编写一个搜索功能,您可以在其中输入多个关键字,以输出将这些单词存储在相应列中的所有行。 搜索单个术语不是问题。 这是我的代码:

private void StartSearchTagsTextKeyPressed(java.awt.event.KeyEvent evt) {                                               
    if (evt.getKeyCode()==KeyEvent.VK_ENTER) {  
    try {
        String sql = "SELECT ID, Titel, Autor, Regal, Fach, Gelesen, Tags FROM TableDB WHERE UPPER(Tags) LIKE UPPER(?) ";  // hinter select kommt entweder ein * wenn alle spalteninhalte angezeigt werden sollen oder der jeweilige spaltenname welche angezeigt werden sollen
        pst = conn.prepareStatement(sql);
        pst.setString (1, "%" +StartSearchTagsText.getText()+ "%");

        rs= pst.executeQuery ();
        StartTable.setModel (DbUtils.resultSetToTableModel(rs));
        pst.close();
        StartSearchTagsText.setText("");            
    } 
    catch (SQLException e) {
        JOptionPane.showMessageDialog (null, "searchtagskey");
    }
    }
}             

我希望有人有个建议。

2 个答案:

答案 0 :(得分:1)

String searchterm1 = "Herrmann";
String searchterm2 = "Die kleine Hexe";
String sql = "Select * from TableDB where Autor like ? and Titel like ?";
pst = conn.prepareStatement(sql);
pst.setString (1, searchterm1);
pst.setString (2, searchterm2);

应该那样工作。

答案 1 :(得分:0)

这应该是最简单的解决方案。如果您可以告诉我们您正在使用的DBMS,我们可能会根据所使用的系统缩短它。

首先:LIKE仅适用于每次评估的单个值。您不能用逗号分隔它,例如在IN语句中。

因此,我建议您使用StartSearchTagsText.getText()函数将.split("DELIMITER")的值拆分为数组。

然后,您可以使用循环将"OR LIKE %" + yourArray[i] + "%"添加到您要搜索的每个术语的sql String中。 (丢失第一遍循环的OR


Du kannst mit LIKE nicht mehrere Bedingungen evaluieren,wie es z.B. mit IN geht。

Ichwürdevorschlagen,dass du dir ein Array mit den gesplitteten Werten deines Textfeldes erzeugst。 Das geht mit .split("TRENNUNGSZEICHEN")。 Das Trennungszeichen musst du entsprechend anpassen。 Wenn ein Komma dieeinzelnenWörternachdenen du suchen willst separiert,dann schreibst du statt TRENNUNGSZEICHEN entsprechend ein , in die Klammer。

Sobald du das Array hast,kannst du es einfach komplett durchlaufen und bei jedem Durchlauf dein SQL-Statement mit "OR LIKE %" + deinArray[i] + "%" erweitern。 Beim ersten Durchlauf das OR weglassen。 Dann liefert dir das SELECTalleDatensätzezurück,is einem der Begriffe aus deinem Textfeld entspricht。