Чтобы предотвратить инъекции SQL я пытаюсь избежать использования WHERE Surname LIKE '"search_txt.getText()"'
… однако используя preparedStatement
покидает? пусто, другими словами, оператор SQL не может выполнить, даже если в текстовое поле введено правильное значение поиска … в чем проблема в строке pst1.setString(1, search_txt.getText()+"%");
private void SearchActionPerformed(java.awt.event.ActionEvent evt) {
try{
sql = "SELECT Title, Forename, Surname, Role FROM AcademicInfo WHERE Surname LIKE ? OR Forename LIKE ?";
PreparedStatement pst1 = conn.prepareStatement(sql);
ResultSet rs2 = pst1.executeQuery();
if (rs2.next()) {
pst1.setString(1, search_txt.getText()+"%");
pst1.setString(2, search_txt.getText()+"%");
System.out.println(sql);
JOptionPane.showMessageDialog(null, "Found Academic");
Update_table(sql);
} else {
System.out.println(sql);
JOptionPane.showMessageDialog(null, "No Results Found");
}
}
catch(Exception e) {
JOptionPane.showMessageDialog(null, e);
}}
Это отличный вариант использования для полнотекстовой поисковой системы, такой как Apache Lucene
Самый простой способ сделать это с MySQL — использовать FULLTEXT
поиск. Он не ищет, как вы сказали, «всю базу данных sql», но он может искать много столбцов. Это работает довольно хорошо.
Синтаксис немного отличается от того, к чему вы привыкли. Это может помочь вам.
SELECT Title, Forename, Surname, Role
FROM AcademicInfo
WHERE MATCH(Surname, Forename) AGAINST('searchterm' IN BOOLEAN MODE)
Я оставлю вам возможность адаптировать этот оператор SQL к Java.
Вот документация.