Sqlite API布尔访问

时间:2009-12-08 14:28:41

标签: sql c sqlite

我认为这应该是一个简单的问题,但我没有在其他地方找到令人惊讶的答案,所以我在这里发布。

我继承了一个Sqlite驱动的数据库,其中包含布尔列,声明如下:

CREATE TABLE example (
  ex_col BOOLEAN NOT NULL DEFAULT 0,
);

这个表试图通过sqlite3 C API调用sqlite_column_*函数来访问,现在假设sqlite实际上不支持布尔类型,这里的预期行为是什么?

看来sqlite_column_int()总是返回0或 false ,我认为这是因为sqlite中的所有列都是文本列...

维护这个的正确方法是什么 - 获取文本然后将字符串比较为true?我真的不想修改数据库和附加到它的所有其他代码。

2 个答案:

答案 0 :(得分:1)

一种显而易见的方法是将其“声明”为整数列,然后当您执行INSERT或UPDATE时,将其传递给1(True)或0(False)。这样,您就可以保持与C语言的兼容性。你甚至不需要将它声明为int,只要确保你总是向它插入整数,你就没事了。

你提到这是一个继承的数据库,他们之前是怎么做的?如果它们以文本形式存储,那么您可能需要调用sqlite_column_text()然后匹配“true”或“false”文字字符串。

答案 1 :(得分:1)

我有一个数据点可能会给你一个线索。

SQLite Administrator tool确实将布尔值转换为字符串“true”和“false”。