2

アプリケーションに複数のテーブルが必要です。SQLiteOpenHelperこのために、さまざまなテーブルのデータを挿入/削除/更新するための個別のサブクラスを作成しました。SQLiteDatabase私の質問は、これらすべてのサブクラスがコード全体で同じインスタンスを使用するようにするにはどうすればよいかということです。各サブクラスをシングルトンにしましたが。SQLiteDatabaseただし、コード全体で共通のインスタンスを使用するという問題を回避することはできませんでした。

PS :コードを複雑にするので、を使用しContentPoviderたり、単一のサブクラスを作成したりしたくありません。SQLiteOpenHelper

4

2 に答える 2

1

(データベースごとに) 全体で同じ SQLiteOpenHelper を使用している限り、問題ありません。getWriteableDatabase と getReadableDatabase が 1 つのキャッシュされたデータベースのみにアクセスすることを自動的に確認します。

于 2012-11-28T14:13:47.160 に答える
0

コモンの使用で苦労しているところがよくわかりませんSQLiteOpenHelper。1 つのテーブルに対して行うことを複製するだけです。拡張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 に答える