Dapatkan boolean dari database menggunakan Android dan SQLite

169

Bagaimana saya bisa mendapatkan nilai bidang boolean dalam database SQLite di Android?

Saya biasanya menggunakan getString(),, getInt()dll. Untuk mendapatkan nilai dari bidang saya, tapi sepertinya tidak ada getBoolean()metode.

Kevin Bradshaw
sumber

Jawaban:

351

Ini:

boolean value = cursor.getInt(boolean_column_index) > 0;
Alex Orlov
sumber
29
cursor.getInt (boolean_column_index)! = 0 lebih standar C.
Buttink
2
@Buttink >0lebih pendek dalam byte: P
Gurupad Mamadapur
45

Tidak ada tipe data bool dalam SQLite. Gunakan int yang Anda perbaiki ke 0 atau 1 untuk mencapai efek itu. Lihat referensi tipe data pada SQLite 3.0 .

NG.
sumber
23
boolean value = (cursor.getInt(boolean_column_index) == 1);
Elvis
sumber
Meskipun tidak persis sesuai dengan pertanyaan ini (Alex adalah yang terdekat), ini adalah jawaban yang sangat baik, dan saya akan menggunakan ini.
Budimir Grom
10

Sebagian besar jawaban di sini dapat menghasilkan NumberFormatExceptions atau "operator tidak ditentukan untuk tipe null, int" jika kolom tempat Anda menyimpan int diizinkan juga memiliki null. Cara yang layak untuk melakukan ini adalah menggunakan

Boolean.parseBoolean(cursor.getString(booleanColumnIndex));`

meskipun Anda sekarang terbatas untuk menyimpan string "benar" dan "salah" daripada 0 atau 1.

Sojurn
sumber
5
Ini tidak bekerja. Boolean.parseBoolean mengambil string "true" atau "false". Jika Anda telah menyimpan boolean Anda sebagai 0 atau 1, Anda akan selalu salah.
Gober
Jika apa yang dikatakan Gober benar, maka jawaban ini layak untuk diturunkan
Shervin Asgari
Ah, dia benar. Saya pikir kejelasan hasilnya lebih penting daripada harus menyimpan string.
Sojurn
1
@ ShervinAsgari di jawaban lain jika Anda menyimpan boolean Anda sebagai benar atau salah itu akan selalu salah. Jadi itu harus diturunkan juga dengan logika Anda.
Arda Kara
6

Implementasi yang ditemukan di Ormlite Cursor juga memeriksa Null yang tidak dilakukan oleh jawaban lain.

   public boolean getBoolean(int columnIndex) {
        if (cursor.isNull(columnIndex) || cursor.getShort(columnIndex) == 0) {
            return false;
        } else {
            return true;
        }
    }
rtack
sumber
6

Anda juga bisa menggunakan

boolean value =cursor.getString(boolean_column_index).equals("True");
zoeb
sumber
5
sama dengan () tidak mengandung
Shervin Asgari
3

Pilihan lain

boolean value = (cursor.getString(column_index)).equals("1");
Gokhan Arik
sumber
3

booleantipe data tidak tersedia di Cursor.

Anda akan mendapatkan hasilnya dalam int, jadi Anda harus mengubah intnilai itu menjadi a boolean.

Anda bisa menggunakan

boolean b = cursor.getInt(boolean_column_index) > 0;

atau

boolean b = (cursor.getInt(boolean_column_index) != 0);
Ravi
sumber
2

boolean b = (cursor.getInt (cursor.getColumnIndex ("item"))! = 0);

RedBullet
sumber
0

Yah, itu sangat sederhana:

public boolean getBooleanState(SQLiteDatabase db){
    boolean result = false;
    try{
        String QUERY = "SELECT " + BOOLEAN_DATA + " FROM " + TABLE_NAME + " WHERE " + ID + " = 1";
        Cursor cursor = db.rawQuery(QUERY, null);
        if (cursor.moveToFirst()){
            if(cursor.getString(0).equalsIgnoreCase("1")){
                result = true;
            }
        }
        c.close();
    }catch(Exception ee){
        Log.e(TAG, "err getBooleanState: " + TABLE_NAME );
    }
    return result;
}
silexcorp
sumber