Nhận boolean từ cơ sở dữ liệu bằng Android và SQLite


169

Làm cách nào tôi có thể nhận được giá trị của trường boolean trong cơ sở dữ liệu SQLite trên Android?

Tôi thường sử dụng getString(), getInt()v.v. để lấy các giá trị của các trường của mình, nhưng dường như không có một getBoolean()phương thức nào.

Câu trả lời:


351

Nó là:

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

29
! cursor.getInt (boolean_column_index) = 0 là tiêu chuẩn hơn C.
Buttink

2
@Buttink >0ngắn hơn theo byte: P
Gurupad Mamadapur


23
boolean value = (cursor.getInt(boolean_column_index) == 1);

Mặc dù không chính xác tương ứng với câu hỏi này (Alex là gần nhất), đó là một câu trả lời tuyệt vời và tôi sẽ sử dụng câu hỏi này.
Budimir Grom

10

Hầu hết các câu trả lời ở đây có thể dẫn đến NumberFormatExceptions hoặc "toán tử không được xác định cho các loại null, int" nếu cột bạn lưu trữ int in cũng được phép giữ null. Cách tốt để làm điều này sẽ là sử dụng

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

mặc dù hiện tại bạn bị giới hạn trong việc lưu trữ các chuỗi "đúng" và "sai" thay vì 0 hoặc 1.


5
Điều này không hoạt động. Boolean.parseBoolean lấy các chuỗi "true" hoặc "false". Nếu bạn đã lưu trữ boolean của bạn là 0 hoặc 1, bạn sẽ luôn nhận được sai.
Gober

Nếu những gì Gober nói là đúng, thì câu trả lời này xứng đáng bị hạ thấp
Shervin Asgari

À, anh ấy đúng. Tôi nghĩ rằng sự rõ ràng của kết quả vượt trội hơn khi phải lưu trữ các chuỗi.
Khởi động

1
@ShervinAsgari trong câu trả lời khác nếu bạn lưu trữ boolean của bạn là đúng hay sai thì nó sẽ luôn bị sai. Vì vậy, nó nên được hạ cấp quá với logic của bạn.
Arda Kara

6

Một triển khai được tìm thấy tại Ormlite Coder cũng kiểm tra Null mà không có câu trả lời nào khác làm được.

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

6

Bạn cũng có thể dùng

boolean value =cursor.getString(boolean_column_index).equals("True");

5
bằng () không chứa
Shervin Asgari

3

Một lựa chọn khác

boolean value = (cursor.getString(column_index)).equals("1");

3

booleankiểu dữ liệu không có sẵn trong Cursor.

bạn sẽ nhận được kết quả trong một int, vì vậy bạn cần chuyển đổi intgiá trị đó thành a boolean.

Bạn có thể sử dụng

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

hoặc là

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

2

boolean b = (con trỏ.getInt (con trỏ.getColumnIndex ("mục"))! = 0);


0

Chà, điều đó rất đơn giản:

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;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.