2

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

这是我的桌子。我在 sqlite 中将布尔值定义为 INTEGER,因为没有布尔值。

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);

它甚至没有给出任何错误都不起作用。

4

2 回答 2

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

等等。(强制性 SQLFiddle

换句话说,这一切都很好,唯一的问题是您必须使用0代替FALSE1代替TRUE这包括尝试从客户端软件设置值)。请注意,这与其他 SQL 引擎有些相似(例如,PostgreSQL 支持使用'0'/ '1''f'/'t'false/true来设置FALSE/TRUE客户端软件的值)。

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

于 2013-01-23T06:41:25.977 回答
-2

我得到了解决方案。

感谢 Yaqub 艾哈迈德。

    insertOutcomes.put(DatabaseHelperInurseBusiness.ALLOW_GO,storedata.isAllowGo()== true ? 1:0);
于 2013-01-23T08:38:33.257 回答