Mysqlデータベースクエリを実行する準備されたステートメントを使用しています。そして、ある種のキーワードに基づいて検索機能を実装したいと思います。
そのためには、LIKE
キーワードを使用する必要があります。また、前もって準備されたステートメントを使用しましたが、次のコードから'keyword%'
をどこに追加するのか、LIKE
で使用する方法がわかりません。
pstmt.setString(1, notes)
で(1, notes+"%")
またはそのようなものとして直接使用できますか。私はこれについて多くの投稿をウェブ上で見ていますが、良い答えはどこにもありません。
PreparedStatement pstmt = con.prepareStatement(
"SELECT * FROM analysis WHERE notes like ?");
pstmt.setString(1, notes);
ResultSet rs = pstmt.executeQuery();
プリペアドステートメントのSQL文字列ではなく、値自体に設定する必要があります。
そのため、これはプレフィックス一致に対して行う必要があります。
notes = notes
.replace("!", "!!")
.replace("%", "!%")
.replace("_", "!_")
.replace("[", "![");
PreparedStatement pstmt = con.prepareStatement(
"SELECT * FROM analysis WHERE notes LIKE ? ESCAPE '!'");
pstmt.setString(1, notes + "%");
または接尾辞一致:
pstmt.setString(1, "%" + notes);
またはグローバルマッチ:
pstmt.setString(1, "%" + notes + "%");
次のようにコーディングします。
PreparedStatement pstmt = con.prepareStatement(
"SELECT * FROM analysis WHERE notes like ?");
pstmt.setString(1, notes + "%");`
DO NOTを含めることを確認してください。以下のように引用符 ''を含めると例外が発生します。
pstmt.setString(1,"'%"+ notes + "%'");
PreparedStatement ps = cn.prepareStatement("Select * from Users where User_FirstName LIKE ?");
ps.setString(1, name + '%');
これを試してみてください。
String fname = "Sam\u0025";
PreparedStatement ps= conn.prepareStatement("SELECT * FROM Users WHERE User_FirstName LIKE ? ");
ps.setString(1, fname);