2016-05-16 4 views
0

Ich versuche, einige Datensätze aus einer SQLite3-Datenbank zu filtern, aber ich bekomme falsche Ergebnisse. Für die Eingabe habe ich eine kyrillische Zeichenfolge. In der Datenbank sind alle Strings in UTF8 kodiert, also sehen sie etwa so aus: "% D0% A5% D0% 90% D0% 93 ...". Ich habe die Eingabezeichenfolge in UTF8 codiert und die Datenbank abgefragt. Der Code in Android Studio ist so etwas wie dieses:Abfrage kyrillische Daten mit Sqlite3 und Android Studio

String where = (Upper(name) like '%" + URLEncoder.encode(lookFor.toUpperCase(), "UTF-8") + "%'); 

    DB.query("Clients", 
      new String[]{"name", "saldo", "db_id", "_id"}, 
      where, 
      null, 
      null, 
      null, 
      null); 

Die Abfrage Rückkehr Ergebnisse, aber es gibt viele ungültige Datensätze zwischen ihnen. Behandle ich das Problem richtig oder vermisse etwas?

Antwort

0

Dies ist keine UTF-8-Codierung, es ist URL-Codierung.

Das Prozentzeichen wird von LIKE als Musterzeichen verwendet, daher ist dies die ungeeignetste Codierung, die gewählt werden könnte.

Die beste Idee wäre, die Strings nicht zu kodieren; SQLite und Android verarbeiten einfache Unicode-Zeichenfolgen. Aber wenn Sie den Inhalt der Datenbank auf diese Weise beibehalten müssen, könnten Sie dem LIKE sagen, ein anderes Musterzeichen mit der ESCAPE clause zu verwenden.