Sqlite API bool 访问

标签 sql c sqlite

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

我继承了一个 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/

相关文章:

c - 嵌入式系统上与频率相关的正弦波发生器

c - 如何在 C 中返回三个 3d 数组?

python - IPython Notebook 中的 SQLAlchemy + SQLite 锁定

mysql - SQL 连接重复结果

iphone - 如何使用 UISegmentedControl 更改 tableview 中的数据源

mysql - SQL Shortel 放弃调用查询

Android SQLiteDatabase 语法错误,代码 1

Mysql查询根据列条件对行和列求和

c - 使用 wait(NULL) 函数时如何获得总处理时间?

sqlite - 我可以在创建后将 sqlite 表中的列更改为 AUTOINCREMENT 吗?