对于Sqlite
的简单使用,我们可以用两种方式,先说第一种:
这种是大家常用的方式,我们先创建一个类继承SQLiteOpenHelper
,对于这个类,我们应该在oncreate()
方法中创建表,为什么呢?因为当你创建表时,若这张表是存在的,那么就会报错,也就是说,如果你运行了这个程序之后,再运行一次,当运行到创建表这一块时会报错,因为这张表已经存在,所以说创建表的语句应该放在只会调用一次的方法中,正好oncreate()
方法满足,因为这个方法是在数据库创建的时候执行,而对于数据库的创建则会有判断,若这个数据库存在则打开,若不存在则创建(其实就是一些判断,当存在时,就调用SQLiteDatabase
的openDatabase()
方法,若不存在就调用SQLiteDatabase
的openOrCreateDatabase()方法
),所以我们应该把创建表的语句写在onCreate()
中,可以理解成onCreate()
方法是创建表的方法,同时这里需要提一点,数据库是什么时候完全建立或打开了呢?只有当调用了SQLiteDatabase
的openDatabase()
方法或则SQLiteDatabase
的openOrCreateDatabase()
方法才行,而不是说调用了自己创建的类的构造函数就行,对于这种使用sqlite
的方式,我们应该在activity
中调用自己定义类的getWritableDatabase()
或者getReadableDatabase()
方法,我们通过源代码可以知道,其实这两种方法还是通过调用SQLiteDatabase
的openDatabase()
方法以及SQLiteDatabase
的openOrCreateDatabase()
方法,同时这里需要提到自己定义的类的另一个方法,就是onUpgrade()
方法,这个方法有三个参数,第一个是表,第二个是数据库之前的版本,第三个是数据库之后的版本,同时这里需要提一点,并不是调用这个方法来实现数据库版本的更新,而是数据库版本更新之后会调用这个方法,这里的两个数据库版本号是为了标注从哪个版本升级到哪个版本,在这个方法中我们应该干什么呢?我们可以增加一些表或者删除一些表,或者更改数据以便和新版本的数据库联系。至于如何更新数据库,可以在activity
中调用自己定义类的构造函数,同时这里需要提一下,我们之前说过,这个构造函数并没有打开或创建数据库的功能,如果你去查看源代码就会发现,只是赋值而已,对于数据库的更新,我们肯定需要打开这个数据库,所以还需要调用getWritableDatabase()
或者getReadableDatabase()
方法。这里再提一下这两个方法的区别,之前我记得的是前者打开或者创建一个可读可写的数据库,后者是打开或创建一个可写的数据库,但是当我实现数据库版本更新时,我用的是getReadableDatabase()
方法,但是依然成功,为什么是但是呢?因为数据库是只可读的时候不允许更改数据库的版本号,后来我上网查询知道了,原来这两个方法的区别是:getWritableDatabase()
方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用的是getWritableDatabase()
方法就会出错。getReadableDatabase()
方法则是先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。如果该问题成功解决,则只读数据库对象就会关闭,然后返回一个可读写的数据库对象所以说以后用getReadableDatabase()
方法更好。
接下来说第二种方式:
这种方式就是不定义一个类来继承SQLiteOpenHelper
,而是继承object
就好,然后设置一个构造函数,参数包括context
,当然还可以包括一些别
的,别入版本号之类的,至于这里要参数context
,是因为我们需要使用到context
中的openOrCreateDatabase()
方法,当然我们也可以不带任何
参数,因为我们可以使用SQLiteDatabase
的静态方法openOrCreateDatabase()
,其实context
中的openOrCreateDatabase()
方法也是通过调用
SQLiteDatabase
的静态方法openOrCreateDatabase()
,只是因为使用context
的openOrCreateDatabase()
方法简单点,所以这样用了。
然后我们可以调用用SQLiteOpenHelper
对象的execSQL
,query()
,insert()
,setVersion()
等等方法来实现这些增删改查等,然后再activity
中调用
自己定义的类及定义的方法就行。
综上所述,其实对于sqlite
的使用,最重要的类就是SQLiteDatabase
,而SQLiteOpenHelper
则是一个包装了SQLiteDatabase
类的一些方法的
辅助类,辅助你使用sqlite
。