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();    

  • 相关阅读:
    ToolbarLayout的使用
    设置NavigationView子布局Menu图片的颜色
    设置RecyclerView显示滚动条(这里演示垂直的滚动条,水平的道理一样)
    在使用ToolBar + AppBarLayout,实现上划隐藏Toolbar功能,遇到了一个坑。
    Android中设置Imageview的图片充满整个布局
    Android透明状态栏设置
    关于NavigationView中item的字体颜色和icon选中状态颜色
    dp、sp 、 px之间的相互转化的工具类
    今天使用JNI时,出现了一个错误:java.lang.UnsatisfiedLinkError : dlopen failed: library //dlopen打开失败
    kubernetes的几个概念
  • 原文地址:https://www.cnblogs.com/wicrecend/p/5288623.html
Copyright © 2011-2022 走看看