我构建了这样一个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 TRANSACTION
和END TRANSACTION
,并且只是用它们括起整个代码块,它就可以工作了。这是否意味着我不能像现在这样准备一份声明?
像往常一样,在花了一整天的时间之后,我在发帖后不久就找到了答案- https://stackoverflow.com/a/34179660/3915384
真的很遗憾,因为我喜欢有一个函数在开始/结束中包装语句,但似乎这是不可能的。
编辑:后来,我还发现自动提交模式似乎是默认启用的,所以我认为所有的开始/结束事务根本不需要。