我认为这应该是一个简单的问题,但我没有在其他地方找到令人惊讶的答案,所以我在这里发布。
我继承了一个Sqlite驱动的数据库,其中包含布尔列,声明如下:
CREATE TABLE example (
ex_col BOOLEAN NOT NULL DEFAULT 0,
);
这个表试图通过sqlite3 C API调用sqlite_column_*
函数来访问,现在假设sqlite实际上不支持布尔类型,这里的预期行为是什么?
看来sqlite_column_int()
总是返回0或 false ,我认为这是因为sqlite中的所有列都是文本列...
维护这个的正确方法是什么 - 获取文本然后将字符串比较为true?我真的不想修改数据库和附加到它的所有其他代码。
答案 0 :(得分:1)
一种显而易见的方法是将其“声明”为整数列,然后当您执行INSERT或UPDATE时,将其传递给1(True)或0(False)。这样,您就可以保持与C语言的兼容性。你甚至不需要将它声明为int,只要确保你总是向它插入整数,你就没事了。
你提到这是一个继承的数据库,他们之前是怎么做的?如果它们以文本形式存储,那么您可能需要调用sqlite_column_text()
然后匹配“true”或“false”文字字符串。
答案 1 :(得分:1)
我有一个数据点可能会给你一个线索。
SQLite Administrator tool确实将布尔值转换为字符串“true”和“false”。