Should There Be One Sqliteopenhelper For Each Table In The Database?
Solution 1:
You should have a single SQLiteOpenHelper class for all the tables. Check this link.
Solution 2:
Just for the sake of a different approach:
You can always overried on the onOpen(..)
method have it called your onCreate(..)
. Be sure to use the "CREATE TABLE IF NOT EXISTS..."
statement rather than "CREATE TABLE"
@OverridepublicvoidonOpen(SQLiteDatabase db) {
onCreate(db);
}
@OverridepublicvoidonCreate(SQLiteDatabase db) {
StringCREATE_FRIENDS_TABLE = "CREATE TABLE IF NOT EXISTS ...";
db.execSQL(CREATE_FRIENDS_TABLE);
}
You do that with every class that extends from SQLiteOpenHelper
Solution 3:
@TheReader is right. I prefer a single SQLiteOpenHelper for all tables, here is what i do: pass a List of "table creation" sqls to the Constructor of the SQLiteOpenHelper subClass, then in the onCreate function iterate the list to create each table. so my SQLiteOpenHelper subclass looks sth like this:
publicModelReaderDbHelper(Context context, List<String> createSQLs, List<String> deleteSQLs){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.TABLE_CREATION_SQLS = createSQLs;
this.TABLE_DELETE_SQLS = deleteSQLs;
}
@OverridepublicvoidonCreate(SQLiteDatabase sqLiteDatabase) {
for(String oneCreation : TABLE_CREATION_SQLS){
sqLiteDatabase.execSQL(oneCreation);
}
}
But that comes another problem: after adding a new table, and install the new version of the app with an existing old one installed, the new table won't be created, because the existence of the old database will prevent the onCreate function from being called. So user has to uninstall the app first, and install the app completely. The DATABASE_VERSION helps, it seem android will not execute the onCreate function if and only if the a existin database with the same name and the same DATABASE_VERSION
Post a Comment for "Should There Be One Sqliteopenhelper For Each Table In The Database?"