2011-08-26 235 views
9

我試圖將大量的記錄(以百萬計)插入到SQLite數據庫中。數據從文件流(C++)讀入。如果我開始一個單獨的事務,執行所有的插入,然後提交事務,我只獲得實際插入到我的數據庫中的非常小百分比的記錄。SQLite交易次數限制?

被插入的那些看似隨機的 - 我真的不能看到哪些做得到插入,哪些被甩出來的任何圖案。但是,如果我承諾並在類似2000插入之後再次開始交易,那麼我沒有這個問題,並且插入了所有記錄,儘管這個過程比較緩慢大多數。所以...

是否嚴格限制一次事務內可以完成多少次插入?有沒有辦法改變這個限制?

+1

也涉及到這個問題。只是要在這裏張貼這個後代。如果遇到這種情況,應該首先嚐試批量處理每個事務僅1k-2k的插入,以查看這是否確實是問題。 –

回答

13

我可以在單個事務中插入10百萬行而沒有問題。

我的猜測:

  • 你是在一個單獨的語句插入過多行,打的表達式樹限制最大深度。這可以完全關閉。
  • 您正在使用過長的INSERT而沒有綁定值並且達到SQL Statement限制的最大長度。在這種情況下,使用參數綁定。
  • 它可能是在圖書館中的錯誤(你檢查錯誤代碼的每個API的回報嗎?)

檢查Limits In SQLite。如果您顯示如何在代碼中準備和執行INSERT,可能會有所幫助。