各 SQLite テーブルのコード (テーブルの初期構築とそのテーブルに対する操作を含む) を、SQLiteOpenHelper を拡張する個別のクラスに分割しています。
これらのテーブルを作成する (つまり、onCreate() メソッドを呼び出す) には、DATABASE_VERSION をインクリメントする必要があります (詳細については、こちらの回答を参照してください)。
しかし、この方法論では、クラス/テーブルごとに異なるバージョン番号になります。作成した 2 番目のテーブルの DATABASE_VERSION 値を 2 に設定する必要があり、3 番目のテーブルを 3 に設定する必要があります。
そのため、同じ DATABASE (*.db ファイル) に対して複数の異なるバージョン値を使用することになります。それらがすべて同じ値である場合、onUpgrade() メソッドは呼び出されないため、onCreate() メソッドは呼び出されず、新しいテーブルは作成されません。
これは「大丈夫」ですか?複数の異なるバージョン番号を持つデータベースを持っていますか?
私が知っている唯一の他の(合理的な)オプションは、すべてのDBコード(複数のテーブルをカバーする)をSQLiteOpenHelperを拡張する単一のクラスに入れることです-実際にそうするのが好ましい方法ですか?IOW、テーブルごとに 1 つずつ、いくつかのクラスに db コードを分離することは、助けになりますか、それとも妨げになりますか?
アップデート
CommonsWareのアドバイスに従って、SQLiteOpenHelperを拡張するクラスを1つだけ使用して、新しいテーブルを徐々に追加するための私の非破壊的な方法です(「IF NOT EXISTS」をDDLに挿入することによる):
@Override
public void onCreate(SQLiteDatabase db) {
String CONDITIONALLY_CREATE_VENDORS_TABLE = "CREATE TABLE IF NOT EXISTS " +
TABLE_VENDORS + "("
+ COLUMN_ID + " INTEGER PRIMARY KEY," + COLUMN_VENDORID
+ " TEXT," + COLUMN_COMPANYNAME + " TEXT" + ")";
db.execSQL(CONDITIONALLY_CREATE_VENDORS_TABLE);
// add more tables as needed following the pattern above
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//db.execSQL("DROP TABLE IF EXISTS " + TABLE_VENDORS); <= Only need to DROP if the table's structure changes; so comment such a line out for the particular table in that case
onCreate(db);
}
注: 新しいテーブルを追加するときはいつでも、 onUpgrade()/onCreate() が呼び出されるように、DATABASE_VERSION 値を「上げる」(インクリメントする) 必要があります。