在sqlite android中存储布尔值

Posted

技术标签:

【中文标题】在sqlite android中存储布尔值【英文标题】:store boolean value in 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);

【问题讨论】:

【参考方案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。无需转换任何内容。

以上是关于在sqlite android中存储布尔值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 next.jdbc 将 SQLite 中的 bool 列读入 bool Clojure 值? SQLite 将布尔值存储为 0/1

SQLite插入布尔值

sqlite数据库中能不能存放布尔类型的数据

在Flask-SQLAlchemy中使用SQLite3时模拟布尔值的ARRAY

在 SQLite 中保存布尔值

存储Android App布尔值[重复]