当我查看其他人使用 SQLite3 C API 编写的代码时,我发现 sqlite3_column_decltype
和 sqlite3_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/