我认为这应该是一个简单的问题,但令人惊讶的是我没有在其他地方找到这个答案,所以我将其张贴在这里。
我继承了一个 Sqlite 驱动的数据库,其中包含 bool 列,声明如下:
CREATE TABLE example (
ex_col BOOLEAN NOT NULL DEFAULT 0,
);
试图通过 sqlite3 C API 调用 sqlite_column_*
函数访问此表,现在假设 sqlite 实际上不支持 bool 类型,这里的预期行为是什么?
似乎 sqlite_column_int()
总是返回 0 或 false,我认为这是因为 sqlite 中的所有列实际上都是文本列...
维护它的正确方法是什么——获取文本然后将字符串与 true 进行比较?我真的不想修改数据库和附加到它的所有其他代码。
最佳答案
一种明显的方法是将其“声明”为整数列,然后在执行 INSERT 或 UPDATE 操作时将其传递给 1 (True) 或 0 (False)。这样,您就可以保持与 C 语言的兼容性。您甚至不需要将其声明为 int,只需确保始终向其插入整数即可。
你提到这是一个继承的数据库,他们以前是怎么做的?如果它们存储为文本,那么您可能需要调用 sqlite_column_text()
,然后对“true”或“false”文字字符串进行字符串匹配。
关于Sqlite API bool 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1867314/