Android数据库升级,android开发艺术探索pdf百度网盘

本文介绍了Android数据库的升级过程,以一个实例展示了如何在SQLite中通过增加字段来升级数据库,从v2.0到v3.0。升级过程中使用`SQLiteOpenHelper`的`onUpgrade()`方法,并通过for循环处理不同版本间的升级操作。同时,文章还讲解了数据库升级的基本原理,即当应用检测到数据库版本变化时,会调用`onUpgrade()`进行更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

default:

break;

}

}

}

}

其中的SQL的建表语句为:

public class SQL {

public static final String T_FAVORITE = “favorite”;

public static final String CREATE_TABLE_FAVORITE =

"CREATE TABLE IF NOT EXISTS " + T_FAVORITE + “(” +

"id VARCHAR PRIMARY KEY, " +

"title VARCHAR, " +

"url VARCHAR, " +

"createDate VARCHAR " +

“)”;

}

(2)v2.0:DATABASE_VERSION=1001,在favorite表添加1个deleted字段

public class DBHelper extends SQLiteOpenHelper {

private static final String DATABASE_NAME = “mall.db”;

private static final int DATABASE_VERSION = 1001;

private static DBHelper instance = null;

public DBHelper(Context context) {

super(context, DATABASE_NAME, null, DATABASE_VERSION);

}

public synchronized static DBHelper getInstance(Context context) {

if (instance == null) {

instance = new DBHelper(context);

}

return instance;

}

@Override

public void onCreate(SQLiteDatabase db) {

db.execSQL(SQL.CREATE_TABLE_FAVORITE);

// 若不是第一个版本安装,直接执行数据库升级

// 请不要修改FIRST_DATABASE_VERSION的值,其为第一个数据库版本大小

final int FIRST_DATABASE_VERSION = 1000;

onUpgrade(db, FIRST_DATABASE_VERSION, DATABASE_VERSION);

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

// 使用for实现跨版本升级数据库

for (int i = oldVersion; i < newVersion; i++) {

switch (i) {

case 1000:

upgradeToVersion1001(db);

break;

default:

break;

}

}

}

private void upgradeToVersion1001(SQLiteDatabase db){

// favorite表新增1个字段

String sql1 = “ALTER TABLE “+SQL.T_FAVORITE+” ADD COLUMN deleted VARCHAR”;

db.execSQL(sql1);

}

}

(3)v3.0:DATABASE_VERSION=1002,在favorite表中添加message和type字段

public class DBHelper extends SQLiteOpenHelper {

private static final String DATABASE_NAME = “mall.db”;

private static final int DATABASE_VERSION = 1002;

private static DBHelper instance = null;

public DBHelper(Context context) {

super(context, DATABASE_NAME, null, DATABASE_VERSION);

}

public synchronized static DBHelper getInstance(Context context) {

if (instance == null) {

instance = new DBHelper(context);

}

return instance;

}

@Override

public void onCreate(SQLiteDatabase db) {

db.execSQL(SQL.CREATE_TABLE_FAVORITE);

// 若不是第一个版本安装,直接执行数据库升级

// 请不要修改FIRST_DATABASE_VERSION的值,其为第一个数据库版本大小

final int FIRST_DATABASE_VERSION = 1000;

onUpgrade(db, FIRST_DATABASE_VERSION, DATABASE_VERSION);

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

// 使用for实现跨版本升级数据库

for (int i = oldVersion; i < newVersion; i++) {

switch (i) {

case 1000:

upgradeToV

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

开源分享完整内容戳这里

ersion1001(db);

break;

case 1001:

upgradeToVersion1002(db);

break;

default:

break;

}

}

}

private void upgradeToVersion1001(SQLiteDatabase db){

// favorite表新增1个字段

String sql1 = “ALTER TABLE “+SQL.T_FAVORITE+” ADD COLUMN deleted VARCHAR”;

db.execSQL(sql1);

}

private void upgradeToVersion1002(SQLiteDatabase db){

// favorite表新增2个字段,添加新字段只能一个字段一个字段加,sqlite有限制不予许一条语句加多个字段

String sql1 = “ALTER TABLE “+SQL.T_FAVORITE+” ADD COLUMN message VARCHAR”;

String sql2 = “ALTER TABLE “+SQL.T_FAVORITE+” ADD COLUMN type VARCHAR”;

db.execSQL(sql1);

db.execSQL(sql2);

}

}

这就是升级的一个步骤。在onCreate中去执行onUpgrade。

数据库升级原理


在使用数据库时,我们会定义一个继承了SQLiteOpenHelper的子类,就比如刚才的DBHelper。我们通过版本号去更新一个数据库。我们更新一次数据库,当应用去访问数据库的时候就会读取数据库的版本号,如果和之前不一样,则会调用onUpgrade方法。

SQLiteOpenHelper的构造方法

在这里插入图片描述

当版本号小于1时,是会报错的。 CursorFactory和DatabaseErrorHandler我们一般传null。

SQLiteOpenHelper的使用

在这里插入图片描述

DatabaseHelper是继承了SQLiteOpenHelper的数据库类,其中,getWritableDatabase( )会调用getDatabaseLocked(false)方法,在该方法中实现了对数据库版本检查和升级等的逻辑。其中部分代码如下,

Android开发艺术探索》是一本Android进阶类书籍,采用理论、源码和实践相结合的方式来阐述高水准的Android应用开发要点。《Android开发艺术探索》从三个方面来组织内容。第一,介绍Android开发者不容易掌握的一些知识点;第二,结合Android源代码和应用层开发过程,融会贯通,介绍一些比较深入的知识点;第三,介绍一些核心技术和Android的性能优化思想。 《Android开发艺术探索》侧重于Android知识的体系化和系统工作机制的分析,通过《Android开发艺术探索》的学习可以极大地提高开发者的Android技术水平,从而更加高效地成为高级开发者。而对于高级开发者来说,仍然可以从《Android开发艺术探索》的知识体系中获益。 《Android开发艺术探索》是一本Android进阶类书籍,采用理论、源码和实践相结合的方式来阐述高水准的Android应用开发要点。《Android开发艺术探索》从三个方面来组织内容。第一,介绍Android开发者不容易掌握的一些知识点;第二,结合Android源代码和应用层开发过程,融会贯通,介绍一些比较深入的知识点;第三,介绍一些核心技术和Android的性能优化思想。, 《 Android开发艺术探索》侧重于Android知识的体系化和系统工作机制的分析,通过《Android开发艺术探索》的学习可以极大地提高开发者的Android技术水平,从而更加高效地成为高级开发者。而对于高级开发者来说,仍然可以从《Android开发艺术探索》的知识体系中获益。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值