0

为了防止 sql 注入,我试图避免使用WHERE Surname LIKE '"search_txt.getText()"'... 但是使用 apreparedStatement正在离开 ? 空白,换句话说,即使在文本字段中输入了正确的搜索值,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);
            }



        }           
4

2 回答 2

1

对于像Apache Lucene这样的全文搜索引擎来说,这是一个很好的用例

于 2013-01-01T18:51:12.097 回答
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

于 2013-01-01T18:52:00.863 回答