Android 一篇很啰嗦的SQLite入门知识总结

这篇博客详细介绍了Android中SQLite数据库的基础知识,包括SQLite的特点、数据类型、调试工具、SQLiteDatabase与SQLiteOpenHelper的使用,以及数据库的创建、操作和替代者。作者强调了SQLiteOpenHelper在数据库创建与版本管理中的作用,同时提供了不同方式创建数据库的示例,还涵盖了增删改查的基本操作。
摘要由CSDN通过智能技术生成

版权声明:本文为博主原创文章,未经博主允许不得转载
Github:github.com/AnliaLee
大家要是看到有错误的地方或者有啥好的建议,欢迎留言评论

前言

博主这两天心血来潮准备回顾下SQLite的知识,然而网上查找资料的过程是痛苦的,因为很少有一篇博客能把SQLite的入门知识讲全的,得好几篇合着来看才行,因此我的浏览器选项卡基本上是这样的

正所谓自己动手丰衣足食,我不想以后忘了还要这样再来一次,所以决定自己重新总结一番,集众家之长来篇大杂烩。本篇博客内容很多,为了尽量涵盖到所有知识不得已写得很啰嗦,大家可以看着目录按需跳着看,如果有什么遗漏或写错的地方欢迎大家指出来~


什么是SQLite

关于SQLite的简介网上有很多很多,其中看到一篇博客总结得很好,遂直接引用啦~以下摘自Android黄金篇-SQLite数据库

SQLite介绍

SQLite是一款轻量级的关系型数据库,它的运算速度非常快,占用资源很少,通常只需要几百K的内存就足够了,因而特别适合在移动设备上使用。

SQLite特点

  • 轻量级

    使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。
  • 独立性

    SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。
  • 隔离性

    SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。
  • 跨平台

    SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统也是能够运行,比如:Android和IOS。
  • 多语言接口

    SQLite 数据库支持多语言编程接口。
  • 安全性

    SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据。
  • 弱类型的字段

    同一列中的数据可以是不同类型

SQLite数据类型

SQLite具有以下五种常用的数据类型:

存储类 存储类
NULL 值是一个 NULL 值
INTEGER 值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中
REAL 值是一个浮点值,存储为 8 字节的 IEEE 浮点数字
TEXT 值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储
BLOB 值是一个 blob 数据,完全根据它的输入存储

调试工具

调试SQLite数据库推荐使用SQLite Expert(Personal),简单易用

当然你也可以直接用adb shell查看数据库,这个就看个人喜爱了


SQLiteDatabase与SQLiteOpenHelper

在讲如何使用SQLite数据库之前,有必要介绍一下这两个重要的类:SQLiteDatabaseSQLiteOpenHelper,这是SQLite数据库API中最基础的两个类

SQLiteDatabase

在Android中,SQLite数据库的使用始于SQLiteDatabase这个类(SQLiteOpenHelper也是基于SQLiteDatabase来进行数据库创建和版本管理,之后会详细介绍),我们可以看下它的内部方法(未截全)

可以发现insertquery等熟悉的字眼,这些方法都是已经封装好的,我们只需要传入适当的参数即可完成诸如插入、更新、查询等操作。当然SQLiteDatabase也提供了直接执行SQL语句的方法,如
* execSQL
可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句
* rawQuery
用于执行select语句

总结来说,我们可以将SQLiteDatabase看作是一个数据库对象,通过调用其中的方法来创建、删除、执行SQL命令,以及执行其他常见的数据库管理任务。我们会在之后的章节中详细讲述如何使用SQLiteDatabase一步步搭建我们的本地数据库

SQLiteOpenHelper

SQLiteOpenHelperSQLiteDatabase的辅助类,通过对SQLiteDatabase内部方法的封装简化了数据库创建与版本管理的操作。它是一个抽象类,一般情况下,我们需要继承并重写这两个父类方法:
* onCreate

在初次生成数据库时才会被调用,我们一般重写onCreate生成数据库表结构并添加一些应用使用到的初始化数据
* onUpgrade

当数据库版本有更新时会调用这个方法,我们一般会在这执行数据库更新的操作,例如字段更新、表的增加与删除等

此外父类方法中还有onConfigureonDowngradeonOpen,一般项目中很少用到它们,如果大家需要进一步了解可以看下这篇博客,这里就不赘述了

那么SQLiteOpenHelperSQLiteDatabase是如何关联起来的呢?SQLiteOpenHelper中提供了getWritableDatabasegetReadableDatabase方法,其最终都调用了getDatabaseLocked,并在第一次调用(或数据库版本更新)时执行我们之前在onCreateonUpgrade等方法中重写的数据库操作,这两个方法的区别在于
* getWritableDatabase

打开一个可 读/写 的数据库,如果数据库不存在,则会自动创建一个数据库,最终返回SQLiteDatabase对象
* getReadableDatabase

打开一个可 的数据库,其他同上


创建数据库

一些实操之前要知道的东西

一般来说,创建SQLite数据库的方法有三,我们按照使用频率从高到低的顺序列出这三种方法
* 继承SQLiteOpenHelper,调用getWritableDatabase / getReadableDatabase打开或创建数据库(推荐初学者使用)
* 调用SQLiteDatabase.openOrCreateDatabase打开或创建数据库
* 调用Context.openOrCreateDatabase打开或创建数据库

它们最终都是要调用SQLiteDatabase.openDatabase方法,下图可以简单地概括它们的调用关系

那么我们不妨看下openDatabase干了啥

public static SQLiteDatabase openDatabase(String path, CursorFactory factory, int flags,
        DatabaseErrorHandler errorHandler) {
    SQLiteDatabase db = new SQLiteDatabase(path, flags, factory, errorHandler);
    db.open();//继续执行打开或创建数据库的操作
    return db;
}

解释一下各个参数
* String path

数据库文件路径
* CursorFactory factory

用于构造自定义的Cursor子类对象,在执行查询操作时返回,若传入 null 则使用默认的factory构造Cursor
* int flags

用于控制数据库的访问模式,可传入的参数有
* CREATE_IF_NECESSARY:当数据库不存在时创建该数据库文件
* ENABLE_WRITE_AHEAD_LOGGING:绕过数据库的锁机制,以多线程操作数据库的方式进行读写
* NO_LOCALIZED_COLLATORS:打开数据库时,不根据本地化语言对数据库进行排序
* OPEN_READONLY:以只读方式打开数据库
* OPEN_READWRITE:以读写方式打开数据库
* DatabaseErrorHandler errorH

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值