iOS SQLite FMDB 事务..正确用法?
我将尝试使用 FMDB SQLite iOS 包装器进行事务处理。
该文档对交易有点模糊,但通过快速查看一些函数,我得出了以下逻辑:
[fmdb beginTransaction];
// Run the following query
BOOL res1 = [fmdb executeUpdate:@"query1"];
BOOL res2 = [fmdb executeUpdate:@"query2"];
if(!res1 || !res2) [fmdb rollback];
else [fmdb commit];
I'm just going to try out using transactions with the FMDB SQLite iOS wrapper.
The documentation is a little vague on transactions but from having a quick look at some functions I have come up with the following logic:
[fmdb beginTransaction];
// Run the following query
BOOL res1 = [fmdb executeUpdate:@"query1"];
BOOL res2 = [fmdb executeUpdate:@"query2"];
if(!res1 || !res2) [fmdb rollback];
else [fmdb commit];
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您还可以使用 FMDatabaseQueue 来处理事务,它是 fmdb 的一部分:
文档< /a>
You could also use FMDatabaseQueue to handle your transactions, which is part of fmdb:
Documentation
如果第一次更新失败,我不会尝试进行第二次更新。
为了保持偏执的鲁棒性,你应该有一个 try ... catch 块,以防万一抛出异常。如果你这样做了,你就可以利用它来发挥你的优势。
I wouldn't try to do the second update if the first failed.
For paranoid robustness you should have a try ... catch block in case anything throws an exception. If you do, you can use it to your advantage.
快捷方式:
Swift way:
这似乎是一个有效的使用场景,我可能会在执行回滚之前添加输出
-lastErrorMessage
和-lastErrorCode
的值,以便您了解什么完全错了。更好的是,在每个
-executeUpdate
之后进行这些调用,这样您就知道每个语句之后是否发生了错误:It seems like a valid usage scenario, to which I might add outputting the values of
-lastErrorMessage
and-lastErrorCode
before you perform a rollback, so that you get a sense of what exactly went wrong.Better yet, make those calls after each
-executeUpdate
, so you'll know if an error occured after each statement: