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里加入这个 ...
随机推荐
- Azure上七层负载均衡APP Gateway
Azure的SLB和ILB是最常用的4层负载均衡工具.但有些场景是7层的负载均衡,SLB和ILB就无能为力了. Azure上已经推出了APP Gateway的服务,就是7层负载均衡的负载均衡器. 如上 ...
- JavaScript之旅(三)
JavaScript之旅(三) 三.函数 在JavaScript中,定义函数的方式如下: function abs(x) { ... return ...; } 如果没有return,返回结果为und ...
- Spark程序使用groupByKey后数据存入HBase出现重复的现象
最近在一个项目中做数据的分类存储,在spark中使用groupByKey后存入HBase,发现数据出现双份( 所有记录的 rowKey 是随机 唯一的 ) .经过不断的测试,发现是spark的运行参 ...
- Redis使用总结(1):基础使用
Redis的安装及启动 安装 Ubuntu sudo apt-get install redis Mac sudo brew install redis Windows 不支持 启动 首先启动Redi ...
- Microsoft Orleans 之 入门指南
Microsoft Orleans 在.net用简单方法构建高并发.分布式的大型应用程序框架. 原文:http://dotnet.github.io/orleans/ 在线文档:http://dotn ...
- 十年微软(Microsoft)MVP
十年微软(Microsoft)MVP,七月一日收到邮件,今早收到从美国微软寄过来的证书!
- 记一次串口通信调试,慎用SerialPort.Close
做项目是遇到了串口通信,真是遇到了一个大坑,不知道是微软的坑还是我的坑. 让我慢慢道来完整的经历. 项目中以前是vb 写的,是vb与vb 之间进行串口通信,现在改成C#和之前的vb程序进行串口通信. ...
- IIS 7.5 应用程序池预热模块组件
预热组件下载地址:下载地址 IIS预热模块配置界面插件:下载地址 Warm Up设定方式: (1) 应用程序池层级:只要有需要的应用程序池的Start Mode设定AlwaysRunning就可以 ( ...
- PDF解析帮助类
public class ComPDFHepler { /// <summary> /// 正则获取字符串中两个字符串间的内容 /// </summary> /// <p ...
- 解决之前上架的 App 在 iOS 9 会闪退问题 (更新:已有 Hotfix)
最新更新:(2015.10.02) 开发环境: Delphi 10 Seattle OS X El Capitan v10.11 需使用下列 HotfixID: 30398, PAServer Hot ...