我有多个需要写入数据库的函数,它们互相调用。到目前为止,我一直在使用SAVEPOINT来允许嵌套事务。问题是我需要在第一个SAVEPOINT而不是默认的DEFERRED锁上获得一个EXCLUSIVE锁(这是确保我以后不会被SQLITE_BUSY暂停的必要条件)。因此,我想做以下事情:
int foo(sqlite3 *db){ unsigned char wasIn = 1; if (!sqlite3_isInTransaction(db)){ sqlite3_query(db, "BEGIN EXCLUSIVE TRANSACTION"); wasIn = 0; } ...do stuff.... if (!wasIn){ sqlite3_query(db, "COMMIT TRANSACTION"); } }
知道怎么做到这一点吗?
答案 0 :(得分:5)
你检查过这个功能吗?:
http://www.sqlite.org/c3ref/get_autocommit.html
如果是,则sqlite3_get_autocommit()接口返回非零或零 给定的数据库连接是否处于自动提交模式, 分别。默认情况下,自动提交模式处于启用状态。自动提交模式是 由BEGIN声明禁用。自动提交模式由a重新启用 COMMIT或ROLLBACK。
所以如果BEGIN启动,那么sqlite3_get_autocommit()
将返回0