2

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

1 回答 1

2

您可以在事务内或其他保存点内使用保存点,但不能在保存点内使用事务

用保存点替换您的内部事务。

于 2012-11-19T14:56:48.483 回答