在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
和<column definition name> expected, got '0'
中给出错误<column definition name> or <table constraint> 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