gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:17:59 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com