2

我的应用程序中需要多个表。为此,我创建了单独的子类SQLiteOpenHelper来为不同的表插入/删除/更新数据。我的问题是如何确保所有这些子类SQLiteDatabase在整个代码中使用相同的实例。尽管我已将每个子类设为单例。SQLiteDatabase但是,我无法解决在整个代码中使用通用实例的问题。

PS:我不想使用ContentPovider或创建单个SQLiteOpenHelper子类,因为这会使我的代码复杂化。

4

2 回答 2

1

只要您在整个(每个数据库)中使用相同的 SQLiteOpenHelper 就可以了。它会自动确保 getWriteableDatabase 和 getReadableDatabase 只访问一个缓存数据库。

于 2012-11-28T14:13:47.160 回答
0

我真的不明白您在使用 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.
于 2012-11-28T14:33:00.077 回答