我有一个“私有”方法,在我的sqlite数据库上执行sql指令:
-(void)runQuery:(const char*)query isQueryExecutable:(BOOL)queryExecutable withArguments:(NSArray*)arguments
问题在于,在方法开始时,它会打开与数据库的连接,最后在方法结束时关闭它。
现在,我想要的是创建3个私有方法来创建,提交和回滚一个事务,每个方法都会调用
sqlite3_exec(db, %command%, 0, 0, 0)
其中%命令%为“BEGIN”,“COMMIT”,“ROLLBACK”,具体取决于方法。
而且,我接下来要做的是调用begin transaction,然后使用runQuery:isQueryExecutable:witArguments:前面描述的方法,最后是commit或rollback。
我的问题是:即使每次调用runQuery,事务都会保持打开状态:isQueryExecutable:witArguments:我打开并关闭与数据库的连接?
示例代码:
createTransaction
for n times:
call runQuery
commitTransaction
答案 0 :(得分:1)
每个连接只使用一个事务;使用仍处于活动状态的事务关闭连接会将其回滚。
您不应重复重新打开数据库。只需使用一个连接即可访问所有数据库。