【问题标题】:Continious transaction with ContentProvider与 ContentProvider 的持续交易
【发布时间】:2014-05-05 19:39:57
【问题描述】:

我有一个巨大的 XML 文件(超过 20 Mb),我无法更改它的格式。它代表数据库。在固定的时间段内它可能会发生变化,我必须更新设备上所有更改的数据。

我正在使用 SyncAdapter 通过 ContentProvider 将大量数据从 XML 传输到 SQLite。 不能用applyBatch(),因为不能把所有的数据都保存在内存里,想用下面的办法:

  1. 启动 nonExclusiveTransaction

  2. 我想清除数据库中的所有表(搜索已删除、更新和创建的记录很慢。)

  3. 使用 SAX 解析器解析 XML 并在行出现时立即插入

  4. 提交事务

我找不到在 ContentProvider 之外开始和提交事务的方法。我是否应该寻找一种不同的方法从 20 Mb XML 文件中保存 ContentProvider 中的记录?

【问题讨论】:

  • 你总共有多少条记录,其中有多少改变了?
  • @pskink 我有大约 150 000 条记录。我无法预测其中有多少会改变,可能是 1 可能是一半。
  • 150k 插入?这将需要一两个星期...您是否真的尝试过 mske 150k 插入?
  • @pskink 是的,我做到了。我的 Nexus 7'12 每秒执行大约 11.5k 次简单插入。在一笔交易中。但我无法理解如何在 ContentProvider =( 之外调用 beginTransaction()
  • 说实话,我不知道你为什么需要 SyncAdapter 和 ContenrProvider 来更新你的数据库...

标签: android android-sqlite android-contentprovider android-syncadapter android-xmlpullparser


【解决方案1】:

您可以通过调用来获取对 ContentProvider 实现的引用

acquireContentProviderClient(authority)

Look at this SO answer

之后,只需将 acquireContentProviderClient 的对象转换为您的自定义 ContentProvider 并调用您开始和结束事务的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 2017-04-03
    • 2020-05-15
    相关资源
    最近更新 更多