2011-08-26 170 views
9

我试图将大量的记录(以百万计)插入到SQLite数据库中。数据从文件流(C++)读入。如果我开始一个单独的事务,执行所有的插入,然后提交事务,我只获得实际插入到我的数据库中的非常小百分比的记录。SQLite交易次数限制?

被插入的那些看似随机的 - 我真的不能看到哪些做得到插入,哪些被甩出来的任何图案。但是,如果我承诺并在类似2000插入之后再次开始交易,那么我没有这个问题,并且插入了所有记录,尽管这个过程比较缓慢大多数。所以...

是否严格限制一次事务内可以完成多少次插入?有没有办法改变这个限制?

+1

也涉及到这个问题。只是要在这里张贴这个后代。如果遇到这种情况,应该首先尝试批量处理每个事务仅1k-2k的插入,以查看这是否确实是问题。 –

回答

13

我可以在单个事务中插入10百万行而没有问题。

我的猜测:

  • 你是在一个单独的语句插入过多行,打的表达式树限制最大深度。这可以完全关闭。
  • 您正在使用过长的INSERT而没有绑定值并且达到SQL Statement限制的最大长度。在这种情况下,使用参数绑定。
  • 它可能是在图书馆中的错误(你检查错误代码的每个API的回报吗?)

检查Limits In SQLite。如果您显示如何在代码中准备和执行INSERT,可能会有所帮助。