【问题标题】:store boolean value in sqlite android在sqlite android中存储布尔值
【发布时间】:2021-12-04 18:00:20
【问题描述】:

我正在尝试保存复选框的状态,并在选中的情况下设置为 true,反之亦然。我在 sqlite 中设置了一个方法,但仍然无法存储布尔值。我知道它以 1 或 0 的形式存储,但仍然无法这样做。当我存储一个 int 时,它给出了一个错误

private static final int STATUS = 0;
private static final String CHECKBOX_POS = "checkbox_pos";

 @Override
    public void onCreate(SQLiteDatabase db) {
        String create_table = "CREATE TABLE " + TABLE_NAME + "( "
                + "ID INTEGER PRIMARY KEY ,"
                +  STATUS + " INTEGER NOT NULL, "
                +  CHECKBOX_POS + " TEXT NOT NULL, "
                )";
        db.execSQL(create_table);

    }
 @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
       
        if (oldVersion < 2) {
            db.execSQL("ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + STATUS +
                    " INTEGER ");
        }

 public boolean insertPos(String position,
                                        int checkbox_status){
        SQLiteDatabase database = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(CHECKBOX_POS,position);
        contentValues.put(STATUS,checkbox_status);

        long result = database.insert(TABLE_NAME,null,contentValues);

        if (result == -1){
            return false;
        } else {
            return true;
        }


    }

这会在onCreate&lt;column definition name&gt; expected, got '0' 中给出错误&lt;column definition name&gt; or &lt;table constraint&gt; expected, got '0' db.execSQL("ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + STATUS + " INTEGER ");

我需要通过以下方式使用它

if (isChecked){
boolean success = db.insertPos(
                            String.valueOf(checkbox_pos),
                            // the boolean value to be inserted);
}

【问题讨论】:

    标签: java android sqlite android-sqlite


    【解决方案1】:

    你已经定义了:

    private static final int STATUS = 0;
    

    所以,STATUS 是一个整数变量,但您在这里使用它作为列的名称:

    String create_table = "CREATE TABLE " + TABLE_NAME + "( "
                    + "ID INTEGER PRIMARY KEY ,"
                    +  STATUS + " INTEGER NOT NULL, "
                    +  CHECKBOX_POS + " TEXT NOT NULL, "
                    )"; 
    

    这里:

    db.execSQL("ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + STATUS +                   " INTEGER ");
    

    这里:

    contentValues.put(STATUS,checkbox_status);
    

    更改STATUS的定义,使其成为可用作列名的字符串:

    private static final String STATUS = "status";
    

    【讨论】:

    • 但是我如何在boolean success = db.insertPos( String.valueOf(checkbox_pos), // the boolean value to be inserted); 中使用该字符串值“status”作为布尔状态我需要将它设置为true,因为它在ifChecked() 下。
    • @user16566034 字符串值“status”是您将存储 0 或 1 的列的名称,就像“checkbox_pos”是另一列的名称一样。
    • 感谢您澄清这一点,但现在我需要在 boolean success = db.insertPos(String.valueOf(checkbox_pos), // the boolean value to be inserted); 中设置布尔值。如果它是 1 或 0,它将如何转换为 true 或 false?
    • @user16566034 对于 SQLite,TRUE 为 1,FALSE 为 0。无需转换任何内容。
    猜你喜欢
    • 2010-10-25
    • 2019-02-10
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 2014-07-18
    • 2020-09-06
    相关资源
    最近更新 更多