Android之SQLite使用
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的子类必须实现这两个方法。
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()方法何时会被调用。
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
函数。
相关文章
- 阿里图标的应用教程
- onchange()事件的应用
- 剽窃开源项目赚钱,连原开发者名字都没删干净,反而有勇气质疑正主……
- 如何在代码中应用设计模式?
- django框架之drf:1、web应用模式,API接口,接口测试工具
- 在微信小程序中使用async/await
- 聊聊微信小程序自动化如何来做?
- 图解堆结构、堆排序及堆的应用
- PWA对比原生应用:谁更胜一筹?
- 多端开发之uniapp开发app
- “教”你练就量子APP 国内首个量子程序设计平台发布
- 中科院计算所发布国产编程语言“木兰”
- 谷歌警告美国最高法院:甲骨文有可能成为垄断势力
- 2020年的8大科技热点:华为与台积电、5G生死斗、RISC-V与 Arm对决、存储发烧
- 华为印度高管警告谷歌:我们几乎已经准备好替换你
- Android内存优化—内存优化总结
- Html5开发常见的7个框架
- 已获45000个APP支持!华为开发HMS替代谷歌GMS
- Flutter Interact 2019:首个面向环境计算打造的 UI 平台
- 测试行业大变革,人工智能引领下一代测试