Dies ist eine allgemeine Frage zur Leistung, ich habe keinen Fehler oder etwas ähnliches.Am effizientesten in einer Tabelle zu suchen
Ich arbeite an einer App, die eine SQLite-Datenbank verwendet, und möchte nur wissen, was ist die beste, schnellste und effizienteste Möglichkeit, durch eine Tabelle abzufragen, um einen speziellen Wert zu finden.
Beispiel:
Ich habe eine Tabelle und ich für eine spezielle Zeichenfolge bin auf der Suche.
ich alle Zeilen von:
Cursor cursor = db.query(
TABLE_NAME, new String[] {STRING_COL},
STRING_NAME + "=?",
new String[] {"THIS_IS_JUST_AN_EXAMPLE_PLEASE_IGNORE_TYPING_ERROR"},
null, null, null, null);
Gibt es einen Unterschied in der Leistung:
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME, null);
und dann durchlaufen den Cursor wie
String searchedString = "THIS_IS_JUST_AN_EXAMPLE_PLEASE_IGNORE_TYPING_ERROR";
boolean success = false;
int count = cursor.getCount();
for(int i=0;i<count;i++) {
String queryString = c.getString(1);
if(queryString.equals(searchedString) {
success=true;
break;
} else {
cursor.moveToNext();
}
}
Eine andere Möglichkeit query()
wäre die Verwendung zwischen diesen beiden Methoden?
Viele Tutorials zeigen die Iteration via Schleife, aber die Docs empfehlen, die query()
Methode zu verwenden.
Ist die query()
Methode die gleiche wie das Durchlaufen einer Schleife?
Wie genau funktioniert es? Ich kann in keiner API finden.
Beide sind gleich. Kein Unterschied. In db.query (..) nach dem Cursor müssen Sie die gleiche Schleife zum Cursor machen, um Daten zu erhalten. –
Das stimmt, aber ist es nicht so, dass der Cursor der Schleifenmethode alle Informationen aus allen Spalten und der Abfrage nur von einer Spalte? Also, zu meinem Verständnis, der Cursor aus der Abfrage sollte weniger Werte enthalten und die Schleife sollte effizienter sein? – Opiatefuchs
Ja, das stimmt. Wenn Sie nur einen Spaltenwert benötigen, dann stellen Sie sicher, dass es nicht nötig ist, alle Spalten zu erhalten, dies wird einige Zeit dauern, wie 'Cursor cursor = db.rawQuery ("SELECT Column1 FROM" + TABLE_NAME, null); ' –