android 数据库版本升级失败,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();

SQL SERVER 2000/2005/2008数据库数据迁移到Oracle 10G细述

最近参与的一个系统涉及到把SQL Server 2k的数据迁移到Oracle 10G这一非功能需求.特将涉及到相关步骤列举如下供大家参考: 环境及现有资源: 1.OS: Windows 7 Enter ...

oracle 数据库数据迁移解决方案

大部分系统由于平台和版本的原因,做的是逻辑迁移,少部分做的是物理迁移,接下来把心得与大家分享一下   去年年底做了不少系统的数据迁移,大部分系统由于平台和版本的原因,做的是逻辑迁移,少部分做的是物理迁 ...

MySQL数据库数据迁移到SQLserver

近期因工作须要.须要将mysql数据库迁移到sqlserver.不过数据迁移.因此相对照较简单.对于mysql迁移到sqlserver,我们须要使用到mysql odbc驱动,然后透过sqlserve ...

Android 一键直接查看Sqlite数据库数据

转自:http://www.cnblogs.com/trinea/archive/2012/11/16/2773656.html 本文主要介绍Android开发中如何一键直接查看sqlite数据库中的 ...

数据库数据迁移 SqlServer复制到mysql

经过一番搜索,有朋友推荐用datax的,后来发现比较麻烦,需要循环每个表去复制:有推荐用Navicat的,但是方式有点行不通,会报文件打不开:无法打开Provider=SQLNCLI10.1;Pers ...

MySQL数据库数据迁移:从一个服务器到另一个服务器

需要两个服务器数据库版本相同才可迁移 1:单个或多个数据库 mysqldump -h远程ip -u用户 -p密码 -P3306 -- -uroot -p -P3306 执行后输入本地数据库密码即可 : ...

vs实现数据库数据迁移

public ActionResult About() { List adsinfo_new = new List

redis 练习 a的数据库数据迁移到b数据库

思路 1.从a redis中获取所有的key 2.判断key的类型 3.根据key的类型,判断使用的是set/hset类型 4.set到b redis中(写入到b redis中)

随机推荐

滴滴快车,安全把你带到凡科安全知识h5大赛

滴滴出行提出"安全第一.体验第二.效率第三"的可持续发展宗旨.近期,滴滴出行还推广了"安全带"宣传,包括明星夫妻CP安全带姿势和明星后排安全带语音播报等,来提升 ...

Leetcode-189 Rotate Array

#189.    Rotate Array Rotate an array of n elements to the right by k steps. For example, with n = 7 ...

使用goldengate交付指定时间前的数据

在数据同步过程中,客户担心在源端误操作,比如truncate, drop, delete all等,在目标端也会立即同步,而无法挽救损失:因此,客户希望是目标端的数据比源端要慢一个时间点. 解决方案: ...

Jquery LigerUI框架学习(二)之Tree于Tab标签实现iframe功能

LigerUI框架Tree于Tab标签动态使用,当点击Tree后动态创建Tab标签,和通常用的iframe框架功能类似 Tree中的关键代码 //Tree初始化 $("#tree1&quot ...

【转载】C#后台声明式验证,远离if验证

ViewModel public class ViewModel { [Required(ErrorMessage="标题不能为空")] public string Title { ...

Codeforces Round #280 (Div. 2)E Vanya and Field(简单题)

转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud 本场题目都比较简单,故只写了E题. E. Vanya and Field Vany ...

【Python】Python的urllib模、urllib2模块的网络下载文件

因为需要从一些下载一个页PDF文件.但是需要下载PDF有数百个文件,这是不可能用人工点击下载.只是Python有相关模块,所以写一个程序PDF文件下载,顺便熟悉Python的urllib模块和ulrl ...

osg蝴蝶纹理

#include #include #include #in ...

C#调用WebService的简单方式

WebServiceCallpublic class WebServiceCall { public void Call() { string url = "http://localhost ...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值