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();
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 + "%");
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 + "%'");
PreparedStatement ps = cn.prepareStatement("Select * from Users where User_FirstName LIKE ?");
ps.setString(1, name + '%');
Essayez ceci.
String fname = "Sam\u0025";
PreparedStatement ps= conn.prepareStatement("SELECT * FROM Users WHERE User_FirstName LIKE ? ");
ps.setString(1, fname);