Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中如何在sqlite数据库中插入大量数据_Android_Sqlite_Csv_Android Sqlite - Fatal编程技术网

Android中如何在sqlite数据库中插入大量数据

Android中如何在sqlite数据库中插入大量数据,android,sqlite,csv,android-sqlite,Android,Sqlite,Csv,Android Sqlite,我有很多数据存储在CSV文件(大约20100行)中,需要将其插入sqlite数据库 此插入需要很长时间才能完成。插入此数据的最快方法是什么?使用AsyncTask,在数据库中插入20100行。使用此异步任务,整个工作将在后台运行。要了解更多信息,请按照您的建议进行操作,行数非常多,我建议不要使用AsyncTask,因为它与您的活动生命周期无关,即如果启动它的活动死亡,并不意味着AsyncTask也会死亡,因此,如果您尝试启动一个异步任务,并且您的活动以某种方式停止,例如屏幕旋转或按下后退键,则在

我有很多数据存储在CSV文件(大约20100行)中,需要将其插入sqlite数据库


此插入需要很长时间才能完成。插入此数据的最快方法是什么?

使用
AsyncTask
,在数据库中插入
20100
行。使用此异步任务,整个工作将在后台运行。要了解更多信息,请按照您的建议进行操作,行数非常多,我建议不要使用
AsyncTask
,因为它与您的活动生命周期无关,即如果启动它的活动死亡,并不意味着
AsyncTask
也会死亡,因此,如果您尝试启动一个异步任务,并且您的活动以某种方式停止,例如屏幕旋转或按下后退键,则在重新启动另一个
异步任务时,将生成该任务,而不是将其链接到已在执行的
异步任务。因此,重复相同的操作

所以,总而言之,我建议采用以下方法

(A)

  • 创建一个
    IntentService
    ,它的
    handleIntent()
    api已经在工作线程中执行,因此您不必担心任何事情,并且一旦队列中的所有消息完成,它就会自动死亡,因此根本不必担心任何资源泄漏

  • 编写批量插入行的逻辑,并使用content resolver bulkInsert()api进行同样的操作。我建议每批插入100个ROE,您可以执行回滚和错误检查以确保插入正常进行

  • 完成所有插入后,您可以使用Handler和Messenger发回UI

  • 有了这些,你将面临两大挑战

  • 不挂断用户界面,避免任何可能的ANR
  • 即使按下back键,也要确保db操作在后台任务中顺利进行

  • 最好的解决方案是使用服务和executor,因为正如OP所描述的,这个过程可能需要很多时间。感谢你们将能够关闭应用程序或将其移动到后台,而不用担心你们漫长的过程被破坏

    使用AsyncTask不是一个好主意,因为它是为简短的操作而设计的,正如在上所描述的,您还必须小心使用它。更改方向屏幕会导致重新创建视图以及asynctask的任务

    AsyncTasks最好用于短期操作(几秒钟 如果您需要让线程长时间运行 同时,强烈建议您使用 并发包,如Executor、ThreadPoolExecutor 未来的任务


    使用AsyncTask Insert在数据库中插入20100行。使用此异步任务可以在后台运行工作。有关更多信息,请点击此链接,因为它花费了太多时间。我也试过了@Jigarshekh你必须限定“长时间”的含义。如果编码正确,则不会超过几秒钟
    ContentResolver.bulkInsert
    应该会让它更快。然而,我建议您重新考虑您的应用程序设计:您真的需要在运行时插入这么多数据吗?在开发应用程序时,可以考虑创建和填充数据库,并将其与应用程序一起使用。如果不控制定位,Asynctask就不安全。最好的方法是使用该服务,这样即使应用程序处于后台或关闭状态,进程也能完成。AsyncTask不是为很长的进程设计的。好吧,但我是android开发的新手,所以如何使用它呢?你能帮我吗@死鱼有很多书和在线教程描述这项服务是如何工作的。随便看看。我是android开发的新手,你能给我解释一下如何使用它吗@Techfiststart编码,并与大家分享您的努力将帮助您前进。无法为您编写完整的逻辑,请尝试执行我已经编写的操作,如果您遇到问题,请给我回信。好的,如果有任何问题,我将尝试再次询问您@Techfist