Sqlite API布尔访问

Sqlite API布尔访问,sql,c,sqlite,Sql,C,Sqlite,这应该是一个简单的问题,我想,但我没有发现这个答案其他地方令人惊讶,所以我把它张贴在这里 我继承了一个Sqlite驱动的数据库,其中包含布尔列,声明如下: CREATE TABLE example ( ex_col BOOLEAN NOT NULL DEFAULT 0, ); 此表试图通过sqlite3 C API调用sqlite\u column\u*函数访问,现在假定sqlite实际上不支持布尔类型,这里的预期行为是什么 似乎sqlite\u column\u int()总是返回0或f

这应该是一个简单的问题,我想,但我没有发现这个答案其他地方令人惊讶,所以我把它张贴在这里

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

CREATE TABLE example (
  ex_col BOOLEAN NOT NULL DEFAULT 0,
);
此表试图通过sqlite3 C API调用
sqlite\u column\u*
函数访问,现在假定sqlite实际上不支持布尔类型,这里的预期行为是什么

似乎
sqlite\u column\u int()
总是返回0或false,我假设这是因为sqlite中的所有列实际上都是文本列


什么是保持这种状态的正确方法——获取文本,然后将字符串与true进行比较?我真的不想修改数据库以及附加到它的所有其他代码。

一个明显的方法是将其“声明”为整数列,然后在插入或更新时传递1(真)或0(假)。这样,就可以保持与C语言的兼容性。您甚至不需要将其声明为int,只要确保始终向其插入整数,就可以了


您提到这是一个继承的数据库,他们以前是怎么做的?如果它们存储为文本,那么您可能需要调用
sqlite\u column\u text()
,然后字符串匹配为“真”或“假”文本字符串。

我有一个数据点,可以为您提供线索


将布尔值转换为字符串“true”和“false”

以前,他们不必获取C代码中的布尔列,因此没有完成。他们有很多sql STMT(ins、upd等)的定义,还有一大堆视图和触发器。。。基本上,该值从不直接读取或插入:-/但肯定在某个地方使用了该值?触发器是否使用列值?定义的语句怎么样?如果它从未被使用过,那么为什么会在那里呢?;-)使用Yes,如下面的
#define SQL“UPDATE example SET ex_col='true'”
,然后正常调用此stmt。sql代码也有同样的功能,所以我想我只需要以字符串(yum)的形式执行所有操作,或者将列类型更改为
Int
,这里没有漂亮的解决方案!!不过,您不必担心性能问题。。请记住,SQLite中的所有内容都已经是文本,所以您只是在做SQLite本身应该做的一些工作。我不知道您的代码结构是什么,但在OOP设计中,我会创建一个方法或属性来获取值,并在该方法内进行转换。这还可以防止您将来更改DB模式(例如,如果您决定稍后使用ints)