围绕多种方法的Content Provider事务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了围绕多种方法的Content Provider事务相关的知识,希望对你有一定的参考价值。

我需要围绕两个我没有创建但应该使用的方法创建一个Content Provider事务。方法addDog(Context, Dog) throws Exception在Dog表中添加一行。方法addToy(Context,Toy, long dogId) throws Exception在玩具表中添加一行。我想创建一个方法

public void addDogAndToyAtomic(Context context, Dog dog, Toy toy) throws Exception{
  Transaction transaction = null;
  try{
    transaction = ContentProviders.getTransaction(...);//what is this?
    transaction.start();
    . . . //some more queries here and then
    long dogId = addDog(context, dog);
    addToy(context, toy, dogId);
    transaction.commit();
  }finally{
    if(null != transaction)transaction.close();
  }
}

如何在android中创建此方法?我知道正在使用的提供程序的CONTENT_URI,实际上我可以在这两种方法中看到。这个问题的约束是我想使用现有的两种方法来创建第三种方法。

如果你很好奇,addDog看起来像这样:

public long addDog(Context context, Dog dog){
  Uri uri= context.getContentResolver().insert(
    PetContract.Dog.CONTENT_URI,
    dog.getContentValues()
  );
  return ContentUris.parseId(uri);
}
答案

内容提供程序是一种抽象,不一定在具有事务的“真实”数据库之上实现。

要一次执行多个独立操作,请使用applyBatch()。 (实际实现可能会也可能不会使用单个事务。)

如果所有其他方法都失败了,内容提供商可以为自定义操作实现call()

但在一般情况下,如果没有内容提供商实施的合作,这是不可能的。

以上是关于围绕多种方法的Content Provider事务的主要内容,如果未能解决你的问题,请参考以下文章

Android深入四大组件Content Provider的启动过程

Android:通过 Content Provider 访问 SQLite 数据库还是实现 DAO?

Spring JPA事务通过多种方法

Android???????????????Content Provider

如何使用 EF 在 asp.net MVC 中进行多种方法的一项事务

Android学习总结——Content Provider