web-dev-qa-db-fra.com

Utilisation d'un caractère générique "like" dans une instruction préparée

J'utilise des instructions préparées pour exécuter des requêtes de base de données mysql. Et je veux implémenter une fonctionnalité de recherche basée sur un mot-clé de toutes sortes.

Pour cela, je dois utiliser le mot clé LIKE, c'est ce que je sais. Et j’ai aussi utilisé des instructions préparées auparavant, mais je ne sais pas comment les utiliser avec LIKE car, à partir du code suivant, où pourrais-je ajouter le 'keyword%'?

Puis-je l'utiliser directement dans la pstmt.setString(1, notes) comme (1, notes+"%") ou quelque chose comme ça. Je vois beaucoup de messages à ce sujet sur le Web, mais aucune bonne réponse n’importe où.

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

Vous devez le définir dans la valeur elle-même et non dans la chaîne SQL de l'instruction préparée.

Donc, cela devrait faire pour une correspondance préfixe:

notes = notes
    .replace("!", "!!")
    .replace("%", "!%")
    .replace("_", "!_")
    .replace("[", "![");
PreparedStatement pstmt = con.prepareStatement(
        "SELECT * FROM analysis WHERE notes LIKE ? ESCAPE '!'");
pstmt.setString(1, notes + "%");

ou une correspondance suffixe:

pstmt.setString(1, "%" + notes);

ou un match global:

pstmt.setString(1, "%" + notes + "%");
256
BalusC

Code le comme ceci:

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

Assurez-vous que NE PAS incluez les guillemets '' comme ci-dessous car ils provoqueront une exception.

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

Essayez ceci.

4
Faiz
String fname = "Sam\u0025";

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

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