这是一个最最最基础的在 Android 开发中使用本地 SQLite 的介绍,仅仅包括最基本的连接和增删改查(就够基本用= =)。其实Android 官方推荐使用更有效率的 Room数据库 来存储数据,不过 SQLite 更为常用。在学习的时候发现网上的中文教程实在是比较。。。一言难尽,而我又需要讲的比较仔细,因此就决定自己写一份,就给我这样的新(cai)手(ji)做个参考叭。
驱动
SQLite 不需要任何驱动!!!不需要下载任何东西,直接上代码就行。(我真的有读到让下载驱动的教程= =)
定义数据库
Android 提供 BaseColumns
接口将数据库内容(表名、列名)设定为全局变量。你 不一定 要使用它提供的接口,你可以把你的数据库设定写在任何地方,或者直接写建立数据库的 SQL 语句。不过使用 BaseColumns
可以让数据库更好的兼容 Android 体系,并且给数据库提供一个自增主键 _ID
,类型为 long
。具体使用方法:
1 | public final class Database { |
数据库 Helper
Android 官方提供了调用 SQLite 的 API SQLiteOpenHelper
。我们只需要写一个包含数据库创建和版本信息的类来继承它,并在需要数据库的时候调用我们写的类就可以了。
关于如何填入数据库创建和版本信息,直接上代码叭
1 | public class DBHelper extends SQLiteOpenHelper { |
读写
读写数据库的时候,我们需要建立一个 DBhelper
(即前面写的继承 SQLiteOpenHelper 类)的实例,并调用 getWritableDatabase()
或者 getReadableDatabase()
来获得所需的数据库。
1 | // 传入 context,如果需要,同时传入数据库名称、版本号等 |
Android 官方小贴士:由于获取数据库信息需要花费较长时间,建议把获得读/写数据库以及读写数据库操作放在后台运行,比如放在 AsyncTask
或者 IntentService
中.
读
首先通过 hepler
来获得数据库,然后调用数据库的 query()
函数来获得数据。query()
函数会返回一个存储着数据的 cursor
(类似于一个 Iterator
里面存 Map
)。假设我们需要在 classes 表里获得第一天按 id 排的前五节课的 id 和课名(SELECT id, name FROM classes WHERE day =3 ORDER BY id DESC LIMIT 5
)代码如下:
1 | // 通过 helper 获得一个只读数据库 |
写
一样通过 hepler
来获得数据库,然后调用数据库的 insert()
函数将数据插入数据库。insert()
函数会返回当前插入数据的主键。假设我们需要在 classes 表里插入 name 为 OOP,在第三天上课的课程信息(INSERT INTO classes (name, day) VALUES (OOP, 3)
)并获得插入数据的 id,代码如下:
1 | // 通过 helper 获得可写入的数据库 |
update()
和 insert()
类似,不过返回的数值是这次改动影响的行数。假设我们需要将 id 为 1 的课改名为 OOD (UPDATE classes SET name = OOD WHERE id = 1
),代码如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15// 通过 helper 获得可写入的数据库
SQLiteDatabase db = dbHelper.getWritableDatabase();
// 将数据加入 ContentValues 中
ContentValues updates = new ContentValues();
updates.put(Database.Classes.COLUMN_NAME, "OOD");
// 这里在数据库里做修改
/*
第一个参数:表名
第二个参数:包含列名和对应值的 ContentValues
第三个参数:条件,SQL 语句 while 部分,参数的值可以用 ?代替(防止 SQL 注入),没有为 null
第四个参数:将参数填入前面的语句,用字符串数组传入,和前面的 ?一一对应,没有为 null
*/
db.update(Database.Classes.TABLE_NAME, updates, Database.Classes._ID + " = ?", new String[]{"1"});
参考资料
- Android developer: Save data using SQLite
- Android developer: SQLiteDatabase