我从服务器获取一些文本和布尔值我需要将它们保存在数据库中。
这是我的桌子。我在sqlite中将布尔值定义为INTEGER couse,没有布尔值。db.execSQL("CREATE TABLE outcomesStore(id INTEGER PRIMARY KEY AUTOINCREMENT , allowgo INTEGER,cod TEXT,youdidComments INTEGER, youwent INTEGER,ByDate INTEGER ," +
"OnCompletion INTEGER,yourtext TEXT , yourGroup TEXT, yourConsultation INTEGER )");
我从服务器获取这些值。
Store[] Storedata = Configuration.getStore();
booleanvalues[0] = Store[0].isallowgo ();
并像这样插入
helperdatabase = new DatabaseHelperInurseBusiness(this);
db = helperdatabase.getWritableDatabase();
ContentValues insertOutcomes = new ContentValues();
insertOutcomes.put(helperdatabase.ALLOW_GO,booleanvalues[0]);
db.insert("outcomesStore", helperdatabase.ALLOW_GO,insertOutcomes);
即使没有出错也无法正常工作。
答案 0 :(得分:27)
实际上,SQLite确实支持BOOLEAN
类型,但可能并不完全符合您的预期。
您可以使用标准BOOLEAN
创建CREATE TABLE
类型的列,然后填充它:
CREATE TABLE mytable (name VARCHAR(10), flag BOOLEAN);
INSERT INTO mytable (name, flag) VALUES ('Alice', 0);
INSERT INTO mytable (name, flag) VALUES ('Bob', 1);
然后您可以恢复数据,并在执行此操作时使用标准BOOLEAN
逻辑:
SELECT * FROM mytable WHERE flag
或使用不同的BOOLEAN
表达式:
SELECT * FROM mytable WHERE NOT flag
等等。 (Obligatory SQLFiddle)
换句话说,一切都很好,唯一的问题是你必须使用0
代替FALSE
和1
而不是TRUE
( this包括尝试从客户端软件设置值。请注意,这与其他SQL引擎有些类似(例如,PostgreSQL支持使用'0'
/ '1'
,'f'
/ 't'
和false
/ {{1用于通过客户端软件设置true
/ FALSE
值。
此外,如果您在数字上下文中使用此TRUE
字段(如添加或相乘),则其行为为0或1,而在其他SQL引擎中则添加BOOLEAN
和{{1由于类型不兼容,可能会导致异常。
答案 1 :(得分:-2)
我得到了解决方案。
感谢Yaqub Ahamad。
insertOutcomes.put(DatabaseHelperInurseBusiness.ALLOW_GO,storedata.isAllowGo()== true ? 1:0);