Android SQLite, wie man bestimmte Spalte:Zeile Wert
Ich habe eine Datenbank und ich mache eine Abfrage mit
Cursor mCursor = mapDb.query(MY_TABLE, new String[] {KEY_ONEID, KEY_TWOID}, "trim("+KEY_TWOID + ") != '' ", null, null, null, null);
welche in SQL-Begriffe wörtlich:
SELECT OneId, TwoId FROM auth WHERE trim(TwoId) != ''
Mithilfe der raw-SQL-Abfrage diese funktioniert in meinem SQLite-browser zeigen mir die Zeilen in Frage, so dass die Cursor-Objekt enthalten sollte, die gleichen Ergebnisse.
Zweitens in meinem java-Methode bin ich über eine Bedingung zu überprüfen, ob dieses Ergebnis hat nichts
if(mCursor.getColumnIndex(KEY_ONEID) > -1) //if > -1 then the mCursor returned a row
{
if(mCursor.getString(mCursor.getColumnIndex(KEY_ONEID)).contains(id)) //breaks here
return mCursor.getString(mCursor.getColumnIndex(KEY_TWOID));
else
return "";
}
Aber aus irgendeinem Grund, obwohl die mCursor hashmap sollten alle Werte zurückgegeben, das nächste bedingte Anweisung
mCursor.getString(mCursor.getColumnIndex(KEY_ONEID)).contains(id)
immer noch gibt: An exception occurred: android.database.CursorIndexOutOfBoundsException
dies ist die Linie, die die Ausnahme ausgelöst: mCursor.getString(mCursor.getColumnIndex(KEY_ONEID))
und so sieht meine nächste Element in der return-Anweisung
Ich bin ratlos, wie das abrufen einer bestimmten Zeile Wert! da habe ich gezogen, der Datenbank und ausführen der gleichen Abfrage und kann deutlich sehen, dass beide Werte, die ich will, haben in der Tat existieren!
den Cursor-Funktion bieten nicht viele andere Möglichkeiten, um Werte abzurufen, so insight geschätzt!
InformationsquelleAutor CQM | 2011-07-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie den Cursor auf die erste Zeile, bevor man Daten aus es. Um dies zu tun, können Sie anrufen:
mCursor.moveToFirst()
. Auch der Aufruf dieser Methode gibt einen booleschen Wert zurück, der false zurück, wenn kein Ergebnis vorhanden, so können Sie es auch verwenden, um Schutz vor diesem Fall.Wenn Sie benötigen zu Durchlaufen, mehrere Ergebnisse, dann nach dem Aufruf
mCursor.moveToFirst()
verwenden, können Sie diemCursor.moveToNext()
Methode gehen Sie durch die Ergebnis-Zeilen eins nach dem anderen. Noch einmal, dies gibt false zurück, wenn er erreicht das Ende des Datensatzes.Hoffe das macht Sinn.
InformationsquelleAutor stephendnicholas
Können Sie iterieren den cursor so...
InformationsquelleAutor Lalit Sharma
Versuchen Sie anrufen
mCursor.moveToFirst()
bevor Sie versuchen, und rufen SiemCursor.getString
.if(mCursor.moveToFirst()){ do{ // process the row }while(mCursor.moveToNext());
InformationsquelleAutor Femi
brauchen Sie Nur zu rufen cursor.moveToNext() bewegen Sie sich zum nächsten start von Anfang an so, da brauchen wir nicht zu nennen moveToFirst. moveToFirst heißt eigentlich in der Mitte von etwas.
InformationsquelleAutor Bilal Shahid