SQLite
SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。
它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件.
image.png
优势
- 不需要一个单独的服务器进程或操作的系统(无服务器的)。
- SQLite 不需要配置,这意味着不需要安装或管理。
- 一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。
- SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。
- SQLite 是自给自足的,这意味着不需要任何外部的依赖。
- SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。
- SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。
- SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API。
- SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。
综合来看,即轻量 兼容 多端 无需配置 无外部依赖 拥有简单易懂的API 安全
SQLiteDatabase和SQLiteOpenHelper
SQLiteDatabase是Android SDK中操作数据库的核心类之一。
使用SQLiteDatabase可以打开数据库,也可以对数据库进行操作。
然而为了数据库升级的需要以及使用更方便,往往使用SQLiteOpenHelper的子类来完成创建、打开数据库及各种数据库操作。
SQLiteOpenHelper是个抽象类,在该类中有如下两个抽象方法,SQLiteOpenHelper的子类必须实现这两个方法。
代码语言:javascript复制public abstract void onCreate(SQLiteDatabase db);
public abstract void onUpdate(SQLiteDatabase db,int oldVersion,int newVersion);
image.png
SQLiteOpenHelper中onCreate和onUpdate方法
SQLiteOpenHelper会自动检测数据库文件是否存在。
如果存在,会打开这个数据库,在这种情况下就不会调用onCreate()方法。
如果数据库文件不存在,SQLiteOpenHelper首先会创建一个数据库文件,然后打开这个数据库,最后调用onCreate()方法。
因此,onCreate()方法一般用来在新创建的数据库中建立表、视图等数据库组建。也就是说oncreate()方法在数据库文件第一次创建时调用。
先看看SQLiteOpenHelper类的构造方法再解释onUpdate()方法何时会被调用。
代码语言:javascript复制public SQLiteOpenHelper(Context context,String name,CursorFactory factory,int version);
其中name参数表示数据库文件名(不包括文件路径),SQLiteOpenHelper会根据这个文件名创建数据库文件。
version表示数据库的版本号。如果当前传入的数据库版本号比上次创建或升级的版本号高,SQLiteOpenHelper就会调用onUpdate()方法。
也就是说,当数据库第一次创建时会有一个初始的版本号。当需要对数据库中的表、视图等组建升级时可以增大版本号,再重新创建它们。
总结一下oncreate()和onUpdate()调用过程:
- 如果数据库文件不存在,SQLiteOpenHelper在自动创建数据库后会调用oncreate()方法,在该方法中一般需要创建表、视图等组件。在创建前数据库一般是空的,因此不需要先删除数据库中相关的组件。
- 如果数据库文件存在,并且当前版本号高于上次创建或升级的版本号,SQLiteOpenHelper会调用onUpdate()方法,调用该方法后会更新数据库的版本号。
相应的API介绍
方法名 | 作用 |
---|---|
onCreate() | 创建数据库 |
onUpgrade() | 升级数据库 |
close() | 关闭所有打开的数据库对象 |
execSQL() | 可进行增删改操作, 不能进行查询操作 |
query()、rawQuery() | 查询数据库 |
insert() | 插入数据 |
delete() | 删除数据 |
getWritableDatabase() | 创建或打开可以读/写的数据库,通过返回的SQLiteDatabase对象对数据库进行操作 |
getReadableDatabase() | 创建或打开可读的数据库,通过返回的SQLiteDatabase对象对数据库进行操作 |
使用getWritableDatabase和getReadableDatabase创建数据库默认的保存路径是在:/data/data/PACKAGE_NAME/databases 目录下.
如果想在其他目录创建数据库,需要使用 SQLiteDatabase.openOrCreateDatabase
函数。