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. Windows Azure Active Directory (4) China Azure AD Self Password Reset

    <Windows Azure Platform 系列文章目录> 本文介绍的是国内由世纪互联运维的Azure China. 在开始本章内容之前,请读者熟悉笔者之前写的文档: Windows ...

  2. MVC中Action参数绑定的过程

    一.题外话 上一篇:MVC中Action的执行过程 ControllerContext 封装有了与指定的 RouteBase 和 ControllerBase 实例匹配的 HTTP 请求的信息. 二. ...

  3. EF基本操作增、删、查、改、分页,join……等

    一.批量添加数据 static void Main(string[] args) { add(); add2(); Console.ReadKey(); } static void add() { D ...

  4. [锋利的JQ]-超链接提示效果

    关键知识点: 1.事件对象:当事件一旦被触发,事件对象便会创立.事件对象只能作用于该事件的事件处理程序. 2.认识了mousemove事件了连续触发执行的特性. 代码: HTML: <div c ...

  5. asp.net后台注册js的四种方法

    1. 用Response.Write方法 代码如下: Response.Write("<script type='text/javascript'>alert("kel ...

  6. 创建Oracle数据库

    [root@localhost ~]# su - oracle [oracle@localhost ~]$ sqlplus /nolog SQL> conn /as sysdba; SQL> ...

  7. Linux下快速设定ip bond

    在计算机网路普及的初期,很多OS系统都使用的为单网卡方式,即一个网卡使用一个IP地址.随着网络要求的不断提高,我们可以对多个网卡进行绑定聚合当一个逻辑网络接口来使用,从而大幅提升服务器的网络吞吐(I/ ...

  8. Java总结篇系列:java.lang.Object

    从本篇开始,将对Java中各知识点进行一次具体总结,以便对以往的Java知识进行一次回顾,同时在总结的过程中加深对Java的理解. Java作为一个庞大的知识体系,涉及到的知识点繁多,本文将从Java ...

  9. 新平台,新版本,ComponentOne 持续发力

    我们很高兴宣布2016年 V1 版本发布了,可免费下载试用. 今年ComponentOne 将聚焦WinForm.WPF.MVC.UWP平台和核心控件Flex家族. 本次发布主要包括UWP平台:Win ...

  10. hibernate简单注释(一)

    *****************************hibernate.cfg.xml************************************ <?xml version= ...