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版本问题的更多相关文章

  1. Android和SQLite版本对应关系

    Android和SQLite版本对应关系 今天Xamarin群有人问到Android和SQLite版本如何对应,顺手查了一下,贴出来. SQLite 3.8.4.3: • 21-5.0-Lollipo ...

  2. 图解IntelliJ IDEA 13版本对Android SQLite数据库的支持

    IntelliJ IDEA 13版本的重要构建之一是支持Android程序开发.当然对Android SQLite数据库的支持也就成为了Android开发者对IntelliJ IDEA 13版本的绝对 ...

  3. Android Sqlite 数据库版本更新

      Android Sqlite 数据库版本更新 http://87426628.blog.163.com/blog/static/6069361820131069485844/ 1.自己写一个类继承 ...

  4. Android SQLite 数据库详细介绍

    Android SQLite 数据库详细介绍 我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用 ...

  5. Android SQLite 数据库 增删改查操作

    Android SQLite 数据库 增删改查操作 转载▼ 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NU ...

  6. Android SQLite总结[转载]

    [转载] :http://blog.163.com/zqy216_2008/blog/static/4119371820119954812509/ 最近在做的项目涉及到了SQLite,大学时没有好好学 ...

  7. 再读Android sqlite

    再读Android sqlite Android原生支持sqlite数据库操作,sqlite时轻量级关系型数据库,支持标准sql语句.Android对sqlite进行良好的接口封装来避免sql注入等安 ...

  8. 最新Android系统版本与API等级对应关系表

    最新Android系统版本与API等级对应关系表 从Android官网拷过来的,方便查阅... 官网地址:https://developer.android.com/guide/topics/mani ...

  9. Android SQLite 通配符查询找不到参数问题

    使用Android SQLite中SQLiteDatabase类的query方法查询时,如果where中包含通配符,则参数会无法设置,如类似下面的方法查询时 SQLiteDatabase db = d ...

  10. Android+Sqlite 实现古诗阅读应用(三)

    往期传送门: Android+Sqlite 实现古诗阅读应用(一) Android+Sqlite 实现古诗阅读应用(二) 加入截图分享的功能. 很多应用都有分享的功能,我也想在我的古诗App里加入这个 ...

随机推荐

  1. java中String的相等比较

    首先贴出测试用例: package test; import org.junit.Test; /** * Created by Administrator on 2015/9/16. * */ pub ...

  2. 为什么是梯度下降?SGD

    在机器学习算法中,为了优化损失函数loss function ,我们往往采用梯度下降算法来进行优化.举个例子: 线性SVM的得分函数和损失函数分别为:                         ...

  3. SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程(支持单表或多表结查集分页)

    SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程,支持单表或多表结查集分页,存储过程如下: /******************/ --Author:梦在旅 ...

  4. Raft一致性协议

    分布式存储系统通常通过维护多个副本来进行fault-tolerance,提高系统的availability,带来的代价就是分布式存储系统的核心问题之一:维护多个副本的一致性.一致性协议就是用来干这事的 ...

  5. mvc 对一个或者多个实体验证失败

    为了解决“对一个或者多个实体验证失败”,关闭调用SaveChanges() 的实体属性合法性验证(谨慎使用) db.Configuration.ValidateOnSaveEnabled = fals ...

  6. Nancy 学习-进阶部分 继续跨平台

    前面两篇,讲解Nancy的基础,及Nancy自宿主和视图引擎. 现在来学习一些进阶部分. Bootstrapper Bootstrapper 就相当于 asp.net 的Global.asax . 我 ...

  7. go语言 hello 小结

    在编译go语言的时候: 写了一段这样的代码 package main import "fmt" func main() {     fmt.Println("Hello, ...

  8. 微信、QQ、微博、陌陌……社交网络的底层逻辑是什么?

      两 年前的社交产品泛滥犹在眼前,场景之胜几乎到了言必谈社交的地步.时任阿里新CEO陆兆禧举全集团之力,力推新社交产品“来往”,动作之大震惊整个互联 网.如今,陆兆禧早早退场,只留下一个硬汉的孤独背 ...

  9. 基于吉日嘎拉的OA协同办公模块重写

    这一个月的业余时间主要是在忙这个重构的事情,将吉日嘎拉自带的文档管理.公司公告.留言板.通讯录.周任务.考勤,全部重新建表,重构代码和UI. 目前根据中小企业常用的日常办公需要,搞定了公告栏.任务中心 ...

  10. 【C#进阶系列】18 特性Attribute

    这个东西有的叫定制特性,然而我喜欢直接叫特性,但是这样的话一些人不知道我说的是什么,如果我说是Attribute的话那么知道的或者用过的就都懂了. 还记得讲到枚举和位标志那一章,关于位标志,有一个[F ...