public class ProjectConstants {
public static final String myDbName = "ContactsDatabase.db";
public static final String myTableName = "ContactDetails";
// public static final String myTableName = "ContactDetails1";
public static final String nameColumn = "ContactName";
public static final String numberColumn = "ContactNumber";
}
首先,我使用表名创建联系人应用程序: ContactDetails 然后,我对该数据库表执行所有添加,编辑和删除操作。假设我在该数据库表中有15个名为 ContactDetails 的联系人详细信息。
现在在上面的代码片段中,我进行了2次更改: 我评论这一行
//public static final String myTableName = "ContactDetails";
我取消注释这一行
public static final String myTableName = "ContactDetails1";
现在,如果我运行代码,应用程序崩溃。
我从Stack Overflow中学到的东西粗略地教会了我两件事要思考
1
请记得卸载并重新安装您的应用,以便onCreate 再次调用method并重新创建数据库。
2
如果是第一次创建数据库,则onCreate方法是 在helper类中调用,否则调用onUpgrade。
我扩展SQLiteOpenHelper类的子类看起来像这样,
public class DBHelper extends SQLiteOpenHelper {
private static final String TEXT_TYPE = " TEXT";
private static final String COMMA_SEP = ",";
private static final String SQLCreateEntries =
"CREATE TABLE " + ProjectConstants.myTableName + " (" +
ProjectConstants.nameColumn + TEXT_TYPE + COMMA_SEP +
ProjectConstants.numberColumn + TEXT_TYPE + " )";
private static final String SQLDeleteEntries = "DROP TABLE IF EXISTS " + ProjectConstants.myTableName;
public DBHelper(Context context) {
super(context, String.valueOf(name), null, version);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(SQLCreateEntries);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
sqLiteDatabase.execSQL(SQLDeleteEntries);
onCreate(sqLiteDatabase);
}
现在,如果我每次弄乱数据库时卸载并重新安装应用程序,都会按照第一个引用块中的说明进行操作,那么应用程序永远不会崩溃。 但是,如果我恢复到原始数据库(然后我执行此卸载并重新安装应用程序),显然我的数据库中的数据不再存在。
如上所述,名为“ContactDetails”的数据库表拥有15个联系人,现在不再拥有该数据。
但我希望15个联系人在我的数据库表格中保持完整“ContactDetails”。
无论如何都要对数据库进行更改而不必卸载重新安装apk而不丢失以前的数据?
答案 0 :(得分:1)
您已在Helper类的OnUpgrade()上编写SQL命令并使用不同版本的代码执行SQL命令块,如下所示:
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
sqLiteDatabase.execSQL(SQLDeleteEntries);
onCreate(sqLiteDatabase);
switch(i){
case 1:
<commands for version 1>
break;
case 2:
<commands for version 2>
break;
}
您可以根据应用程序版本编写swich案例。您可以编写不同的SQL命令块,以便在不同版本的应用程序上执行。