Holen Sie sich das Feldwert mit einem Cursor
-
05-09-2019 - |
Frage
Ich erstelle eine Anwendung, und ich habe Probleme mit Cursor
. Ich habe eine SQLiteDatabase
, die mir Cursor
zurückgibt, wenn ich versuche, die Werte mit dieser Funktion zu holen:
public Cursor fetchOption(long rowId) throws SQLException {
Cursor mCursor = mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
KEY_TITLE, KEY_BODY}, KEY_ROWID + "=" + rowId, null,
null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
Ich weiß nicht, wie der Wert des Feldes in der Cursor
zu erhalten. Wenn ich das in etwa so:
String a = mOptionDb.fetchOption(0).getColumnName(0).toString();
String b = mOptionDb.fetchOption(0).getColumnName(1).toString();
String c = mOptionDb.fetchOption(0).getColumnName(2).toString();
ich nur den Namen der Spalten (_id, title, body
) erhalten, aber nicht die Werte. Alle Vorschläge, wie dies zu erreichen?
Lösung
Ich denke, Sie Überprüfung auf null vergessen.
Stattdessen prüfen, ob es Daten gibt, und dann die Spalten zuzugreifen den Cursor mit:
Cursor cursor = fetchOption(0);
if (cursor.moveToFirst()) // data?
System.out.println(cursor.getString(cursor.getColumnIndex("title"));
cursor.close(); // that's important too, otherwise you're gonna leak cursors
Es könnte auch sinnvoll sein, ein Android-Tutorial zu lesen. Der Notizblock Tutorial scheint die Rechnung zu passen: http://developer.android.com /guide/tutorials/notepad/index.html
Andere Tipps
Sie können die Cursor
der get*
Methoden verwenden, um Werte aus dem Ergebnis abrufen:
long id = cursor.getLong(cursor.getColumnIndex("_id"));
long title = cursor.getString(cursor.getColumnIndex("title"));
...
Bessere Praxis ist offensichtlich Konstanten zu verwenden (oft von ContentProviders zur Verfügung gestellt) anstelle von Anrufen mit fest codierten Strings getColumnIndex
.
Sie können diesen Mechanismus verwenden.
Cursor record=db.test(finalDate);
if(record.getCount()!=0){
if(record.moveToFirst()){
do{
Imgid1=record.getString(record.getColumnIndex(Database.PHOTO));
}while(record.moveToNext());
}
record.close();
}