最近一段时间,在学 Flutter,打算把自己写过的项目 HOO 用 Flutter 实现。
里面用到了一些数据库的知识,正好这周我在组内也是分享的SQLite,所以我们就来聊一聊 SQLite 的基础,以及怎么在 Flutter 中去使用数据库。
目录
一、SQLite 基础
1. SQLite 定义
SQLite 是一个进程内的库,实现了自给自足、无服务器的、零配置的、事务性的SQL数据库引擎。
2. SQLite 特点
从上面的定义中,我们已经看到 SQLite 的一些特点,我在这里做一下详细的解释:
- 嵌入式数据库:与MySQL、Oracle 这类数据库服务器相比,SQLite 无需单独的服务器进程或者操作系统,并且可以和应用的进程处在同一个进程。
- 无需配置:不需要进行一大堆的配置。
- 存储在磁盘文件:可以跨平台的存储在一个磁盘文件中。
- 轻量级:完全配置时小于400kb,省略可选功能时低于250kb。
- 无需外部依赖。
- 跨平台:可以在 Unix 和 Windows 中运行。
所以,Android 和 ios 设备一般都会采用 SQLite 作为应用的本地数据库。
二、SQL 语法
SQL 语法是比较重要的,因为无论是什么基于 SQLite 的第三方库,它们在进行数据库操作的时候,最后都会转化为 SQL 语句,这个时候即使遇到 bug,我们也能够迎刃而解。
推荐看一下基础教程:SQLite教程
数据库的语言学习可以分为三个部分:
1. 创建数据库
在进行学习基础语言之前,我们需要了解一下如何创建一个数据库,它通常对应着一个 .db
文件。
如果是在项目中,我们通常会在代码中进行配置,在进入 App 中就会生成对应的 .db
文件。
如果是在电脑中,我们以 mac 为例,需要在系统中安装 SQLite,成功以后,输入命令:
sqlite3 数据库名
就可以成功创建一个数据库。
2. 数据库定义语言
先说一下我们的目标,要建一个用户收藏商品的关系,思考一下,我们要建立几张表?
没错需要建立三张表,分别是 User
(用户表)、Goods
(商品表) 和 Fav_Goods
(收藏表)。User
和 Goods
是独立的表,Fav_Goods
则要存放 其他两张表的主键。
2.1 CREATE
数据库在之前已经建立完,下一步就是建立表,对应建立表的语法就是 CREATE TABLE
,有几个点需要注意。
基础的存储类型只有五种:
存储类型 | 解释 |
---|---|
NULL |
值是一个 NULL 值 |
INTEGER |
值是一个带符号的整数,值支持 1,2,3,4,6,8个字节 |
REAL |
浮点数 |
TEXT |
文本字符串 |
BLOB |
二进制大对象,用来存储图片,视频等 |
一些常用的关键字:
关键字 | 解释 |
---|---|
PRIMARY KEY |
主键 |
AUROINCREMENT |
主键自增长,一般需要将主键设置为 INTEGER |
FOREIGN KEY |
外键 |
详细的 USER
表、GOODS
表和 FAV_GOODS
表创建语句:
# main 对应数据库名称
CREATE TABLE main.USER(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
account TEXT,
pwd TEXT,
age INT
);
CREATE TABLE main.GOODS(
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
price REAL,
category TEXT,
brand TEXT
);
CREATE TABLE main.FAV_GOODS(
id INTEGER PRIMARY KEY AUTOINCREMENT,
date STRING,
user_id