数据库的onCreate方法有几点要注意
● 在第一次打开数据库的时候才会走
● 在清除数据之后再次运行–>打开数据库,这个方法会走
● 没有清除数据,不会走这个方法
● 数据库升级的时候这个方法不会走
数据库的onUpgrade方法有几点注意事项
● 第一次创建数据库的时候,这个方法不会走
● 清除数据后再次运行(相当于第一次创建)这个方法不会走
● 数据库已经存在,而且版本升高的时候,这个方法才会调用
升级数据库
● 修改数据库后,一定要记得增加数据库版本号 +1 . 否则不会走onUpgrade方法.
● 对于不重要的表,如果没有必要保留数据,则可以选择直接删除表后在创建表。
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists Book");
onCreate(db);
}
● 升级数据库版本号要比老的版本大,但是跨版本升级时需要判断好中间版本号,依次升级,跳版本升级会导致缺少中间版本的字段。
● 删旧表迁移数据到新表
try
{
db.beginTransaction();
String tempTableName = tableName + "_temp";
String sql = "ALTER TABLE " + tableName +" RENAME TO " + tempTableName; // // 重命名旧表为tmep
db.execSQL(sql);
createHistoryDiagTable(db);// 创建新表新增了字段,名称原来旧表名 此时数据空
sql = "INSERT INTO " + tableName + " SELECT id,item1,item2,' ' FROM " + tempTableName;
db.execSQL(sql);// 将旧表数据复制到新表
sql = "DROP TABLE IF EXISTS " + tempTableName; // 删除旧表
db.execSQL(sql);
db.setTransactionSuccessful();
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
db.endTransaction();
}
如果正常添加字段,则使用 “Alter table 表名 add column 字段 类型”。
注意升级数据库版本后,要在创建表的方法中同步添加字段,不然第一次安装的,不会走升级方法,不会执行添加字段的SQL,所以升级数据库,两个地方要修改。