我的应用程序中需要多个表。为此,我创建了单独的子类SQLiteOpenHelper
来为不同的表插入/删除/更新数据。我的问题是如何确保所有这些子类SQLiteDatabase
在整个代码中使用相同的实例。尽管我已将每个子类设为单例。SQLiteDatabase
但是,我无法解决在整个代码中使用通用实例的问题。
PS:我不想使用ContentPovider
或创建单个SQLiteOpenHelper
子类,因为这会使我的代码复杂化。
我的应用程序中需要多个表。为此,我创建了单独的子类SQLiteOpenHelper
来为不同的表插入/删除/更新数据。我的问题是如何确保所有这些子类SQLiteDatabase
在整个代码中使用相同的实例。尽管我已将每个子类设为单例。SQLiteDatabase
但是,我无法解决在整个代码中使用通用实例的问题。
PS:我不想使用ContentPovider
或创建单个SQLiteOpenHelper
子类,因为这会使我的代码复杂化。
只要您在整个(每个数据库)中使用相同的 SQLiteOpenHelper 就可以了。它会自动确保 getWriteableDatabase 和 getReadableDatabase 只访问一个缓存数据库。
我真的不明白您在使用 common 时在哪里苦苦挣扎SQLiteOpenHelper
。你只需要复制你为一张桌子所做的事情!创建一个扩展SQLiteOpenHelper
并进行复制的自定义类。
public class SQLiteCustomBase extends SQLiteOpenHelper {
private static final String CREATE_BDD_1 = "CREATE TABLE ...";
private static final String CREATE_BDD_2 = "CREATE TABLE ...";
public SQLiteCustomBase(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_BDD_1);
db.execSQL(CREATE_BDD_2);
}
@Override
public void onOpen(SQLiteDatabase db) {}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE " + Vars.TABLE_1 + ";");
db.execSQL("DROP TABLE " + Vars.TABLE_2 + ";");
onCreate(db);
}
}
然后在您执行一些数据库操作的类中:
public class HandlerClass {
private SQLiteDatabase db;
private SQLiteCustomBase customBase;
public HandlerClass(Context context){
customBase = new SQLiteCustomBase(context, Vars.NAME_DB, null, Vars.VERSION_DB);
}
public void open(){
db = customBase.getWritableDatabase();
}
public void openForRead(){
db = customBase.getReadableDatabase();
}
public void close(){
db.close();
}
public SQLiteDatabase getDB(){
return db;
}
}
void myMethods()
{
bdd.insert(Vars.TABLE_1, null, values);
bdd.insert(Vars.TABLE_2, null, values);
}
etc.