升级现有Android数据库而不丢失现有数据的步骤
我已经试了两天了,看了上面所有不同的帖子 我也关注这个帖子 但当我在手机上安装新版本时,它似乎会清除我的旧数据 请找个人来好吗 这是我的数据库代码升级现有Android数据库而不丢失现有数据的步骤,android,sqlite,Android,Sqlite,我已经试了两天了,看了上面所有不同的帖子 我也关注这个帖子 但当我在手机上安装新版本时,它似乎会清除我的旧数据 请找个人来好吗 这是我的数据库代码 private static final int DATABASE_VERSION = 2; //was 1 before public void create() throws IOException{ boolean dbExist = checkDataBase(); if(dbExist){ //do no
private static final int DATABASE_VERSION = 2; //was 1 before
public void create() throws IOException{
boolean dbExist = checkDataBase();
if(dbExist){
//do nothing - database already exist
this.getWritableDatabase();
}else{
//By calling this method and empty database will be created into the default system path
//of your application so we are gonna be able to overwrite that database with our database.
try {
this.getReadableDatabase();
copyDataBase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if(newVersion == 2) {
db.execSQL("ALTER TABLE CHANNELPROFILE ADD COLUMN backcolor TEXT");
}
}
我真的不知道我做错了什么。请帮助尝试以下操作:
String TABLE_NAME= "train_day";
String column1= "column1";
String column2= "column2";
String column3= "column3";
String TABLE_BODY = TABLE_NAME + " ("
+ column1 + " INTEGER PRIMARY KEY AUTOINCREMENT,"
+ column2 + " TEXT NOT NULL,"
+ column3 + " TEXT NOT NULL)";
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
replaceDataToNewTable(db, TABLE_NAME, TABLE_BODY);
}
private void replaceDataToNewTable(SQLiteDatabase db, String tableName, String tableString){
db.execSQL("CREATE TABLE IF NOT EXISTS " + tableString);
List<String> columns = getColumns(db, tableName);
db.execSQL("ALTER TABLE " + tableName + " RENAME TO temp_" + tableName);
db.execSQL("CREATE TABLE " + tableString);
columns.retainAll(getColumns(db, tableName));
String cols = join(columns, ",");
db.execSQL(String.format("INSERT INTO %s (%s) SELECT %s from temp_%s",
tableName, cols, cols, tableName));
db.execSQL("DROP TABLE temp_" + tableName);
}
private List<String> getColumns(SQLiteDatabase db, String tableName) {
List<String> ar = null;
Cursor c = null;
try {
c = db.rawQuery("select * from " + tableName + " limit 1", null);
if (c != null) {
ar = new ArrayList<String>(Arrays.asList(c.getColumnNames()));
}
} catch (Exception e) {
LOGE(tableName, e.getMessage() + e);
e.printStackTrace();
} finally {
if (c != null)
c.close();
}
return ar;
}
private String join(List<String> list, String divider) {
StringBuilder buf = new StringBuilder();
int num = list.size();
for (int i = 0; i < num; i++) {
if (i != 0)
buf.append(divider);
buf.append(list.get(i));
}
return buf.toString();
}
那么,调用create方法是什么呢?另外,显示checkDataBaseRemove ifnewVersion==2{check的代码,并简单地增加DATABASE_VERSION常量的值。尝试过的方法仍然不起作用。不确定我做错了什么