最近上架了一个算法学习类APP,在更新应用版本时,发现数据库依旧没有更新,还是上一个版本的数据内容,遂把这方面的内容记录下来。
PS:本人处女作APP 《算法之家》 可以在豌豆荚、360手机助手、腾讯应用宝中下载安装~
如下是父类的构造函数,所有的数据库都是继承这个父类的。
1 publicMyOpenHelper(Context context, String name, CursorFactory factory,2 intversion) {3 super(context, name, factory, version);4 //TODO Auto-generated constructor stub
5 }6
7 //笔记
8 publicMyOpenHelper(Context context, String name) {9 super(context, name,null,VERSION);10 //TODO Auto-generated constructor stub
11 }12
13 publicMyOpenHelper(Context context) {14 super(context, null,null,mVERSION);15 //TODO Auto-generated constructor stub
16 }17
18 public MyOpenHelper(Context context, String name,intversion) {19 super(context, name, null, version);20 //TODO Auto-generated constructor stub
21 }22
23 @Override24 public voidonCreate(SQLiteDatabase db) {25 //TODO Auto-generated method stub
26
27 }28
29 @Override30 public void onUpgrade(SQLiteDatabase db, int oldVersion, intnewVersion) {31 //TODO Auto-generated method stub
32
33 }
1、当我们使用new MyOpenHelper(context)去构造的时候,会经常性的执行子类中public void onCreate(SQLiteDatabase db)这个方法,因此这样可以不用更新,但是使用这样的方式去构造的数据库,用户不能update,不能insert,只能在构造的时候insert。。
2、当我们使用new MyOpenHelper(context,name)去构造的时候,只会执行一次子类中的onCreate方法,也就是说如果我们在以后升级应用时,想要更新此数据库中的内容,需要另寻他法,所以数据库的版本的重要性就体现出来了,也就是super(context, name,null,VERSION);的VERSION关键字,当系统发现该数据库版本比原应用的数据库版本高,则会自动调用onUpgrade方法,所以有了如下代码。
1 @Override2 public void onUpgrade(SQLiteDatabase db, int oldVersion, intnewVersion) {3 //TODO Auto-generated method stub
4
5 switch(oldVersion){6 case 1:7 Version2(db);8 break;9 case 2:10 Version3(db);11 break;12 case 3:13 break;14 case 4:15 break;16 default:17 System.out.println("default");18 break;19
20 }
比如原数据库版本为1,此时就会执行case 1:的指令。
在修改数据库中需要添加这样几行代码
1 private voidVersion2(SQLiteDatabase db) {2 //TODO Auto-generated method stub
3
4 db.beginTransaction();5
6 //改名数据库表
7 db.execSQL("alter table TABLE1 rename to TABLE2");8
9 //新建表单
10 db.execSQL("create table TABLE1(XX,XX)");11
12 //插入原有的数据
13 db.execSQL("insert into TABLE select * from TABLE2");14 //如果增加了列属性,则使用双引号”” 来补充原来不存在的数据15
16 //删除临时表单
17 db.execSQL("drop table TABLE2");18
19 db.setTransactionSuccessful();20 db.endTransaction();21
22 }
如此,差不多了。
原文:http://www.cnblogs.com/pngcui/p/4850861.html