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. JS魔法堂:再识ASCII实体、符号实体和字符实体

    一.前言            相信大家都熟悉通过字符实体   来实现多个连续空格的输入吧!本文打算对三类HTML实体及JS相关操作作进一步的整理和小结,若有纰漏请大家指正,谢谢. 二.初识HTML实 ...

  2. EF总结

    1.Entity Framework 查询历史最严重bug求解十万火急 2.http://www.cnblogs.com/badly1984/p/3203565.html 3.Entity Frame ...

  3. ADO.NET基础--组成部分

    第一部分:数据提供程序,在命令空间:System.Data.SqlClient下: Connection--连接数据库的通道 Command----命令执行对象 DataReader--数据读取器 D ...

  4. MySql笔记01

    用了两天的时间终于把MySql安装好了,还是很麻烦的,之所以没有选择直接安装,使用的是免安装版本,主要是想了解这个数据库的配置,这样以后就可以更好的了解它了. 登录MySql:mysql –h loc ...

  5. MySqlHelper、CacheHelper

    MySqlHelper代码: using System; using System.Collections; using System.Collections.Generic; using Syste ...

  6. Mssql中一些常用数据类型的说明和区别

    Mssql中一些常用数据类型的说明和区别 1.bigint 占用8个字节的存储空间,取值范围在-2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,37 ...

  7. .NET框架体系结构

    刚开始接触.NET很疑惑,看完视频也不是太懂,通过总结和反复,从概括和概念入手,慢慢变得清晰了.这篇博客主要是我对.NET基础知识的了解,算作积累吧. .NET框架体系结构 由四个主要部分组成     ...

  8. 将文本文件(txt)的内容导入到Excel和SQL

    这两天网络上流传14w条12306账号信息的txt文档,下载下来之后发现在txt文档中看和查询内容都不是很方便. 这里我就记录下如何将txt文档导入到excel和SQL的过程. 导入到excel 1. ...

  9. java中实现同步的两种方式:syschronized和lock的区别和联系

    Lock是java.util.concurrent.locks包下的接口,Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题,我 ...

  10. PowerDesigner中Table视图怎样同时显示Code和Name

    1.创建一个简单table视图步骤: 1)打开软件,创建model,选择Physical Data