我正在开发一个 iOS 应用程序,它有一个相当大的 sqlite 数据库,每天至少获取一次,如果事务运行时发生问题,我想使用保存点来恢复它。
我一直在运行的语句如下:
const char *sqlSetSavePoint = @"savepoint updateSavepoint";
const char *sqlRollback = @"Rollback transaction to savepoint updateSavepoint";
我显然省略了许多实际运行这些语句的代码,但由于我对其他语句运行相同的方法并且它们工作正常,所以我确信问题不存在。我在运行插入事务(最多插入 20 万行)之前设置保存点,然后如果出现异常或错误,我会尝试回滚。
我的问题是;这些回滚语句是否正确(我只是做错了什么)或者是否有其他方法在 iOS 中的 sqlite3 中使用保存点?
编辑:为了澄清起见,我试图在运行多个事务之前设置一个保存点,如果其中任何一个事务或从服务器获取的数据失败,我想完全回滚到保存点。简单来说就是这样:
"savepoint updateSavepoint"
->FetchDatafromServer()
-> "Begin exclusive transaction"
//sqlite3_bind functions
-> "Commit transaction"
->FetchDatafromServer()
-> "Begin exclusive transaction"
//sqlite3_bind functions
-> "Commit transaction"
->FetchDatafromServer()
-> "Begin exclusive transaction"
//sqlite3_bind functions
-> "Commit transaction"
->FetchDatafromServer()
-> "Begin exclusive transaction"
!!Failure!!
"Rollback transaction to savepoint updateSavepoint"
最佳答案
您可以在事务内或其他保存点内使用保存点,但您cannot use transactions inside a savepoint .
用保存点替换您的内部事务。
关于objective-c - 如何在 Objective-C 中使用 SQLite3 中的保存点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13455733/