Android数据库升级总结

本文详细介绍了数据库升级的概念与原理,包括如何通过修改版本号实现升级、具体的代码实现方式以及升级过程中需要注意的问题。此外,还提供了数据库升级的具体案例。

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

1、数据库升级概念

在开发应用时,我们经常会用数据库来保存数据。 但是随着应用的版本不断升级, 之前的数据库结构可能不太适应当前版本, 这时就需要升级数据库, 使之符合当前需求。类似应用升级, 数据库的升级也需要version来标明。 不同的是应用版本的升级, 只需更改AndroidManifest.xml文件中的versionCode与versionName即可。 但是数据库的升级需要在代码里面修改。

2、数据库升级原理

2.1、升级原理分析

在使用数据库时, 我们会定义一个扩展了抽象类SQLiteOpenHelper的子类。例如,

图1

图1 DatabaseHelper

其中, 构造函数调用了父类即SQLiteOpenHelper的构造方法, 其中包含了一个version的参数。这个参数即是数据库的版本。 所以,我们可以通过修改version来实现数据库的升级。 一般的,在数据库初始开发时设置为1,然后每次升级时递增。
其次,在SQLiteOpenHelper中还定义了两个抽象的方法,onCreate( )、onUpgrade( )。
这两个方法顾名知义对应着数据库的创建和升级两个过程。我们一般在onCreate( )方法中进行创建表等操作,在onUpgrade( )方法中进行修改表等操作。 例如,

图2

图2 实现的方法

当在某个应用1.0版时, 设置构造方法中的参数version为1。我们在使用SQLiteOpenHelper访问数据库时,系统会读取该参数。如果该参数为0,表示之前没有数据库文件, 则将version为1写入数据库,并调用onCreate( )方法创建数据库。当需要升级数据库时将version设置为2。在应用访问数据库时就会去读取数据库中存储的数据库版本,如果发现不一样(变大), 则会调用onUpgrade( )方法,触发升级逻辑。

2.2、具体代码分析

2.2.1、SQLiteOpenHelper类构造方法

图3

图3 SQLiteOpenHelper构造方法

其中, CursorFactory和DatabaseErrorHandler一般是传null。 我们可以看到,构造SQLiteOpenHelper对象时如果数据库版本号低于1是会报异常的。

2.2.2、SQLiteOpenHelper的使用

在访问数据库时,我们一般会new一个SQLiteHelper的对象。

图4

图4 SQLiteOpenHelper的使用

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

图5

图5 数据库升级逻辑

我们可以看到,系统会先调用getVersion( )获取当前数据库版本。如果没有数据库文件存在,则getVersion( )方法会返回0. 从而调用onCreate( )方法。如果version不为0,则会比较当前version与数据库中保存的version值从而决定是升级还是降级。对于降级系统会抛出异常,如下

图6

图6 降级逻辑

而升级的操作,则需要我们在子类中实现。最后,系统会将当前数据库版本version值保存到数据库中。

3、数据库升级注意事项

在升级数据库时,如果我们需要在原有表的基础上增加一个字段,那么需要注意的是,一定要为老数据的的新添字段设置默认值。否则,在查询该数据表时会返回空。增加列并设置默认值的方法如下:

图7

图7 增加字段并设置默认值

其次,数据库的升级是对于升级用户的而言的。但是对于新用户系统会新创建数据库,所以在增加字段的同时也要在onCreate( )方法中修改创建该表的SQL语句,从而增加字段。这样那么不管是升级用户还是新用户,数据库中的该表都增加了该字段。

4、结论

1.数据库的升级是通过修改version值实现的。
2.新用户会通过onCreate()方法产生数据库。对于升级用户而言,如果没有升级数据库,则不会进行数据库创建及升级操作。如果升级了数据库,则会调用onUpgrade( )方法。
3.应用的升级与数据库升级无必然的联系。

5、参考

  1. 网址:http://blog.youkuaiyun.com/jiangwei0910410003/article/details/39670813
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值