Maison >Java >javaDidacticiel >Comment utiliser efficacement le caractère générique \'J'aime\' avec des instructions préparées ?

Comment utiliser efficacement le caractère générique \'J'aime\' avec des instructions préparées ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-17 14:29:02812parcourir

How to use the

Utilisation du caractère générique "like" dans l'instruction préparée

Les instructions préparées offrent un moyen efficace d'exécuter des requêtes SQL en empêchant les attaques par injection SQL et en améliorant les performances . Cependant, l'intégration du caractère générique "J'aime" avec les instructions préparées peut être un peu délicate.

Considérez la requête suivante qui recherche des lignes dans la table "analyse" en fonction d'un mot-clé :

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

Pour utiliser le caractère générique "J'aime" avec cette requête, vous devez l'inclure dans la valeur liée au paramètre de l'instruction préparée. Ajouter simplement "keyword%" à pstmt.setString(1, notes) ne suffira pas.

Au lieu de cela, vous pouvez implémenter un préfixe, un suffixe ou une correspondance globale en fonction de vos besoins :

  • Correspondance de préfixe : La correspondance de préfixe recherche les lignes commençant par le mot-clé. Pour y parvenir avec votre requête, utilisez le code suivant :
notes = notes
    .replace("!", "!!")
    .replace("%", "!%")
    .replace("_", "!_")
    .replace("[", "![");
PreparedStatement pstmt = con.prepareStatement(
        "SELECT * FROM analysis WHERE notes LIKE ? ESCAPE '!'");
pstmt.setString(1, notes + "%");
  • Correspondance de suffixe : Recherches de correspondance de suffixe pour les lignes qui se terminent par le mot-clé. Pour implémenter cela, modifiez le code comme suit :
pstmt.setString(1, "%" + notes);
  • Correspondance globale : La correspondance globale recherche les lignes contenant le mot-clé n'importe où dans la valeur de la colonne. Pour effectuer une correspondance globale, utilisez le code suivant :
pstmt.setString(1, "%" + notes + "%");

N'oubliez pas d'échapper les caractères spéciaux dans la chaîne "notes" à l'aide d'une barre oblique () pour éviter qu'ils n'interfèrent avec le caractère générique "j'aime". recherche.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn