c++ - 如何检查我们是否在 SQLite 中的事务中?

标签 c++ c sqlite

<分区>

我有多个函数需要写入数据库并且它们相互调用。到目前为止,我一直在使用 SAVEPOINT 以允许嵌套事务。问题是我需要在第一个 SAVEPOINT 上获得一个 EXCLUSIVE 锁,而不是默认的 DEFERRED 锁(这是确保我以后不会被 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");
    }
}

知道如何实现吗?

最佳答案

你检查过这个函数了吗?:

http://www.sqlite.org/c3ref/get_autocommit.html

The sqlite3_get_autocommit() interface returns non-zero or zero if the given database connection is or is not in autocommit mode, respectively. Autocommit mode is on by default. Autocommit mode is disabled by a BEGIN statement. Autocommit mode is re-enabled by a COMMIT or ROLLBACK.

所以如果开始了 BEGIN 那么 sqlite3_get_autocommit() 将返回 0

关于c++ - 如何检查我们是否在 SQLite 中的事务中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21467616/

相关文章:

c++ - 程序因为字符串崩溃?

iphone - 在任何操作系统上运行不同格式的可执行文件

c - 这个 C 程序的奇怪输出

java - 每次更新查询耗时 0.1 秒

java - SQLite 数据库到数据类

c++ - 在模板参数 : Some usage examples and. 中使用 auto .. 如何使其与恒定大小的 C 数组一起使用?

c++ - 恢复中止的下载?

c++ - range v3 展平序列

c++ - 在 C/C++ 中进行数学运算时,我应该对哪些变量进行类型转换?

iphone - 带有 phonegap 的 IOS 上的 SQLite