SQLiteOpenHelper 使用

Android系统中使用的是SQLite数据库。虽然在Android中操作SQLite并不复杂,但在使用过程中仍然会遇到这样或那样的问题。例如,如何将一个ListViewGallery组件与SQLite数据库中的某个表进行绑定;如果程序发布时需要带一些初始数据,那么如何将数据库与应用程序一起发布呢?是否可以打开任意路径下的数据库文件。这些都是AndroidSQLite的初学者经常会遇到的问题。


??? android.database.sqlite.SQLiteDatabaseAndroid SDK中操作数据库的核心类之一。使用SQLiteDatabase可以打开数据库,也可以对数据库进行操作。然而,为了数据库升级的需要以及使用更方便,往往使用SQLiteOpenHelper的子类来完成创建、打开数据库及各种数据库的操作。
? ? SQLiteOpenHelper是一个抽象类,在该类中有如下两个抽象方法,因此,SQLiteOpenHelper的子类必须实现这两个方法。
public abstract void onCreate(SQLiteDatabase db);
public abstract void onUpgrade(SQLiteDatabase db,int oldVersion, int newVersion);
SQLiteOpenHelper会自动检测数据库文件是否存在。如果数据库文件存在,会打开这个数据库,在这种情况下,并不会调用onCreate方法。如果数据库文件不存在,SQLiteOpenHelper首先会创建一个数据库文件,然后打开这个数据库,最后会调用onCreate方法。因此,onCreate方法一般被用来在新创建的数据库中建立表、视图等数据库组件。也就是说,onCreate方法在数据库文件第一次被创建时调用。
? ? 让我们先看看SQLiteOpenHelper类的构造方法再解释onUpgrade方法何时会被调用。
public SQLiteOpenHelper(Context context, Stringname, CursorFactory factory, int version);
? ? 其中name参数表示数据库文件名(不包含文件路径),SQLiteOpenHelper会根据这个文件名创建数据库文件。version表示数据库的版本号。如果当前传递的数据库版本号比上次创建或升级的数据库版本号高。SQLiteOpenHelper就会调用onUpgrade方法。也就是说,当数据库第1次创建时会有一个初始的版本号。当需要对数据库中表、视图等组件升级时可以增大版本号。这时SQLiteOpenHelper会调用onUpgrade方法。当调用完onUpgrade方法后,系统会更新数据库的版本号。这个当前的版本号就是通过SQLiteOpenHelper类的最后一个参数version传入SQLiteOpenHelper对象的。因此,在onUpgrade方法中一般会首先删除要升级的表、视图等组件,再重新创建它们。也许很多读者看到这还是比较模糊,不知如何应用SQLiteOpenHelper来操作数据库,不过这不要紧。本章的实例39将详细演示SQLiteOpenHelper类的使用方法。下面来总结一下onCreateonUpgrade方法的调用过程。


  • 如果数据库文件不存在,SQLiteOpenHelper在自动创建数据库后只会调用onCreate方法,在该方法中一般需要创建数据库中的表、视图等组件。在创建之前,数据库是空的,因此,不需要先删除数据库中相关的组件。

  •  如果数据库文件存在,并且当前的版本号高于上次创建或升级时的版本号,SQLiteOpenHelper会调用onUpgrade方法,调用该方法后,会更新数据库版本号。在onUpgrade方法中除了创建表、视图等组件外,还需要首先删除这些相关的组件,因此,在调用onUpgrade方法之前,数据库是存在的,里面还有很多数据库组件。

  •  综合上述两点,可以得出一个结论。如果数据库文件不存在,只有onCreate方法被调用(该方法只会在创建数据库时被调用1次)。如果数据库文件存在,并且当前版本较高,会调用onUpgrade方法来升级数据库,并更新版本号。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值