一、SQLiteOpenHelper有两个方法、两个实例、和两个构造方法
1、首先SQLiteOpenHelper是一个抽象类,这意味着如果我们想要使用它的话,就需要创建一个帮助类去继承它。
2、SQLiteOpenHelper中有两个抽象方法,onCreate()和onUpgrade(),我们必须在自己的帮助类里面重写这两个方法,然后分别在这两个方法中去实现创建、升级数据库的逻辑。
3、SQLiteOpenHelper还有两个重要的实例:getReadableDatabase()和getWritableDatabase(),这两个方法都可以创建或打开一个现有的数据库(如果数据库已存在则直接打开,否则创建一个新的数据库),并返回一个可对数据库进行读写的对象。不同的是,当数据库不可写入的时候(如磁盘空间已满),getReadableDatabase()方法返回的对象将以只读的方式去打开数据库,而getWritableDatabase()方法则将出现异常。
4、SQLiteOpenHelper中有两个构造方法可提供重写,一般使用参数少一点的那个构造方法即可,这个构造方法中接收4个参数:
第一个参数:Context(),必须要有它才能对数据库进行操作;
第二个参数是数据库名,创建数据库时使用的就是这里指定的名称;
第三个参数允许我们在查询数据的时候返回一个自定义的Curor,一般传入null;
第四个参数表示当前的数据库的版本号,可用于数据库进行升级操作。
构建SQLiteOpenHelper的实例之后,再调用它的getReadableDatabase()或getWritableDatabase()方法就能够创建数据库了。数据库文件会存放在、/data/data//database/目录下,此时重写的onCreate()也会得到执行,所以通常会在这里去处理一些创建表的逻辑。
示例:创建一个BookStore.db的数据库,然后在这个数据库中新建一张Book表,表中有id(主键)、作者、价格、页数和书名等列。
1、首先新建一个帮助类继承SQLiteOpenHelper
2、布局添加一个创建数据库按钮
3、在主类中构建帮助类对象,通过构造函数建数据库
二、升级数据库
示例:数据库中已经存在一张Book表,现在想添加一张Category表用于记录图书的分类
修改在SQLiteOpenHelper的构造方法里接收的第四个参数版本号,表示我们将数据库进行升级
三、添加数据
对数据的操作无非是4种:CRUD。C代表添加(Create),R代表查询(Retrieve),U代表更新(Update),D代表删除(Delete)。每一种操作都对应了一种SQL命令,添加用insert,查询用select,更新用update,删除用delete。
1、 添加数据:SQLiteDatabase中提供了一个insert()方法,这个方法专门用于添加数据的,接收3个参数,第一个是表名;第二个参数用于在未指定添加数据的情况下给某些可为空的列表自动赋值NULL,一般我们使用不到这个功能,直接传入null即可;第三个参数是一个ContentValues对象,它提供了一系列的put()方法重载,用于向ContentValues中添加数据,只需要将表中的每个列名以及相应的待添加数据闯入即可。
再定义一个添加按钮
四、更新数据
更新数据:SQLiteDatabase中提供了update()方法,用于对数据进行更新,这个方法接收4个参数,第一个参数和insert()方法一样,也是表名;第二个参数:在这里指定去更新哪张表里的数据;第三、四个参数:用于约束更新某一行或某几行中的数据,不指定的话默认就是更新所有的行。
自己再定一个更新数据的按钮,将价格数据调成10.9
五、删除数据
SQLiteDatabase中提供了一个delete()方法,专门用于删除数据,这个方法接收3个参数,第一个参数仍然是表名,第二、三个参数又是约束删除某一行或几行的数据,不指定的话就是默认删除所有的行。
示例:删除Book表页数大于400页的数据,新建一个删除按钮
六、查询数据
SQLiteDatabase中提供了一个query()方法用于对数据的查询,这个方法的参数非常的复杂,最短的一个方法重载也需要传入7个参数,第一个参数:表名;第二个参数:用于指定去查询哪几列,如果不指定则默认查询所有列;第三、四个参数用于约束查询某一行或某几行的数据,不指定则默认查询所有行的数据;第五个参数:用于指定需要去group by的列。不指定则表示不对查询结构进行group by操作;第六个参数:用于group by之后的数据进一步过滤,不指示则不过滤;第七个参数用于指定查询结果的排序方式,不指定则表示使用默认的排序方式。
调用query()方法后会返回一个Cursor对象,查询到的所有数据都将从这个对象中取出。
示例:新建一个查询按钮,查询Book表的所有数据
根据郭霖大神第一行代码学习,敬礼!