在SQlite中遍历一张表的同时更新这个表的内容碰到的一些问题

在一个连接中遍历一个表的时候同时使用sql语句更新这个表的值,碰到错误”database table locked”
首先尝试在遍历前使用 PRAGMA read_uncommitted = True;
在遍历完成后在执行PRAGMA read_uncommitted = False;
这么处理后在遍历过程中可以对表做更新操作,不过引起另外一个问题,只能遍历一半的表记录,且当为记录行数为基数时会出现“not an error”错误,经测试估计是在遍历过程中使用执行更新sql语句时,同时向后移动了遍历的位置。
再次尝试使用两个链接来做遍历更新处理,其中一个链接做遍历,另外一个链接做更新。 在记录数少时一切正常,但是当记录数很多时候,在后面记录的更新时会出现“SQL logic error or missing database” 的错误。
最终对要遍历的表采用limit关键字分片读取出需要的数据,然后对这些数据做更新,完成后再读入下一组数据继续处理。

   load a block data
   while has block data
      foreach record in block
       do update
      load next block data

Popularity: 7% [?]

Related

Comments

One Response to “在SQlite中遍历一张表的同时更新这个表的内容碰到的一些问题”

  1. Joe on September 27th, 2010 8:24 pm

    Try query.finalize() before new update command.

    [Reply]