【发布时间】:2014-05-05 19:39:57
【问题描述】:
我有一个巨大的 XML 文件(超过 20 Mb),我无法更改它的格式。它代表数据库。在固定的时间段内它可能会发生变化,我必须更新设备上所有更改的数据。
我正在使用 SyncAdapter 通过 ContentProvider 将大量数据从 XML 传输到 SQLite。 不能用applyBatch(),因为不能把所有的数据都保存在内存里,想用下面的办法:
启动 nonExclusiveTransaction
我想清除数据库中的所有表(搜索已删除、更新和创建的记录很慢。)
使用 SAX 解析器解析 XML 并在行出现时立即插入
提交事务
我找不到在 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