在Java中使用一个或更多单词搜索整个数据库

Searching entire database with one word or more in java

本文关键字:单词 数据库 搜索 一个 Java      更新时间:2023-10-16

为了防止SQL注入我试图避免使用WHERE Surname LIKE '"search_txt.getText()"' ...但是使用preparedStatement留下?空白,换句话说,SQL语句甚至在TextField中输入了正确的搜索值...在行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。

这是文档。

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