即使我打开和关闭与数据库的连接,事务的状态是否仍然存在
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
每个连接只使用一个事务;关闭与仍处于活动状态的事务的连接会将其回滚。
您不应反复重新打开数据库。只需对所有数据库访问使用一个连接。
我有一个 "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
每个连接只使用一个事务;关闭与仍处于活动状态的事务的连接会将其回滚。
您不应反复重新打开数据库。只需对所有数据库访问使用一个连接。