我有多个需要写入数据库的函数,它们互相调用。到目前为止,我一直在使用SAVEPOINT来嵌套事务。问题是我需要在第一个SAVEPOINT上获得一个EXCLUSIVE锁,而不是默认的DEFERRED锁(这是必要的,以确保以后不会被SQLITE_BUSY暂停)。因此,我想做如下事情:
int foo(sqlite3 * db){
无符号char wasIn = 1;
如果(!sqlite3_isInTransaction(db)){
sqlite3_query(db,“ BEGIN独家交易”);
wasIn = 0;
}
...做东西....
如果(!wasIn){
sqlite3_query(db,“ COMMIT TRANSACTION”);
}
}
任何想法如何做到这一点?
您是否检查了此功能?:
http://www.sqlite.org/c3ref/get_autocommit.html
如果给定的数据库连接是否处于自动提交模式,则sqlite3_get_autocommit()接口分别返回非零或零。默认情况下,自动提交模式是打开的。自动提交模式被BEGIN语句禁用。通过COMMIT或ROLLBACK重新启用自动提交模式。
因此,如果BEGIN已启动,sqlite3_get_autocommit()则将返回0
| 归档时间: |
|
| 查看次数: |
540 次 |
| 最近记录: |