2017/9/1 L'article a été révisé après avoir été signalé par @Kilisame. Merci d'avoir souligné.
--Exemple de traitement d'échappement
Veuillez noter que les symboles à échapper varient en fonction du DB utilisé. Cette fois est un exemple d'utilisation de MariaDB.
Supposons que vous ayez un tableau "Liste des produits" comme celui-ci.
ID produit | Nom du produit |
---|---|
1 | Cola |
2 | Orange 100% |
3 | Lait |
4 | Pomme 100% |
5 | Lait_faible en gras |
6 | Jus pour 100 oranges |
7 | Jus de 100 pommes |
Voici l'instruction SQL à insérer dans la base de données.
insérer dans la liste de produits(ID produit,Nom du produit) values ('1', 'Cola'),
('2', 'Orange 100%'),
('3', 'Lait'),
('4', 'Pomme 100%'),
('5', 'Lait_faible en gras'),
('6', 'Jus pour 100 oranges'),
('7','Jus de 100 pommes');
Voici l'instruction SQL qui effectue une recherche de correspondance partielle pour cette table "Liste de produits". [1] Correspondance partielle avec "lait"
sélectionnez l'ID de produit,Nom du produit de la liste de produits où le nom du produit comme'%Lait%';
[2] Correspondance partielle avec "100%"
sélectionnez l'ID de produit,Nom du produit de la liste de produits où le nom du produit comme'%100\%%';
résultat
ID produit | Nom du produit |
---|---|
2 | Orange 100% |
4 | Pomme 100% |
[3] Correspondance partielle avec "_ faible en gras"
sélectionnez l'ID de produit,Nom du produit de la liste de produits où le nom du produit comme'%\_faible en gras%';
résultat
ID produit | Nom du produit |
---|---|
5 | Lait_faible en gras |
Les symboles "%" et "_" ont une signification particulière pour le DB, donc la recherche de correspondance partielle prévue ne peut pas être effectuée à moins que le symbole d'échappement "" soit ajouté devant lui, comme dans [2] et [3]. En guise de test, j'ai essayé une recherche LIKE sans le symbole d'échappement,
【4】
sélectionnez l'ID de produit,Nom du produit de la liste de produits où le nom du produit comme'%100%%';
résultat
ID produit | Nom du produit |
---|---|
2 | Orange 100% |
4 | Pomme 100% |
6 | Jus pour 100 oranges |
7 | Jus de 100 pommes |
Par conséquent, si vous souhaitez implémenter le traitement de la recherche dans votre application, vous devez échapper au traitement du mot cible de recherche.
public void getName(String word){
Connection con = null;
String sql = null;
PreparedStatement ps = null;
ResultSet rs = null;
try{
con = this.getConnection();
sql = "sélectionnez le nom du produit dans la liste de produits où le nom du produit comme?";
ps = con.prepareStatement(sql);
ps.setString(1, "%" +this.escape(word) + "%");
rs = ps.executeQuery();
rs.close();
ps.close();
}finally{
if(con != null){
con.close();
}
}
}
public String escape(String before){
StringBuilder after = new StringBuilder();
String esSymbol = "\";
char es1 = '_';
char es2 = '%';
for (int i = 0; i < before.length(); i++) {
if (before.charAt(i) == es1 || before.charAt(i) == es2) {
after.append(esSymbol);
after.append(String.valueOf(before.charAt(i)));
continue;
}
after.append(String.valueOf(before.charAt(i)));
}
return after.toString();
}