加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Objective-c – iOS SQLite FMDB交易..正确使用?

发布时间:2020-12-16 05:45:30 所属栏目:百科 来源:网络整理
导读:我将尝试使用FMDB SQLite iOS包装器进行交易. 文档对交易有点模糊,但从快速浏览一些功能我已经提出了以下逻辑: [fmdb beginTransaction]; // Run the following query BOOL res1 = [fmdb executeUpdate:@"query1"]; BOOL res2 = [fmdb executeUpdate:@"quer
我将尝试使用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];

解决方法

如果第一次失败,我不会尝试第二次更新.
bool ret = false;
[fmdb beginTransaction];
ret = [fmdb executeUpdate:@"query1"];
if (ret)
{
    ret = [fmdb executeUpdate:@"query2"];
    if (!ret)
    {
         // report error 2
    }
}

if(ret) 
{
    if (![fmdb commit])
    {
        // panic!
    }
}
else
{
    if (![fmdb rollback])
    {
        // panic!
    }
}

对于偏执狂的鲁棒性,你应该尝试… catch块,以防任何事情引起异常.如果你这样做,你可以利用它来获得优势.

[fmdb beginTransaction];
@try
{
    if (![fmdb executeUpdate:@"query1"])
    {
        // report error
        @throw someExcpetion;
    }
    if (![fmdb executeUpdate:@"query2"])
    {
        // report error
        @throw someExcpetion;
    }
    [fmdb commit]
}
@catch(NSException* e)
{
    [fmdb rollback];
    // rethrow if not one of the two exceptions above
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读