zoukankan      html  css  js  c++  java
  • Android版本更新之本地数据库更新

    最近上架了一个算法学习类APP,在更新应用版本时,发现数据库依旧没有更新,还是上一个版本的数据内容,遂把这方面的内容记录下来。

    PS:本人处女作APP 《算法之家》 可以在豌豆荚、360手机助手、腾讯应用宝中下载安装~

    如下是父类的构造函数,所有的数据库都是继承这个父类的。

     1 public MyOpenHelper(Context context, String name, CursorFactory factory,
     2             int version) {    
     3         super(context, name, factory, version);
     4         // TODO Auto-generated constructor stub
     5     }
     6     
     7     //笔记
     8     public MyOpenHelper(Context context, String name) {
     9         super(context, name,null,VERSION);
    10         // TODO Auto-generated constructor stub
    11     }
    12     
    13     public MyOpenHelper(Context context) {
    14         super(context, null,null,mVERSION);
    15         // TODO Auto-generated constructor stub
    16     }
    17     
    18     public MyOpenHelper(Context context, String name,int version) {
    19         super(context, name, null, version);
    20         // TODO Auto-generated constructor stub
    21     }
    22 
    23     @Override
    24     public void onCreate(SQLiteDatabase db) {
    25         // TODO Auto-generated method stub
    26         
    27     }
    28 
    29     @Override
    30     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    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 @Override
     2     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
     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 void Version2(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     }    

    如此,差不多了。

  • 相关阅读:
    10106 Product
    枚举值不占对象空间
    编译器会强制没有数据成员的对象长度非零
    对象切片与虚函数机制
    私有继承成员的公有化
    2013年开发者需要了解的开发趋势和技能
    redis 入门笔记
    Tomcat的异步通讯配置使用NIO
    如何成为“10倍效率的开发者”
    如何安装Node.js
  • 原文地址:https://www.cnblogs.com/pngcui/p/4850861.html
Copyright © 2011-2022 走看看