• Android 版本升级涉及到的数据库数据迁移问题


    最近做老版本向新版本升级,新版本增加了几张表,有的表经过了增加字段。那么如何把老的数据迁移到新的版本里呢?


    我写了一段伪代码,是关于我们项目里的 用户登录信息 Users表,    历史表history(用户浏览过的帖子论坛,收藏过的帖子论坛)


    我里面还涉及到接口的调用。

    另外说明一点,这段代码是无法在 onUpdateGrade()里面调用的,具体什么原因我也不清楚。另外表的结构发生改变,事务也不好使了。

    #是注释部分,事务最终被注释掉了


    User  user = null;
    if(登录){
         
       try{
         #请求获取好友资料接口
         User  user = helper.getUserInfo(xxx);
         
       
          #设置 DataCache.isLogin = true;
          #设置 DataCache.user   调用updateUserInfo();



        }catch{
           #设置sp里 DB_MOVE_133_TO_201 = false ;
           DataCache.isLogin = false;
        }

      }else{
         DataCache.isLogin = false;
         user = null;

      }

    #整个操作在事务中完成
    SQLiteDatabase db = ....;
    #db.beginTransaction();//开始事务

    #迁移Users
     

       #1. 将Users表改为临时表temp_Users
     
            ALTER TABLE Users RENAME TO Users_temp;

       #2. 创建新表

         create table Users (  _id  INTEGER PRIMARY KEY AUTOINCREMENT,
                     userName varchar(50) not null,
                     loginName varchar(50) not null,
                     weiWang varchar(50) not null,
                     iscarowner varchar(50) not null,
                     sex varchar(50) not null,
                     provinceid varchar(50) not null,
                     provincename varchar(50) not null,
                     cityid varchar(50) not null,
                     cityname varchar(50) not null,
                     score varchar(50) not null,
                     userid varchar(50) not null,
                     rigisttime varchar(50) not null,
                                     isAutoLogin int not null,
                     pwd int not null,
                     userPic varchar(50) not null,
                     memberId varchar(50) not null,
                     Key varchar(500) not null);

       
        #3. 导入数据  
        
         
         INSERT INTO Users SELECT _id,userName,loginName,'0','','','','','','','','','',isAutoLogin,pwd,'','',Key FROM Users_temp;

        #4. 删除临时表 
        
        DROP TABLE Users_temp


    #迁移history数据步骤

    #1. 将history表改为临时表temp_history
       
        ALTER TABLE history RENAME TO history_temp;

    #2. 创建新表
      create table history (_id  INTEGER PRIMARY KEY AUTOINCREMENT,
                                             userid varchar(50) not null default '0',  
                         datasource varchar(12) not null default '0',  
                         handleaction varchar(12) not null default '0',  
                         historyId varchar(12) not null,
                         title varchar(50) not null,
                         bbsId varchar(12) not null,
                         bbsType varchar(12) not null,
                         typeid varchar(12) not null,
                         viewtime varchar(50) not null);

    #3. 导入数据  
        
         INSERT INTO history SELECT _id,'0','0','0',historyId,title,bbsId,bbsType,typeid,viewtime FROM history_temp;


    #4. 若是登录用户,则更新userid字段

        UPDATE history set userid=?;

        例如:  UPDATE history set userid=587766;

    #5. 删除临时表 
        
        DROP TABLE history_temp
        
     
       #db.setTransactionSuccessful();//调用此方法会在执行到endTransaction() 时提交当前事务,如果不调用此方法会回滚事务
       
       #设置sp里 DB_MOVE_133_TO_201 = true ;
     
     } finally {
           #db.endTransaction();//由事务的标志决定是提交事务,还是回滚事务
      }
        db.close();    

  • 相关阅读:
    初始JSON
    JS异步加载的三种方式
    JS之事件
    关于null == 0?返回false的问题
    JS之类型转换
    金融(一)
    使用var声明的变量 和 直接赋值并未声明的变量的区别
    POJ2594 Treasure Exploration
    POJ1422 Air Raid
    Codevs1922 骑士共存问题
  • 原文地址:https://www.cnblogs.com/wicrecend/p/5288623.html
Copyright © 2020-2023  润新知