繁体   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