Android之SQLite使用

2021-12-06 17:47:43 浏览数 (1)

SQLite

SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。

它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件.

image.png

优势
  1. 不需要一个单独的服务器进程或操作的系统(无服务器的)。
  2. SQLite 不需要配置,这意味着不需要安装或管理。
  3. 一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。
  4. SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。
  5. SQLite 是自给自足的,这意味着不需要任何外部的依赖。
  6. SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。
  7. SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。
  8. SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API。
  9. 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()调用过程:

  1. 如果数据库文件不存在,SQLiteOpenHelper在自动创建数据库后会调用oncreate()方法,在该方法中一般需要创建表、视图等组件。在创建前数据库一般是空的,因此不需要先删除数据库中相关的组件。
  2. 如果数据库文件存在,并且当前版本号高于上次创建或升级的版本号,SQLiteOpenHelper会调用onUpdate()方法,调用该方法后会更新数据库的版本号。

相应的API介绍

方法名

作用

onCreate()

创建数据库

onUpgrade()

升级数据库

close()

关闭所有打开的数据库对象

execSQL()

可进行增删改操作, 不能进行查询操作

query()、rawQuery()

查询数据库

insert()

插入数据

delete()

删除数据

getWritableDatabase()

创建或打开可以读/写的数据库,通过返回的SQLiteDatabase对象对数据库进行操作

getReadableDatabase()

创建或打开可读的数据库,通过返回的SQLiteDatabase对象对数据库进行操作

使用getWritableDatabase和getReadableDatabase创建数据库默认的保存路径是在:/data/data/PACKAGE_NAME/databases 目录下.

如果想在其他目录创建数据库,需要使用 SQLiteDatabase.openOrCreateDatabase函数。

0 人点赞