在事务中通过预处理语句将数组绑定到blob



我构建了这样一个SQL语句:

"BEGIN TRANSACTION; INSERT OR IGNORE INTO test_table(id,store,insert_datetime) VALUES('abcde', ?, datetime('now')); END TRANSACTION;"

然后我调用:

sqlite3_stmt* prepared_statement;
sqlite3_prepare_v2(db, stmt, -1, &prepared_statement, 0);

可以,后面跟着:

int index = 1;
sqlite3_bind_blob(prepared_statement, index, buffer, (int)buffer_len, SQLITE_STATIC);

sqlite3_bind_blob(...)失败"SQLite错误(25)列索引超出范围">

如果我从我的语句中删除BEGIN TRANSACTIONEND TRANSACTION,并且只是用它们括起整个代码块,它就可以工作了。这是否意味着我不能像现在这样准备一份声明?

像往常一样,在花了一整天的时间之后,我在发帖后不久就找到了答案- https://stackoverflow.com/a/34179660/3915384

真的很遗憾,因为我喜欢有一个函数在开始/结束中包装语句,但似乎这是不可能的。

编辑:后来,我还发现自动提交模式似乎是默认启用的,所以我认为所有的开始/结束事务根本不需要。

最新更新