Dapatkan nilai bidang dengan Kursor

Saya sedang membuat aplikasi dan saya mengalami masalah dengan Cursor. Saya memiliki SQLiteDatabase yang mengembalikan Cursor ketika saya mencoba mengambil nilai dengan fungsi ini:

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;

}

Saya tidak tahu cara mendapatkan nilai bidang di Cursor. Jika saya melakukannya seperti ini:

String a = mOptionDb.fetchOption(0).getColumnName(0).toString();
String b = mOptionDb.fetchOption(0).getColumnName(1).toString();
String c = mOptionDb.fetchOption(0).getColumnName(2).toString();

Saya hanya mendapatkan nama kolom (_id, title, body) tetapi tidak mendapatkan nilainya. Adakah saran tentang cara mencapai ini?


person Michaël    schedule 24.05.2009    source sumber


Jawaban (3)


Saya pikir Anda bisa melupakan memeriksa null.

Sebaliknya periksa apakah ada data dan kemudian akses kolom menggunakan kursor:

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

Mungkin juga masuk akal untuk membaca tutorial Android. Tutorial notepad tampaknya sesuai dengan kebutuhan: http://developer.android.com/guide/tutorials/notepad/index.html

person Mariano Kamp    schedule 24.05.2009
comment
Terima kasih untuk bantuannya. Sekarang berhasil. Saya lupa setiap akses untuk menutup kursor... - person Michaël; 25.05.2009
comment
setiap kali saya mengalami masalah ini, saya kembali ke sini dan menyadari bahwa saya lupa kursor.moveToFirst(). terima kasih! - person user1549672; 03.08.2013

Anda dapat menggunakan metode Cursor get* untuk mengambil nilai dari hasil:

long id = cursor.getLong(cursor.getColumnIndex("_id"));
long title = cursor.getString(cursor.getColumnIndex("title"));
...

Praktik yang lebih baik jelas menggunakan konstanta (sering disediakan oleh ContentProviders) daripada panggilan ke getColumnIndex dengan string hardcode.

person Josef Pfleger    schedule 24.05.2009
comment
dengan bagian : int a = mOptionDb.fetchOption(0).getColumnIndex(title); Saya mendapatkan 1. Tetapi dengan mOptionDb.fetchOption(0).getString(a); Saya mendapatkan kesalahan : ERROR/AndroidRuntime(628): Uncaught handler: thread utama keluar karena pengecualian yang tidak tertangkap ERROR/AndroidRuntime(628): android.database.CursorIndexOutOfBoundsException: Indeks 0 diminta, dengan ukuran 0 Sepertinya tidak ada data ?! - person Michaël; 24.05.2009

Anda dapat menggunakan mekanisme ini.

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();        
}
person Community    schedule 26.09.2012