首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android设备上的批量插入

Android设备上的批量插入
EN

Stack Overflow用户
提问于 2010-10-05 07:55:12
回答 5查看 40.5K关注 0票数 50

我想在下一次升级时向Android数据库中批量插入大约700条记录。做这件事最有效的方法是什么?从不同的帖子中,我知道如果我使用Insert语句,我应该将它们包装在一个事务中。还有一个关于使用你自己的数据库的post,但我需要这些数据进入我的应用程序的标准安卓数据库。请注意,每台设备只能执行一次此操作。

一些想法:

  1. 将一堆SQL语句放在一个文件中,一次一行地读取它们,然后执行SQL。
  2. 将数据放入CSV文件,或者JSON,或者YAML,或者XML,或者其他什么。一次读一行,了解如何导入和导入整个文件。
  3. 创建一个包含所有记录的sqlite数据库,复制到安卓设备上,然后以某种方式合并这两个SQL语句将所有SQL语句放在一个文件中的res/

作为一个大字符串。然后一次读取一行并执行SQL。

最好的方法是什么?有没有其他加载数据的方法?3和4有可能吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-10-05 13:51:40

我不认为有任何可行的方法来完成你清单中的第三或第四。

在其他解决方案中,您列出了两个数据文件包含直接SQL的解决方案,另一个包含非SQL格式的数据。

这三种方法都可以很好地工作,但后一种建议从格式化文件中获取数据并自己构建SQL似乎是最干净的。如果以后添加了批量更新功能,那么您的数据文件仍然可以使用,或者至少可以很容易地处理为可用的形式。此外,数据文件的创建更简单,更不容易出错。最后,拥有“原始”数据将允许导入到其他数据存储格式。

在任何情况下,您都应该(正如您所提到的)将插入组包装到事务中,以避免创建每行事务日志。

票数 8
EN

Stack Overflow用户

发布于 2011-09-22 01:36:22

通常,每次使用db.insert()时,SQLite都会创建一个事务(以及文件系统中的结果日志文件),这会降低速度。

如果使用db.beginTransaction()db.endTransaction(),SQLite只会在文件系统上创建一个日志文件,然后同时提交所有插入操作,从而大大提高速度。

下面是Batch insert to SQLite database on Android中的一些伪代码:

代码语言:javascript
复制
try
{
  db.beginTransaction();

  for each record in the list
  {
    do_some_processing();

    if (line represent a valid entry)
    {
      db.insert(SOME_TABLE, null, SOME_VALUE);
    }

    some_other_processing();
  }

  db.setTransactionSuccessful();
}
catch (SQLException e) {}
finally
{
  db.endTransaction();
}

如果您希望由于意外错误或其他原因而中止事务,只需在不首先将事务设置为成功(db.setTransactionSuccessful())的情况下执行db.endTransaction()

另一种有用的方法是使用db.inTransaction() (返回truefalse)来确定您当前是否正在处理事务。

Documentation here

票数 98
EN

Stack Overflow用户

发布于 2010-12-17 02:18:09

我发现对于批量插入,(显然很少使用的) DatabaseUtils.InsertHelper类比使用SQLiteDatabase.insert快几倍。

另外两个优化也对我的应用程序的性能有所帮助,尽管它们可能并不适用于所有情况:

暂时关闭数据库的内部锁定对performance.也有帮助:

  • 不要锁定为空或空的值您可以确信这样做是安全的( bind )。

我有一个包含更多细节的blog post

票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3860008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档