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();
Android 版本升级涉及到的数据库数据迁移问题的更多相关文章
- mysql 数据库数据迁移 The user specified as a definer ('root'@'%') does not exist 解决方法
从一个数据库数据迁移到本地localhost 程序在调用到数据库的视图时报错,直接在数据库中打开视图时也报错,类似: mysql 1449 : The user specified as a defi ...
- 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<ChangeData.Models.old.adsinfo> adsinfo_new = new List<Mo ...
- redis 练习 a的数据库数据迁移到b数据库
思路 1.从a redis中获取所有的key 2.判断key的类型 3.根据key的类型,判断使用的是set/hset类型 4.set到b redis中(写入到b redis中)
随机推荐
- 20165324 Java实验三 敏捷开发与XP实验
20165324 Java实验三 敏捷开发与XP实验 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:何春江 学号:20165324 指导教师:娄嘉鹏 实验日期:2018年4月16日 ...
- 1.MySQL必知必会之数据库基础
下面这几个是几个关于数据库的关键字的概念,为后面的教程做基础的: 数据库:保存有组织的数据的容器(通常是一个文件或一组文件). 表: 某种特定类型数据的结构化清单. 模式:关于数据库和表的布局 ...
- centos6.8安装zabbix
前后用了两台电脑来实验,前后画风不一样,请忽略 一.安装php环境 移除目前系统安装的 PHP 组件 yum remove php* -y 安装 PHP 的 YUM 源 rpm -Uvh http: ...
- idea的junit测试出现Class not found: "com.chinaums.szm.test.RouteTransProxyClientTest" Empty test suite.
- 自从教学弟学会了Python,他每天都爬一些好不正经的图片!
学弟他作为一个宅男,闲着没事就喜欢用我教他的Python来爬一些 “资源” 套图欣赏,我每次都骂他你总是这样找个女朋友不好点,他不以为然,依旧如故.气的我只好把他写的东西发出来让更多的人来谴责他! 我 ...
- httpfs的使用
在项目中使用到hdfs作为存储,为了在不同的节点加载hdfs上的数据,我们使用nfsv3服务,在客户端使用 root来mount hdfs上的数据到本地,然后把本地的数据发到hdfs上,因为这个我们的 ...
- 简单说说spring的事务机制,以及是如何管理的?
事务管理可以帮助我们保证数据的一致性,对应企业的实际应用很重要. Spring的事务机制包括声明式事务和编程式事务. 编程式事务管理:Spring推荐使用TransactionTemplate,实际开 ...
- EF Core 2.0中怎么用DB First通过数据库来生成实体
要在EF Core使用DB First首先要下载三个Nuget包,在Nuget的Package Manager Console窗口中依次敲入下面三个命令即可: Microsoft.EntityFram ...
- sqoop命令,mysql导入到hdfs、hbase、hive
1.测试MySQL连接 bin/sqoop list-databases --connect jdbc:mysql://192.168.1.187:3306/trade_dev --username ...
- 如何用纯 CSS 创作一个跳 8 字型舞的 loader
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/gKNMMm 可交互视频 此视频是可 ...