android技巧(四)数据库跨版本升级写法
当项目中接手的需求需要在就前数据库数据表做出修改时,不得不面对数据库表结构的更新问题。一般的sqlite数据库更新修改数据库版本号时都会自动调用SqliteOptenHelper及其子类中的onUpgrade()方法,所以只需要在onUpgrade()方法中添加相应的表结构修改的sql语句即可。
然而,在实际项目中会存在多个版本的数据库升级的问题。比如当前最新版本的数据库版本为v3,而用户手中的应用版本却不尽相同,user1的数据库版本为v1,user2的数据库版本为v3,并且从v1到v2是有表结构更改操作的例如添加了表table1_2,v3在v2的基础上修改了表table1_2,此时如果让user1应用直接执行到v3的修改表table1_2操作是会出错的,因为数据库版本为v1的应用因为还没有将数据库版本升级为v2,故根本不存在table1_2,所以直接执行修改表语句必然会报错。
以下写法便很好的解决了以上的数据库跨版本升级问题:
public class DBHelper extends SQLiteOpenHelper {
private static String name="data.db";
private static int version=1;
public DBHelper(Context context) {
super(context, name, null, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table user( _id integer primary key autoincrement, " +
"name text , desc text);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch(oldVersion){
case 1:
db.execSQL("v1版本时数据库升级操作"); //旧版本的数据库神级操作的case语句后都没有break语句,
//这样便可以确保每一次升级当前版本到最新版本的更新操作都可以被执行到了
case 2:
db.execSQL("v1——v2版本数据库升级操作");
case 3:
db.execSQL("v2——v3版本数据库升级操作");
//v3版本为当前最新数据库版本
break;
}
}
}
android技巧(四)数据库跨版本升级写法的更多相关文章
- 如何使用SQL SERVER数据库跨库查询
SQL Server中内置了数据库跨库查询功能,下面简要介绍一下SQL Server跨库查询.首先打开数据源码:OPENDATASOURCE不使用链接的服务器名,而提供特殊的连接信息,并将其作为四部分 ...
- Android高性能ORM数据库DBFlow入门
DBFlow,综合了 ActiveAndroid, Schematic, Ollie,Sprinkles 等库的优点.同时不是基于反射,所以性能也是非常高,效率紧跟greenDAO其后.基于注解,使用 ...
- android中的数据库操作(转)
android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库 an ...
- 【转】Android开发之数据库SQL
android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库 android中采用的数据库是SQLi ...
- android中的数据库操作(SQLite)
android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库 an ...
- android 一个SQLite数据库多个数据表的基本使用框架 (带demo)
android 一个SQLite数据库多个数据表(带demo) 前言 demo演示 一.搭建 二.建立实体类 三.建立数据库操作类 ...
- Android 数据库管理— — —创建数据库
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...
- Qt for Android 打包 SQLite 数据库
Qt for Android 调用 SQLite 数据库时, 怎样将已经存在的数据库附加到 APK 中? 直接在你项目里面的Android源码的根目录下新建一个文件夹assets, 数据库就可以放里面 ...
- android SQLite(安卓数据库的插入显示删除)
1.利用android自带数据库实现增加.删除.显示用户等操作 只是一个基本模型,为即将的与 复利计算apk整合做牺牲. 就不上传百度云供大家下载了 等整合了复利计算再上传. 数据的插入和显示: ...
随机推荐
- Burning Bridges-ZOJ1588(割边求解)
Burning Bridges Time Limit: 5 Seconds Memory Limit: 32768 KB Ferry Kingdom is a nice little country ...
- # TypeScript 中如何确保 this 的正确性
问题 在 TS 里面 this 关键字一开始让我这个写 C# 的十分惊讶,比如下面的一段代码,注意 initBinding 方法 class Company { id:number; /** * 在点 ...
- java初学知识点
public class EnumTest { public static void main(String[] args) { Size s=Size.SMALL; Size t=Size.LARG ...
- python走起之第二话
Python基础 一.整数(int) 如: 18.73.84 整数类的功能方法及举例: 带__的方法代表有多种表达方式 1.__abs__ <==> abs() 求整数的绝对值:(-11) ...
- 左边图标右边文字,在div里居中
- 使用 Jasmine 进行测试驱动的 JavaScript 开发
Jasmine 为 JavaScript 提供了 TDD (测试驱动开发)的框架,对于前端软件开发提供了良好的质量保证,这里对 Jasmine 的配置和使用做一个说明. 目前,Jasmine 的最新版 ...
- PHP保留两位小数的几种方法
$num = 10.4567; //第一种:利用round()对浮点数进行四舍五入 echo round($num,2); //10.46 //第二种:利用sprintf格式化字符串 $format_ ...
- windows递归拷贝(或删除等操作)文件
SHFileOperation 以拷贝为例. CString strFrom = ....._T("src");CString strTo = ....._T("dest ...
- t检验
例子:以往通过大规模调查已知某地新生儿出生体重为3.30kg.从该地难产儿中随机抽取35名新生儿作为研究样本,平均出生体重为3.42kg,标准差为0.40kg. 问该地难产儿出生体重是否与一般新生儿体 ...
- mysqlbinlog flashback 5.6完全使用手册与原理
版本更新 2016/3/7 首次发布 2016/3/9 修复update无效问题 2016/4/8 修复带有秒级别以下的日期数据bug 下载地址 http://pan.baid ...