Android 版本升級涉及到的數據庫數據遷移問題

最近作老版本向新版本升級,新版本增長了幾張表,有的表通過了增長字段。那麼如何把老的數據遷移到新的版本里呢?接口


我寫了一段僞代碼,是關於咱們項目裏的 用戶登陸信息 Users表,    歷史表history(用戶瀏覽過的帖子論壇,收藏過的帖子論壇)事務


我裏面還涉及到接口的調用。ci

另外說明一點,這段代碼是沒法在 onUpdateGrade()裏面調用的,具體什麼緣由我也不清楚。另外表的結構發生改變,事務也很差使了。get

#是註釋部分,事務最終被註釋掉了
it


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

相關文章
相關標籤/搜索