ホームページ  >  記事  >  Java  >  準備されたステートメントで「like」ワイルドカードを効果的に使用するにはどうすればよいですか?

準備されたステートメントで「like」ワイルドカードを効果的に使用するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-17 14:29:02735ブラウズ

How to use the

プリペアド ステートメントでの "like" ワイルドカードの利用

プリペアド ステートメントは、SQL インジェクション攻撃を防止し、パフォーマンスを向上させることで SQL クエリを実行する効果的な方法を提供します。 。ただし、「like」ワイルドカードとプリペアド ステートメントの統合は、少し難しい場合があります。

キーワードに基づいて「分析」テーブル内の行を検索する次のクエリを考えてみましょう。

PreparedStatement pstmt = con.prepareStatement(
      "SELECT * FROM analysis WHERE notes like ?");
pstmt.setString(1, notes);
ResultSet rs = pstmt.executeQuery();

このクエリで「like」ワイルドカードを使用するには、準備されたステートメントのパラメーターにバインドされる値内にワイルドカードを含める必要があります。 pstmt.setString(1, Notes) に単に「keyword%」を追加するだけでは十分ではありません。

代わりに、必要に応じてプレフィックス、サフィックス、またはグローバル マッチングを実装できます。

  • 前方一致: 前方一致では、キーワードで始まる行を検索します。クエリでこれを実現するには、次のコードを使用します。
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 + "%");

「like」ワイルドカードと干渉しないように、「notes」文字列内の特殊文字をスラッシュ () を使用してエスケープすることを忘れないでください。検索します。

以上が準備されたステートメントで「like」ワイルドカードを効果的に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。