Android-SQLite版本问题
1. 用户 重来没有使用过该软件 不存在数据库,我们
1). 自动调用 void onCreate(SQLiteDatabase db) 方法 创建数据库
2).创建 表 ,
3).给表插入初始化数据,或者 从云端 下载数据
@Override
public void onCreate(SQLiteDatabase db) {
// 1.调用该方法 ,自动创建数据库
Log.i("TAG", "数据库不存在,正在创建新的数据库") ; // 2.创建 相对应的表
String sql = "create table tb_test( _id integer primary key autoincrement, name varchar(50) ,intime date)" ;
db.execSQL(sql) ;
Log.i("TAG", "创建表成功") ; // 3.插入初始数据,或者从云端 下载数据
String insertSQL = "insert into tb_test(name,intime) values('Jack','2013-11-23')" ;
db.execSQL(insertSQL) ;
insertSQL = "insert into tb_test(name,intime) values('Toms','2014-09-13')" ;
db.execSQL(insertSQL) ;
Log.i("TAG", "表插入初始化数据") ;
}
2.用户使用过该软件 ,版本升级后SQLite如何升级
1).判断 以前 数据库的版本
2).升级 表结构
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 1.判断 数据库的版本
if(oldVersion == 2){
String sql = "alter table tb_test add column isdel int default 0" ;
db.execSQL(sql) ;
Log.i("TAG", "数据库 版本升级, 2.0 --> 3.0") ;
}else if(oldVersion ==1){
String sql = "alter table tb_test add column isdel int default 0" ;
db.execSQL(sql) ;
Log.i("TAG", "数据库 版本升级, 1.0 --> 3.0") ;
}
}
3.用户使用最新版本软件后,新版本 不好用,又重新装回 旧版本 ,涉及 SQLite如何版本降级
1).降级的设计关键点
a、考虑云端要保存用户【自定义数据、行为习惯】。专业术语profile-->>提高用户黏度
b、考虑[当前]的最低版本要求-->>降低维护成本
c、尽可能本地的数据转移(所有新版本,都不删除字段)-->尽可能把未知变已知
2). 如何降级
1.判断版本
2. 是否可以降级,降级中出错 如何处理
/**
* 该方法是在数据库版本 比以前 版本低的时候调用,就是说你的软件使用的新版本的突然觉得新版本不好用,
* 安装 旧版本的软件
* SQLiteDatabase :
* oldVersion: 原来的版本
* newVersion: 新的版本
* */
@Override
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
try {
//1.修改原来表名
String rname_sql = "alter table tb_test rename to tb_test_backup" ;
db.execSQL(rname_sql) ;
Log.i("TAG", "修改表名成功") ; //2.建立本版本的的表结构
String current_sql = "create table tb_test( _id integer primary key autoincrement, name varchar(50) ,intime date)" ;
db.execSQL(current_sql) ;
Log.i("TAG", "建立当前版本的表结构成功") ;
if(true){
throw new RuntimeException("出错了") ;
}
// 3.数据迁移
String copy_sql = "insert into tb_test select _id,name,intime from tb_test_backup" ;
db.execSQL(copy_sql) ;
Log.i("TAG", "旧表 数据 已经迁移 至 新表") ; // 4.删除 tb_test_backup 表
String deltab_sql = "drop table tb_test_backup" ;
db.execSQL(deltab_sql) ;
Log.i("TAG", "旧表 成功") ;
} catch (Exception e) { // 如果在降级过程中出现错误
// 1.删除旧表
String droptab_sql = "drop table tb_test" ;
db.execSQL(droptab_sql) ;
Log.i("TAG", "删除表") ; // 2.重新构建新表
String cretab_sql = "create table tb_test( _id integer primary key autoincrement, name varchar(50) ,intime date)" ;
db.execSQL(cretab_sql) ;
Log.i("TAG", "创建当前版本的表") ; // 3.插入初始化数据
String insert_sql = "insert into tb_test(name,intime) values('Jack','2013-11-23')" ;
db.execSQL(insert_sql) ;
insert_sql = "insert into tb_test(name,intime) values('Toms','2015-01-13')" ;
db.execSQL(insert_sql) ;
Log.i("TAG", "插入初始化数据成功") ;
}
}
Android-SQLite版本问题的更多相关文章
- Android和SQLite版本对应关系
Android和SQLite版本对应关系 今天Xamarin群有人问到Android和SQLite版本如何对应,顺手查了一下,贴出来. SQLite 3.8.4.3: • 21-5.0-Lollipo ...
- 图解IntelliJ IDEA 13版本对Android SQLite数据库的支持
IntelliJ IDEA 13版本的重要构建之一是支持Android程序开发.当然对Android SQLite数据库的支持也就成为了Android开发者对IntelliJ IDEA 13版本的绝对 ...
- Android Sqlite 数据库版本更新
Android Sqlite 数据库版本更新 http://87426628.blog.163.com/blog/static/6069361820131069485844/ 1.自己写一个类继承 ...
- Android SQLite 数据库详细介绍
Android SQLite 数据库详细介绍 我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用 ...
- Android SQLite 数据库 增删改查操作
Android SQLite 数据库 增删改查操作 转载▼ 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NU ...
- Android SQLite总结[转载]
[转载] :http://blog.163.com/zqy216_2008/blog/static/4119371820119954812509/ 最近在做的项目涉及到了SQLite,大学时没有好好学 ...
- 再读Android sqlite
再读Android sqlite Android原生支持sqlite数据库操作,sqlite时轻量级关系型数据库,支持标准sql语句.Android对sqlite进行良好的接口封装来避免sql注入等安 ...
- 最新Android系统版本与API等级对应关系表
最新Android系统版本与API等级对应关系表 从Android官网拷过来的,方便查阅... 官网地址:https://developer.android.com/guide/topics/mani ...
- Android SQLite 通配符查询找不到参数问题
使用Android SQLite中SQLiteDatabase类的query方法查询时,如果where中包含通配符,则参数会无法设置,如类似下面的方法查询时 SQLiteDatabase db = d ...
- Android+Sqlite 实现古诗阅读应用(三)
往期传送门: Android+Sqlite 实现古诗阅读应用(一) Android+Sqlite 实现古诗阅读应用(二) 加入截图分享的功能. 很多应用都有分享的功能,我也想在我的古诗App里加入这个 ...
随机推荐
- 详解css中的position属性
这一次直接进入主题. css中最常用的布局类属性,一个是float,另一个就是定位属性position. 对于position来讲,有以下属性值: static : 无特殊定位,对象处于正常文档流.其 ...
- 在Elasticsearch中查询Term Vectors词条向量信息
这篇文章有点深度,可能需要一些Lucene或者全文检索的背景.由于我也很久没有看过Lucene了,有些地方理解的不对还请多多指正. 更多内容还请参考整理的ELK教程 关于Term Vectors 额, ...
- Struts2 源码分析——前言
笔者简言 笔者在博园里面注册是在二年前.可是那个时候我不知道要写些什么,也怕写出来被别人骂误人子弟.而现在却动笔了是因为前一段时间内我去参加一些大公司的面试,让笔者内心深处留下很多问号.最近三年来我一 ...
- 加速Web开发的9款知名HTML5框架
与手工编码比起来,HTML5框架在准确性和正确率方面给予了保证.大多数HTML5框架都会有一个组合或者包含一些额外的组件,比如jQuery Scripts.CSS3样式表则以改善多媒体特征的功能性和响 ...
- 浏览器退出之后php还会继续执行么?
浏览器退出之后php还会继续执行么? 前提:这里说的是典型的lnmp结构,nginx+php-fpm的模式 如果我有个php程序执行地非常慢,甚至于在代码中sleep(),然后浏览器连接上服务的时候, ...
- PHP 中的Closure
PHP 中的Closure Closure,匿名函数,又称为Anonymous functions,是php5.3的时候引入的.匿名函数就是没有定义名字的函数.这点牢牢记住就能理解匿名函数的定义了. ...
- Python语言特性之3:@staticmethod和@classmethod
问题:Python中@staticmethod和@classmethod两种装饰器装饰的函数有什么不同? 原地址:http://stackoverflow.com/questions/136097/w ...
- Entity Framework 实体框架的形成之旅--实体框架的开发的几个经验总结
在前阵子,我对实体框架进行了一定的研究,然后把整个学习的过程开了一个系列,以逐步深入的方式解读实体框架的相关技术,期间每每碰到一些新的问题需要潜入研究.本文继续前面的主题介绍,着重从整体性的来总结一下 ...
- 在Android开发中调用Rest web服务(转)
首先从维基百科上拷贝一点Rest的基本概念给大家看看,然后我们再开始详解在Android中如何调用Rest服务.表象化状态转变(英文:Representational State Transfer,简 ...
- C# winform Listbox添加和删除items
两个listbox添加和删除items #region 添加/移除 //添加 private void btnAdd_Click(object sender, EventArgs e) { ) { r ...