遍历事务之外的结果集?

Posted

技术标签:

【中文标题】遍历事务之外的结果集?【英文标题】:Iterate through a ResultSet outside of a Transaction? 【发布时间】:2018-02-22 18:36:42 【问题描述】:

我有一些看起来像这样的代码:

__block FMResultSet *s;
[databaseQueue inDatabase:^(FMDatabase * _Nonnull db) 
    s = [db executeQuery: @"SELECT * session;"];
];

while ([s next])
    //convert the row into a Session object.
    [databaseQueue inDatabase:^(FMDatabase * _Nonnull db) 
        [db executeUpdate:@"UPDATE session ...", arg1, arg2];
    ];

这样好吗?还是我需要在第一个 inDatabase 块内移动 while 循环?

我正在使用 FMDB 和 Objective C,但我猜这样的东西在大多数数据库包装器中都是标准的。

【问题讨论】:

【参考方案1】:

经过更多测试,我能够回答我自己的问题。当我尝试上面概述的内容时收到警告:

警告:在执行 [FMDatabaseQueue inDatabase:] 后,周围至少有一个打开的结果集

所以我猜你可以做到,因为我确实得到了结果。但至少fmdb,不喜欢这个主意……

【讨论】:

以上是关于遍历事务之外的结果集?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在循环结果集时无法启动事务?

如何遍历mysql结果集

另一种方式实现事务码SE16里的结果集修改

遍历查询结果集,update数据

sqlserver游标使用,遍历结果集,每行处理

sqlserver编辑结果集,在遍历中处理逻辑(修改数据)