c++ - 列计数和列 decltypes 在 SQLite 预准备语句执行期间是否不变?

标签 c++ c sqlite

当我查看其他人使用 SQLite3 C API 编写的代码时,我发现 sqlite3_column_decltypesqlite3_column_count 是从内部循环调用的(每个结果行一次)。

我对此数据库的理解是,即使重新编译语句,这些值也永远不会改变(请参阅 the bit 关于 sqlite3_prepare_v2)。

所以我应该能够调用这些一次并在调用sqlite3_prepare后立即缓存它们。

最佳答案

如果您在两个事务中使用相同的语句并且数据库架构在它们之间发生更改,则列的声明类型可能会更改。 在相同的情况下,如果您的查询也使用 SELECT *,则列数可能会发生变化。

但是,单个查询执行始终在事务内 ( either a manual or an automatic one )。 因此,如果您在调用 sqlite3_prepare_v2() 后缓存这些值,并仅在下次调用 sqlite3_reset()/sqlite3_finalize() 之前使用它们, 一切安好。如果您确保所有使用都在同一事务内,则可以将它们缓存更长时间。

关于c++ - 列计数和列 decltypes 在 SQLite 预准备语句执行期间是否不变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34824249/

相关文章:

c++ - 在 C++ 中搜索 vector 的一部分

C++ double 的值

c - 这个输出是怎么来的?

c++ - 在哪里可以获得有关 Visual Studio 中 C/C++ 链接器的信息?

android - SQLite 游标在内部是如何工作的?

c++ - std::copy 上的 vector push_back

c++ - 将 vector 、队列和指针传递给函数

c - 错误代码处理

mysql - 是否可以在 sqlite 数据库中使用相同的索引名称?

mysql - 将 2 个表合并为 1 个