我正在开发一个 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"