Ich habe eine große Anzahl von Zeichenketten, etwa 15.000, die ich mit dem folgenden Code in einer SQLite-Datenbank gespeichert habe:
void addKey(String key, String value, String table) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_KEY, key); // Contact Name
values.put(KEY_VALUE, value); // Contact Phone
// Inserting Row
db.insert(table, null, values);
db.close(); // Closing database connection
}
Und dann durchsuche ich diese Datenbank mit der folgenden Methode, um alle Zeichenfolgen herauszufiltern, die dem gesuchten Schlüssel entsprechen:
public String searchKeyString(String key, String table){
String rtn = "";
Log.d("searchKeyString",table);
// Select All Query
String selectQuery = "SELECT * FROM " + table;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
Log.d("searchKeyString","searching");
if(cursor.getString(1).equals(key))
rtn = rtn + "," + cursor.getString(2);
} while (cursor.moveToNext());
}
cursor.close();
db.close();
Log.d("searchKeyString","finish search");
return rtn;
}
Das Ziel ist es, dies in Echtzeit zu tun, während der Benutzer auf dem Keep Board tippt, so dass die Reaktionszeit entscheidend ist, und so wie es jetzt aussieht, dauert es über eine Sekunde, um die Suche zu durchlaufen.
Ich erwog Lesen alle Elemente in eine Array-Liste zunächst und Sortieren durch, die schneller sein könnte, aber ich dachte, eine Array-Liste dieser Größe könnte Speicherprobleme verursachen. Was ist der beste Weg, um durch diese Einträge in meiner Datenbank zu suchen?