9

これが私の現在のSQLステートメントです:

SEARCH_ALBUMS_SQL = "SELECT * FROM albums WHERE title LIKE ? OR artist LIKE ?;";

アルバムまたはアーティスト名に完全に一致するものを返しますが、それ以外のものは返しません。ステートメントで「%」を使用できないか、エラーが発生します。

プリペアド ステートメントにワイルドカードを追加するにはどうすればよいですか?

(私は Java5 と MySQL を使用しています)

ありがとう!

4

1 に答える 1

19

バインドされた変数に % を入れます。そうしたらいい

   stmt.setString(1, "%" + likeSanitize(title) + "%");
   stmt.setString(2, "%" + likeSanitize(artist) + "%");

ESCAPE '!'を追加する必要があります。入力でLIKEに重要な特殊文字をエスケープできるようにします。

タイトルまたはアーティストを使用する前に、次のような方法で特殊文字 ( !%_、および[ ) をエスケープして、(上記のように) サニタイズする必要があります。

public static String likeSanitize(String input) {
    return input
       .replace("!", "!!")
       .replace("%", "!%")
       .replace("_", "!_")
       .replace("[", "![");
} 
于 2008-11-29T17:55:52.630 に答える