zoukankan      html  css  js  c++  java
  • Android-SQLite版本问题

    1. 用户 重来没有使用过该软件 不存在数据库,我们

      1). 自动调用 void onCreate(SQLiteDatabase db) 方法 创建数据库

      2).创建 表 ,

      3).给表插入初始化数据,或者 从云端 下载数据

     1 @Override
     2     public void onCreate(SQLiteDatabase db) {
     3         // 1.调用该方法 ,自动创建数据库
     4         Log.i("TAG", "数据库不存在,正在创建新的数据库") ;
     5         
     6         // 2.创建 相对应的表
     7         String sql = "create table tb_test( _id integer primary key autoincrement, name varchar(50) ,intime date)" ;
     8         db.execSQL(sql) ;
     9         Log.i("TAG", "创建表成功") ;
    10         
    11         // 3.插入初始数据,或者从云端 下载数据
    12         String insertSQL = "insert into tb_test(name,intime) values('Jack','2013-11-23')" ;
    13         db.execSQL(insertSQL) ;
    14         insertSQL = "insert into tb_test(name,intime) values('Toms','2014-09-13')" ;
    15         db.execSQL(insertSQL) ;
    16         Log.i("TAG", "表插入初始化数据") ;
    17     }

    2.用户使用过该软件 ,版本升级后SQLite如何升级

       1).判断 以前 数据库的版本

       2).升级 表结构

      

     1 @Override
     2     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
     3         // 1.判断 数据库的版本
     4         if(oldVersion == 2){
     5             String sql = "alter table tb_test add column isdel int default 0" ;
     6             db.execSQL(sql) ;
     7             Log.i("TAG", "数据库 版本升级, 2.0 --> 3.0") ;
     8         }else if(oldVersion ==1){
     9             String sql = "alter table tb_test add column isdel int default 0" ;
    10             db.execSQL(sql) ;
    11             Log.i("TAG", "数据库 版本升级, 1.0 --> 3.0") ;
    12         }
    13     }

    3.用户使用最新版本软件后,新版本 不好用,又重新装回 旧版本 ,涉及 SQLite如何版本降级

      1).降级的设计关键点
        a、考虑云端要保存用户【自定义数据、行为习惯】。专业术语profile-->>提高用户黏度
        b、考虑[当前]的最低版本要求-->>降低维护成本
        c、尽可能本地的数据转移(所有新版本,都不删除字段)-->尽可能把未知变已知

      2). 如何降级

        1.判断版本

        2. 是否可以降级,降级中出错 如何处理

        /**
         * 该方法是在数据库版本 比以前 版本低的时候调用,就是说你的软件使用的新版本的突然觉得新版本不好用,
         * 安装 旧版本的软件
         * SQLiteDatabase :
         * oldVersion: 原来的版本
         * newVersion: 新的版本
         * */
        @Override
        public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            try {
                //1.修改原来表名
                String rname_sql = "alter table tb_test rename to tb_test_backup" ;
                db.execSQL(rname_sql) ;
                Log.i("TAG", "修改表名成功") ;
                
                //2.建立本版本的的表结构
                String current_sql = "create table tb_test( _id integer primary key autoincrement, name varchar(50) ,intime date)" ;
                db.execSQL(current_sql) ;
                Log.i("TAG", "建立当前版本的表结构成功") ;
                if(true){
                    throw new RuntimeException("出错了") ;
                }
                // 3.数据迁移
                String copy_sql = "insert into tb_test select _id,name,intime from tb_test_backup" ;
                db.execSQL(copy_sql) ;
                Log.i("TAG", "旧表 数据 已经迁移 至 新表") ;
                
                // 4.删除 tb_test_backup 表
                String deltab_sql = "drop table tb_test_backup" ;
                db.execSQL(deltab_sql) ;
                Log.i("TAG", "旧表 成功") ;
            } catch (Exception e) {        // 如果在降级过程中出现错误
                // 1.删除旧表
                String droptab_sql = "drop table tb_test" ;
                db.execSQL(droptab_sql) ;
                Log.i("TAG", "删除表") ;
                
                // 2.重新构建新表
                String cretab_sql = "create table tb_test( _id integer primary key autoincrement, name varchar(50) ,intime date)" ;
                db.execSQL(cretab_sql) ;
                Log.i("TAG", "创建当前版本的表") ;
                
                // 3.插入初始化数据
                String insert_sql = "insert into tb_test(name,intime) values('Jack','2013-11-23')" ;
                db.execSQL(insert_sql) ;
                insert_sql = "insert into tb_test(name,intime) values('Toms','2015-01-13')" ;
                db.execSQL(insert_sql) ;
                Log.i("TAG", "插入初始化数据成功") ;
            }
        }        

      

  • 相关阅读:
    python 笔记——生成器和迭代器
    Python装饰器
    python 小程序—三级菜单—循环和字典练习
    python 小程序—循环和列表训练
    lvs主备可以自由切换,vip落在主上的时候,端口无法telnet,业务连接不了
    mongodb学习
    lvs DR模式
    去哪儿网mysql语法审核工具Inception正式开源
    无法远程连接ubuntu下的mysql
    值得珍藏的28本股市投资经典著作
  • 原文地址:https://www.cnblogs.com/ChangFen/p/6118089.html
Copyright © 2011-2022 走看看