如何在Objective-C中使用SQLite3中的保存点

时间:2012-11-19 14:22:20

标签: objective-c ios sqlite rollback

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

1 个答案:

答案 0 :(得分:2)

您可以在事务内或其他保存点内使用保存点,但是cannot use transactions inside a savepoint

用保存点替换内部事务。