簡體   English   中英

如何在Android的SQLite數據庫中插入大量數據

[英]How to insert large amount of data in sqlite database in Android

我有很多數據存儲在CSV文件中(約20,100行),需要將其插入sqlite數據庫中。

此插入內容需要很長時間才能完成。 插入此數據的最快方法是什么?

正如您所建議的,行數很大,我建議您不要使用AsyncTask ,因為它與您的Activity生命周期沒有關系,即,如果啟動它的活動死亡,那並不意味着AsyncTask死亡,因此,如果嘗試啟動AsyncTask以及如果您的活動停止(例如,屏幕旋轉或按下返回鍵),則在重新啟動時將生成另一個AsyncTask而不是將其鏈接到已經執行的AsyncTask 因此重復相同的操作。

因此,總而言之,我建議您采用以下方法

(一種)

  1. 創建一個IntentService ,它的handleIntent() api已經在工作線程中執行,因此您不必擔心任何事情,並且一旦隊列中的所有消息完成,它就會自動死亡,因此完全不必擔心泄漏任何資源。

  2. 編寫用於批量插入行的邏輯,使用內容解析器bulkInsert()api進行操作。 我建議每批插入100個魚卵,您可以執行回滾和錯誤檢查以確保插入正常。

  3. 完成所有插入操作后,您可以使用Handler和Messengers回發到您的UI。

通過所有這些,您將實現兩個主要挑戰

  1. 不要掛斷您的UI,避免任何可能的ANR
  2. 即使按下返回鍵,也要確保db操作順利進行,因為它是在后台任務中處理的。

使用AsyncTask<> ,在數據庫中插入20,100行。 使用此asynctask,整個工作在后台運行。 欲了解更多信息,請點擊此鏈接

最好的解決方案是使用服務和執行程序,因為正如OP所述,過程可能會花費很多時間。 謝謝您將能夠關閉應用程序或將其移至后台,而無需擔心您的漫長過程被破壞了。

使用AsyncTask並不是一個好主意,因為它已針對http://developer.android.com/reference/android/os/AsyncTask.html中所述的簡短操作進行了設計。您還必須小心使用它。 更改方向屏幕會導致重新創建視圖以及asynctask的任務。

理想情況下,應將AsyncTasks用於較短的操作(最多幾秒鍾)。如果需要使線程長時間運行,則強烈建議您使用java.util.concurrent包提供的各種API,例如執行程序,ThreadPoolExecutor和FutureTask。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM