假设我有3个java类:A
,B
和C
。其中每个都有insert()
,delete()
和update()
方法。我想在片段中的单个事务中执行A.delete()
,B.insert()
和C.update()
。问题是这些方法打开它们自己的SQLiteDatabase
实例并执行一个自动立即提交的SQL命令。一个示例方法是:
class A{
...
public void insert(...){
LocalDBHelper localDBHelper = new LocalDBHelper(getActivity()); //extends SQLiteOpenHelper
SQLiteDatabase db = localDBHelper.getWritableDatabase();
db.insert(...);
localDBHelper.close();
}
}
一个明显的解决方案是在片段中执行getWritableDatabase()
,然后执行db.beginTransaction()
,然后将db对象传递给所有这些方法,以便所有SQL命令在同一个db实例上执行。最后,我可以在片段中运行db.endTransaction
。
有更好的方法吗?
另一个解决方案是使用接口(http://www.codepond.org/posts/the-right-way-to-persist-data-in-android-sqlite-database),这非常复杂,我认为实现它没有特别的优势。