【发布时间】:2016-12-14 18:07:09
【问题描述】:
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 然后我对该数据库表执行所有添加、编辑和删除操作。假设我在名为 ContactDetails 的数据库表中有 15 个联系方式。
现在在上面的代码 sn-p 中我做了 2 处更改: 我评论了这一行
//public static final String myTableName = "ContactDetails";
我取消注释这一行
public static final String myTableName = "ContactDetails1";
现在如果我运行代码,应用就会崩溃。
我从 Stack Overflow 中学到的东西粗略地教会了我两件值得思考的事情
1.
记得卸载然后重新安装您的应用,以便 onCreate 再次调用方法并重新创建数据库。
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并且不会丢失以前的数据?
【问题讨论】: