sqlite有布尔值吗?

Unk*_*own 2 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 )");
Run Code Online (Sandbox Code Playgroud)

我从服务器获取这些值.

Store[] Storedata = Configuration.getStore();


    booleanvalues[0] = Store[0].isallowgo ();
Run Code Online (Sandbox Code Playgroud)

并插入这样的

 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);
Run Code Online (Sandbox Code Playgroud)

它没有工作,甚至没有给出任何错误.

mvp*_*mvp 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);
Run Code Online (Sandbox Code Playgroud)

然后,您可以恢复数据,并BOOLEAN在执行此操作时使用标准逻辑:

SELECT * FROM mytable WHERE flag
Run Code Online (Sandbox Code Playgroud)

或使用不同的BOOLEAN表达:

SELECT * FROM mytable WHERE NOT flag
Run Code Online (Sandbox Code Playgroud)

等等.(强制性SQLFiddle)

换句话说,这一切的伟大工程,唯一的缺点是,你必须使用0替代FALSE1取代TRUE(这包括试图从客户端软件中设置的值).请注意,这有点类似于其它SQL引擎(例如,PostgreSQL支持使用'0'/ '1','f'/ 't'false/ true设置FALSE/ TRUE通过客户端软件的值).

此外,如果您BOOLEAN在数字上下文中使用此字段(如添加或乘法),它将表现为数字0或1,而在其他SQL引擎中添加BOOLEANINTEGER可能由于不兼容的类型而导致异常.