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

标签 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"

最佳答案

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

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

关于objective-c - 如何在 Objective-C 中使用 SQLite3 中的保存点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13455733/

相关文章:

objective-c - UISearchDisplayController 的搜索结果具有与搜索表不同的单元格布局和行为

ios - UIBezierPath 中的厚度不均匀

ios - 使用 Twilio API/SDK 在 iOS 上创建基本电话应用程序

ios - 请求 HealthKit 权限时对 UIViewController 的不平衡调用

iOS 9 Swift 2.0 如何获得通知以便当用户向另一个用户发送消息时他们会收到通知?

ios - Swift "Bridging-Header.h"文件不允许我在 .swift 文件中实例化 objective-c 类

c# - LINQPad:如何使用SQLite整数主键自动赋值

c - 定位Vala/Sqlite3内存泄漏

python - 模型内部的 IntegrityError.Django 中的 DoesNotExist 异常

ios - 如何使用 swift 创建文字 XML 字符串