在我的应用程序中,我为一个数据库实现了多个内容提供程序,每个表一个,因为有很多表,并且在单个内容提供程序中所有表的逻辑都会非常混乱。 / p>
我在这个链接中遵循了Simo给出的建议:
Content provider for multiple tables
因此,有一个抽象的AbsShopContentProvider,它有一个SQLiteOpenHelper成员变量。然后,此抽象内容提供程序由多个内容提供程序扩展,如Table1Provider,Table2Provider,...
所以现在每个Content Provider都有一个SQLiteOpenHelper实例。这会产生与线程安全有关的任何问题吗?
最好在我的抽象内容提供程序中将此SQLiteOpenhelper变量设置为“static”,并且只有在它为null时才在抽象提供程序的onCreate()中创建它的实例吗?它会解决拥有许多数据库帮助程序对象的问题吗?
答案 0 :(得分:2)
您只需要确保共享一个SQLiteDatabase
实例,SQLite会自动为同一个数据库锁定。
要使数据库全局可用,请扩展Application类:
public class App extends Application {
private static SQLiteDatabase db;
public static SQLiteDatabase getDb() {
return db;
}
@Override
public void onCreate() {
super.onCreate();
db = new MySQLiteOpenHelper(getApplicationContext()).getWritableDatabase();
}
}
并将其添加到清单:
<application
android:name=".App"
现在,您可以通过调用App.getDb()