我已经尝试了几天来编写一个搜索功能,您可以在其中输入多个关键字,以输出将这些单词存储在相应列中的所有行。 搜索单个术语不是问题。 这是我的代码:
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");
}
}
}
我希望有人有个建议。
答案 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。