我需要围绕两个我没有创建但应该使用的方法创建内容提供商事务。方法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);
}
答案 0 :(得分:0)
内容提供程序是一种抽象,不一定在具有事务的“真实”数据库之上实现。
要一次执行多项独立操作,请使用applyBatch()。 (实际实现可能会也可能不会使用单个事务。)
如果所有其他方法都失败,内容提供商可以为自定义操作实施call()。
但是在一般情况下,如果没有内容提供商实施的合作,这是不可能的。