sqlite有布尔值吗?

时间:2013-01-23 03:48:14

标签: sqlite

我从服务器获取一些文本和布尔值我需要将它们保存在数据库中。

这是我的桌子。我在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);

即使没有出错也无法正常工作。

2 个答案:

答案 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代替FALSE1而不是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);