2017/9/1 Der Artikel wurde überarbeitet, nachdem @Kilisame darauf hingewiesen hatte. Vielen Dank für den Hinweis.
Bitte beachten Sie, dass die Symbole, die maskiert werden müssen, je nach verwendeter Datenbank variieren. Diese Zeit ist ein Beispiel für die Verwendung von MariaDB.
Angenommen, Sie haben eine solche "Produktlistentabelle".
Produkt ID | Produktname |
---|---|
1 | Cola |
2 | Orange 100% |
3 | Milch |
4 | Apple 100% |
5 | Milch_fettarm |
6 | Saft für 100 Orangen |
7 | Saft für 100 Äpfel |
Hier ist die SQL-Anweisung, die in die Datenbank eingefügt werden soll.
in Produktliste einfügen(Produkt ID,Produktname) values ('1', 'Cola'),
('2', 'Orange 100%'),
('3', 'Milch'),
('4', 'Apple 100%'),
('5', 'Milch_fettarm'),
('6', 'Saft für 100 Orangen'),
('7','Saft für 100 Äpfel');
Hier ist die SQL-Anweisung, die eine teilweise Übereinstimmungssuche für diese "Produktlistentabelle" durchführt. [1] Teilweise Übereinstimmung mit "Milch"
Wählen Sie Produkt-ID,Produktname aus Produktliste, wo Produktname gefällt'%Milch%';
[2] Teilweise Übereinstimmung mit "100%"
Wählen Sie Produkt-ID,Produktname aus Produktliste, wo Produktname gefällt'%100\%%';
Ergebnis
Produkt ID | Produktname |
---|---|
2 | Orange 100% |
4 | Apple 100% |
[3] Teilweise Übereinstimmung mit "_ fettarm"
Wählen Sie Produkt-ID,Produktname aus Produktliste, wo Produktname gefällt'%\_fettarm%';
Ergebnis
Produkt ID | Produktname |
---|---|
5 | Milch_fettarm |
Da die Symbole "%" und "_" eine besondere Bedeutung für die Datenbank haben, kann die beabsichtigte Suche nach Teilübereinstimmungen nur durchgeführt werden, wenn das Escape-Symbol "" wie in [2] und [3] davor hinzugefügt wird. Als Test habe ich eine LIKE-Suche ohne das Escape-Symbol versucht.
【4】
Wählen Sie Produkt-ID,Produktname aus Produktliste, wo Produktname gefällt'%100%%';
Ergebnis
Produkt ID | Produktname |
---|---|
2 | Orange 100% |
4 | Apple 100% |
6 | Saft für 100 Orangen |
7 | Saft für 100 Äpfel |
Wenn Sie die Suchverarbeitung in Ihrer Anwendung implementieren möchten, müssen Sie daher die Verarbeitung für das Suchzielwort umgehen.
public void getName(String word){
Connection con = null;
String sql = null;
PreparedStatement ps = null;
ResultSet rs = null;
try{
con = this.getConnection();
sql = "Wählen Sie den Produktnamen aus der Produktliste aus, wo der Produktname gefällt?";
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();
}