即使我打开和关闭与数据库的连接,事务的状态是否仍然存在

Will the state of the transaction remain even if I open and close connections to the database

我有一个 "private" 方法在我的 sqlite 数据库上执行 sql 指令:

-(void)runQuery:(const char*)query isQueryExecutable:(BOOL)queryExecutable withArguments:(NSArray*)arguments

问题是在方法开始时,它打开了一个到数据库的连接,最后在方法结束时关闭了它。

现在,我想要创建 3 个用于创建、提交和回滚事务的私有方法,每个方法都会调用

sqlite3_exec(db, %command%, 0, 0, 0)

其中 %command% 是 "BEGIN"、"COMMIT"、"ROLLBACK",具体取决于方法。

然后,我接下来要做的是调用 begin transaction 然后使用前面描述的 runQuery:isQueryExecutable:witArguments: 方法,最后提交或回滚。

我的问题是:事务是否会保持打开状态,即使我每次调用 runQuery:isQueryExecutable:witArguments:我打开和关闭与数据库的连接?

示例代码:

createTransaction
for n times:
    call runQuery
commitTransaction

每个连接只使用一个事务;关闭与仍处于活动状态的事务的连接会将其回滚。

您不应反复重新打开数据库。只需对所有数据库访问使用一个连接。