使用 ContentProvider 插入多行
我需要在一个事务中插入几行。我可以使用 ContentProvider 来实现吗?
I need to make insert of few rows in one transaction. Can I do it with ContentProvider?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我已经在我的应用程序中实现了这一点,这是我使用的代码的要点。
在我的内容提供程序中,我重写了 applyBatch() 方法,这是一个非常简单的重写方法:
结果将提供给下一个操作,因为您希望支持反向引用。当我实际上想在这个单个事务中更改数据库中的内容时,我循环遍历我的内容并执行如下操作:
您只需要记住通过调用来完成:
这将在单个事务中执行您的内容,并在需要时支持反向引用之前插入的 id 没有问题。
I have implemented this in my app and here's the gist of the code that I use.
In my content provider, I have overridden the applyBatch() method and it's a very simple method to override:
The result is given to the next operation because you want to support back references. When I actually want to change stuff in the database in this single transaction I loop over my content and do stuff like this:
You just need to remember to finish by calling:
This will perform your stuff in a single transaction and supports backreferences if you need the id from an earlier insert without issue.
在客户端,
ContentResolver
支持bulkInsert()
方法。这些内容不一定会由ContentProvider
在单个事务中进行处理,因为ContentProvider
可能不执行任何事务。On the client side,
ContentResolver
supports abulkInsert()
method. Those will not necessarily be processed in a single transaction by theContentProvider
, simply because there may not be any transactions performed by theContentProvider
.这是bulkInsert的示例:
在您的代码中类似:
Here an example for bulkInsert:
And in your code something like:
我还使用替换模式插入行 -
db.insertWithOnConflict(EVENT_TABLE_NAME, null, value, SQLiteDatabase.CONFLICT_REPLACE);
如果记录已经存在,它将消除冲突
在DatabaseHelper中添加UNIQUE INDEX
并调用bulkInsert,如下所示:
I also use replace mode for insert row -
db.insertWithOnConflict(EVENT_TABLE_NAME, null, value, SQLiteDatabase.CONFLICT_REPLACE);
Its will rid of conflict if record is exist already
In DatabaseHelper add UNIQUE INDEX
And call bulkInsert like this: