安卓:使用ContentResolver的时候SQLite的交易 [英] Android: SQLite transactions when using ContentResolver

查看:147
本文介绍了安卓:使用ContentResolver的时候SQLite的交易的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们的目标:从XML数据更新数据库

The goal: refresh database from XML data

这个过程:

  • 开始交易
  • 删除从表中所有现有行
  • 在每解析的XML的每一个主要元素插入行到主表和获得PK
  • 每主元素的每个子插入记录到第二台从previous步提供FK
  • 提交的事务
  • Start transaction
  • Delete all existing rows from the tables
  • Per each main element of parsed XML insert row into main table and get PK
  • Per each child of the main element insert record into 2nd table providing FK from the previous step
  • Commit transaction

pretty的标准的东西,只要数据库操作。问题是,CRUD操作没有在的ContentProvider 做,而是用 ContentResolver的,以便插入例如看起来像 resolver.insert(CONTENT_URI,contentValues​​)。该ContentResolver的API似乎并未有任何涉及到交易,我不能用 bulkInsert 因为我在2个表间歇插入(加上我想有删除的事务中也一样)。

Pretty standard stuff as far as db operations. The problem is that CRUD operations are not done within ContentProvider but rather using ContentResolver so the insert for example looks like resolver.insert(CONTENT_URI, contentValues). The ContentResolver API doesn't seem to have anything pertained to transaction and I cannot use bulkInsert since I'm inserting in 2 tables intermittently (plus I want to have delete inside the transaction as well).

我想注册我的个性的ContentProvider 的监听器使用 registerContentObserver 但由于 ContentResolver的#acquireProvider 方法隐藏我如何获得正确的参考?

I was thinking of registering my customized ContentProvider as listener by using registerContentObserver but since ContentResolver#acquireProvider methods are hidden how do I obtain the right reference?

我是运气不好?

推荐答案

我已经看到了,在谷歌I / O应用程序的源$ C ​​$ C,它们将覆盖的ContentProvider 它里面的 applyBatch()方法和用途的交易。因此,您可以创建一个批处理 ContentProviderOperation 取值,然后调用 getContentResolver()。applyBatch(uri_authority,批次)

I've seen that in the source code of Google I/O application, they override ContentProvider's applyBatch() method and use transactions inside of it. So, you create a batch of ContentProviderOperation s and then call getContentResolver().applyBatch(uri_authority, batch).

我打算用这种方式来看看它是如何工作的。我很好奇,如果有其他人尝试过。

I'm planning to use this approach to see how it works. I'm curious if anyone else has tried it.

这篇关于安卓:使用ContentResolver的时候SQLite的交易的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆