web-dev-qa-db-ja.com

プリペアドステートメントで「like」ワイルドカードを使用する

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();
150
ssn

プリペアドステートメントの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 + "%");
253
BalusC

次のようにコーディングします。

PreparedStatement pstmt = con.prepareStatement(
    "SELECT * FROM analysis WHERE notes like ?");
pstmt.setString(1, notes + "%");`

DO NOTを含めることを確認してください。以下のように引用符 ''を含めると例外が発生します。

pstmt.setString(1,"'%"+ notes + "%'");
24
PreparedStatement ps = cn.prepareStatement("Select * from Users where User_FirstName LIKE ?");
ps.setString(1, name + '%');

これを試してみてください。

4
Faiz
String fname = "Sam\u0025";

PreparedStatement ps= conn.prepareStatement("SELECT * FROM Users WHERE User_FirstName LIKE ? ");

ps.setString(1, fname);
1
Ram Kumar