Поиск по всей базе данных с одним словом или более в Java

Чтобы предотвратить инъекции 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);
}}

0

Решение

Это отличный вариант использования для полнотекстовой поисковой системы, такой как Apache Lucene

1

Другие решения

Самый простой способ сделать это с MySQL — использовать FULLTEXT поиск. Он не ищет, как вы сказали, «всю базу данных sql», но он может искать много столбцов. Это работает довольно хорошо.

Синтаксис немного отличается от того, к чему вы привыкли. Это может помочь вам.

SELECT Title, Forename, Surname, Role
FROM AcademicInfo
WHERE MATCH(Surname, Forename) AGAINST('searchterm' IN BOOLEAN MODE)

Я оставлю вам возможность адаптировать этот оператор SQL к Java.

Вот документация.

http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

1

По вопросам рекламы [email protected]