我的应用程序中需要多个表。为此,我创建了SQLiteOpenHelper
的单独子类来插入/删除/更新不同表的数据。我的问题是如何确保所有这些子类在整个代码中使用相同的SQLiteDatabase
实例。虽然我已经使每个子类成为单例。但是,我无法解决在整个代码中使用通用SQLiteDatabase
实例的问题。
PS :我不想使用ContentPovider
或创建单个SQLiteOpenHelper
子类,因为这会使我的代码复杂化。
答案 0 :(得分:1)
只要你在整个(每个数据库)使用相同的SQLiteOpenHelper就可以了。它会自动确保getWriteableDatabase和getReadableDatabase只访问一个缓存的数据库。
答案 1 :(得分:0)
我真的没有看到你在使用普通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.