如何检查我们是否在SQLite中进行交易

How can I check whether we are in a transaction in SQLite?

本文关键字:SQLite 交易 是否 我们 何检查 检查      更新时间:2023-10-16

我有多个功能,需要写入数据库,他们互相呼叫。到目前为止,我一直在使用保存点以允许交易嵌套。问题在于,我需要在第一个保存点上获得一个独家锁定,而不是默认的延期锁定(这是必要的,以确保我稍后不会被sqlite_busy停止)。因此,我想做以下操作:

int foo(sqlite3 *db){    未签名的char wasin = 1;    如果(!sqlite3_isintransaction(db)){         sqlite3_query(db,"开始独家交易");         wasin = 0;    }    ...做东西....    如果(!wasin){         sqlite3_query(db,"提交事务");    }}

任何想法如何完成?

您检查了此功能吗?:

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

sqlite3_get_autocommit()接口返回非零或零,如果 给定的数据库连接是或不处于自动通信模式, 分别。默认情况下,自动加入模式开启。自动加入模式是 通过开始语句禁用。自动加入模式由 提交或回滚。

因此,如果开始开始,则sqlite3_get_autocommit()将返回0