zoukankan      html  css  js  c++  java
  • 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();    

  • 相关阅读:
    Error: unable to connect to node rabbit@mail: nodedown
    flash上传控件跨域
    Nginx配置指定媒体类型文件强制下载
    Nginx反向代理配置可跨域
    日志:using the Connector/J connection property 'autoReconnect=true' to avoid this problem
    web 安全(一)--web简介及 前端技术(js)
    Android 自动化之元素定位 xpath
    Wireshark入门
    自动化测试工具
    Android App 专项测试--压力测试篇(三)
  • 原文地址:https://www.cnblogs.com/wicrecend/p/5288623.html
Copyright © 2011-2022 走看看