三分钟搞定Android数据库升级

比如旧表名称叫:account,重命名表名称叫:account_temp

步骤如下:

1:rename旧表名称把account改成account_temp

2:创建新表,表名称和原表名称一致也叫account或者其他名字account_v1

3:复制旧表account_temp(改名字后的表)数据到新表account_v1 中

4:Drop掉旧表


更新数据库前提是数据库版本要大于当前版本,在初始化Application的onCreate中执行:

myDatabaseHelper = new MyDatabaseHelper(DownLoadActivity.this,"user.db",null,2);

参数1是上下文context,

参数2是数据库名称,

参数3是一个用于返回Cursor的工厂,该参数为NULL, 表示使用默认的工厂

参数4是数据库版本,


如果大于当前数据库版本号,会自动执行

SQLiteOpenHelper子类中的onUpgrade方法,我们可以把以上4步直接写在这个方法中:

备注:account 是原表名称 ,account_temp是重命名后表名称

//1:重命名表名称String renameTable = "alter table account rename to account_temp";//2:创建新表String newTable = "create table account_v1 ("        +"id integer primary key autoincrement,"        +"name text,"        +"account text,age integer)";//3:复制旧表数据到新表String copyTable = "insert into account_v1(id, name,account) select id,name,account from account_temp";//4:删除旧表String dropTable = "drop table account_temp";
@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        if(newVersion > oldVersion){            //升级数据库前备份数据            db.execSQL(renameTable);            db.execSQL(newTable);            db.execSQL(copyTable);            db.execSQL(dropTable);        }}

数据库版本开始是1,查看数据库数据:

 

查看工具是在线查看,直接在app.build中配置,同步下:

dependencies {    debugCompile 'com.amitshekhar.android:debug-db:1.0.0'}

访问地址看logcat:

这个里面很方便看到数据库数据变化结果

刚才是初始化的时候数据库数据,我们看到里面只有account表,里面一条数据,这个时候我们比如说下个版本要升级数据库,修改account里面的字段,新增age字段,我们需要怎么做呢?


myDatabaseHelper = new MyDatabaseHelper(DownLoadActivity.this,"user.db",null,2);

我们把最后一个参数改成2,这个时候运行后APP会自动执行onupgrade方法,并执行里面的4个步骤,

执行完后截图如下:

我们发现原来的account不见了,并且生产了个account_v1,但是里面数据都在还多了一个age字段,这就保证我们升级数据库的时候,数据不会丢失,并且还可以根据业务需求修改字段。

更多相关文章

  1. Android图灵机器人的实现(一)
  2. Android数据持久化之文件存储
  3. Android--GreenDao
  4. android 识别U盘以及读写文件的方法
  5. Android四大组之ContentProvider
  6. 更快实现Android多级树形选择列表
  7. Android上传图片的方式
  8. Android最新组件RecyclerView,替代ListView
  9. Android(安卓)学习笔记之数据存储SharePreferenced+File

随机推荐

  1. Android和IOS开发资料
  2. Android(安卓)内核源代码交叉编译纺
  3. android的零星基础点(多媒体)之一
  4. android sd卡数据库读取
  5. 给动态生成的View添加水波纹效果
  6. 禁止Activity+ EditText 界面默认弹出键
  7. 部分可点击的TextVie
  8. android dialog home键
  9. 64位 Ubuntu android studio 编译android
  10. Android(安卓)开发之官方文档ActionBar学