0

SQLインジェクションを防ぐために、使用を避けようとしてWHERE Surname LIKE '"search_txt.getText()"'います...ただし、aを使用する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);
            }



        }           
4

2 に答える 2

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 に答える
1

これは、 Apache Luceneのような全文検索エンジンの優れた使用例です。

于 2013-01-01T18:51:12.097 に答える