Android 在单独的SQLiteOpenHelper类中的现有DB中创建新表
在我已经创建和部署的应用程序中,我使用扩展了Android 在单独的SQLiteOpenHelper类中的现有DB中创建新表,android,android-sqlite,Android,Android Sqlite,在我已经创建和部署的应用程序中,我使用扩展了SQLiteOpenHelper的单个类文件创建了一个数据库MainDB,即 public class BaseSQLiteOpenHelper extends SQLiteOpenHelper { private final static String DATABASE_NAME = "MainDB"; .... .... } 问题是我把这个类和一个特定的功能联系得太紧密了 现在,我在应用程序中添加了一个全新的模块,它也将
SQLiteOpenHelper
的单个类文件创建了一个数据库MainDB,即
public class BaseSQLiteOpenHelper extends SQLiteOpenHelper {
private final static String DATABASE_NAME = "MainDB";
....
....
}
问题是我把这个类和一个特定的功能联系得太紧密了
现在,我在应用程序中添加了一个全新的模块,它也将与DB交互,但会与不同的新表交互
问题是我不能使用同一个类,因为它在多个方面存在冲突。即使我重新设计了代码,也只会从功能/理解的角度增加复杂性
所以,我决定使用相同的DB,但不同的表
现在我已经在BaseSQLiteOpenHelper
类中创建了DB
那么,如何使用相同的数据库在seprate类中创建新表呢
一种方法是使用单独的数据库,或者
仅在BaseSQLiteOpenHelper
类中的onCreate()
中创建我的新表(问题是在同一类中提到新表似乎很尴尬,因为该类与我的新表无关)
请建议
谢谢首先检查此数据库的当前数据库版本
private final static String DATABASE_NAME = "MainDB";
private static final int DATABASE_VERSION = 1;
public BaseSQLiteOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
并增加数据库版本(database_version),在升级和oncreate方法中添加新的表查询,如下所示
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("old query no need to change");
db.execSQL("Create your new table here");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 2) {
db.execSQL("Create your new table here as well this for update the old DB");
}
}
@覆盖
public void onCreate(SQLiteDatabase db){
db.execSQL(“旧查询无需更改”);
execSQL(“在这里创建新表”);
}
@凌驾
public void onUpgrade(SQLiteDatabase db,int-oldVersion,int-newVersion){
如果(旧版本<2){
execSQL(“在这里创建新表并更新旧的数据库”);
}
}
完成