数据存储之SQLiteDatabase

数据存储之SQLite

概要

SQLite数据库是一款轻量级的关系型数据库,它的运算速度非常快,占用资源少,在存储大量复杂的关系型数据的时候可以使用。

接下来学习一下如何数据库的简单的增删改查功能,让我们来更好的掌握这些知识点。

1. 创建数据库

来先看一下SQLiteOpenHelper这个类,它是SQLitedatabase的帮助类,用于管理数据库的创建和升级。SQLiteOpenHelper的使用步骤如下:

(1)、自定义一个类,然后继承SQLiteOpenHelper,并重写OnCreateOnUpgrade方法,这两个方法分别用来实现创建和升级数据库的逻辑,这里还需要提供一个构造方法,用下面这个带四个参数的就行,
数据存储之SQLiteDatabase
(2)、创建数据库时,先实例化我们自定的helper类,并提供四个参数,分别是(context,数据库名,创建course工厂类,版本号)。
(3)、用helper类的实例对象getReadableDatabase()getWritableDatabase()去创建或者打开一个现有的数据库,并返回一个sqlitedatabase对象。
(4)、之后就可以利用得到的数据库进行增删改查操作了。

下面我们通过实际代码来了解SQLiteDatebase,首先重写构造方法,参数上面已经提到过,这里就不再多说了;然后,我们在onCreate方法里面创建一个Student的表,里面包含nameagesex等字段;这里需要注意一下,我们在写SQL语句的时候一定要准确,多个空格都会导致创建失败或者报错。接下来,适用第一个常用地额方法execSQL(),这个方法可以接收和处理SQL语句,后面将要学习的增删改查不仅可以用提供好的线程的辅助性方法,还可以直接用圆SQL语句在调用execSQL()就够了,在后面的学习中只介绍前一种方法。
这里就调用execSQL()去创建表并用toast提示用户。这样一个helper类就创建好了!
数据存储之SQLiteDatabase

然后在新建一个布局,并放入五个按钮,分别对应创建、增、删、改、查:

数据存储之SQLiteDatabase

然后在MainActivity里面实例化我们自定义的helper类,并制定数据库名为student.db,
第三个参数直接填null,版本号为1。
数据存储之SQLiteDatabase

接下来点击按钮,调用getReadableDatabase()创建数据库,且MyDBHelper的onCreate方法也会执行,那么student表就创建成功
数据存储之SQLiteDatabase

运行成功并且有toast提示,但着并不就代表表创建成功了,我们可以到AS的devicefileexplorer找到对应文件夹查看明确是有student.db存在;如果想要查看数据库,我们可以用cmd利用adbshell来检查,如下

数据存储之SQLiteDatabase
可以看到,目录下确实有student表。

(2)增加数据
现在来看一下之前看到的ContentValues类,常用它的put方法以键值对形式存储基本类型数据,其中增加数据和更改数据都会用到它,可以理解为键就是表中的属性名,值就是表中的数据,还有常用的方法clear()清空所有数据。

SQLiteDatabase中添加数据用到的方法是public long insert(String table, String nullColumnHack, ContentValues values)其中三个参数分别表示被操作的表名,空值字段的名称,contentValues对象;
第二个参数一般情况都是传入null。好了,现在我们了解插入数据的方法后,让我们来实际操作一下吧!

数据存储之SQLiteDatabase

然后运行程序,插入成功!

数据存储之SQLiteDatabase

(3)、删除数据
删除数据的方法是public int delete(String table, String whereClause, String[] whereArgs),参数分别表示表名,第二和第三个参数用于约束删除某一行或几行的数据。比如需要删除表中年龄大于17的:

数据存储之SQLiteDatabase

运行程序,发现表中第一条数据被删除了

数据存储之SQLiteDatabase

(4)、更改数据

public int update(String table, ContentValues values, String whereClause, String[] whereArgs)

四个参数也很简单,一次为表名,contentvalues对象,约束,约束。前面都有过解释了,来试试给表里面的XiaoMing改一下性别把!

数据存储之SQLiteDatabase

从截图可以看出,xiaoming的sex属性已经更改成功了。

(5)查询数据

 public Cursor query(String table, String[] columns, String selection,
String[] selectionArgs, String groupBy, String having,
String orderBy)

query()比较复杂一些,它包含七个参数(表名,要查询出的列名,查询条件子句,对应于selection语句中占位符的值,要分组的列名,分组后过滤条件,排序方式),其实并不用看到一长串的参数而害怕,记住最重要的几个参数就行了。
这个方法会返回一个course(游标),查询到的数据都会从他取出。course的常用方法:moveToFirst()将指针移动到结果集的第一行;getColumnIndex()获取某一列在表中对应位置的索引;getxxx()传入以获取相应位置的某种数据类型;close()关闭游标。接下来实战一下吧。

数据存储之SQLiteDatabase

从logcat我们可以看到打印的结果。

(6)、升级数据库
我们自定的helper类中的第二个方法onUpdate()用于帮助数据库进行版本更新,比如此刻需要在数据库再添加一张表course,只要在update()写好创建course的操作,然后想办法让它被调用就好了。还记得在实例化帮助类是需要传入的第四个参数版本号吗?之前的传入的是1,只要传入一个比1大的数就可以让update()执行了。在下图代码里利用了oldVersion去判断旧版本号,如果是1就只需要再建course表,如果初次运行程序,就只会执行onCreate()方法然后两张表就一起建立了。这样做的好处是无论更新到第几代都不会影响之前的操作数据,也能保证当前版本是最新的

数据存储之SQLiteDatabase

重新运行程序,student表并不会重新创建,而是只会创建course表。

数据存储之SQLiteDatabase

好啦,以上就是全部内容了。

数据存储之SQLiteDatabase