一、SQLite3 命令
1. 基本命令
.tables
:用于查看数据库中的表。.headers on/off
:开启或者关闭表头,方便查看表结构。.mode column
:使列对齐,增强数据的可读性。.width 列宽1 列宽2
:设置每一列的列宽,可根据数据内容进行调整。.schema 表名
:查看指定表的结构,包括列名、数据类型等信息。
二、SQLite3 的 SQL 语句
1. 创建表
使用 create table
语句创建表,语法为 create table 表名(列名1 数据类型 ,列名2 数据类型, 类名3 数据类型)
。例如:create table students(id INTEGER, name TEXT, age INTEGER);
2. 插入数据
通过 insert into
语句向表中插入数据,语法为 insert into 表名 values(值1, 值2, 值3)
。例如:insert into students values(1, 'Tom', 18);
3. 查询
- 可以使用
select 列名1,列名2 from 表名
来查询指定列的数据,或者使用select * from 表名
查询表中的所有数据。 - 条件查找:使用
select * from 表名 where 列 关系运算符 值
,关系运算符包括>、<、=、!=、>=、<=
等。例如:select * from students where age > 18;
- 模糊匹配:使用
like
进行模糊匹配,%
可以通配多个字符,_
只能通配一个字符。例如:select * from students where name like '%o%';
- 排序:使用
order by
进行排序,ASC
为升序排列,DESC
为降序排列。例如:select * from students order by age DESC;
4. 删除一行
使用 delect from 表名 where 列名 关系运算符 值
删除满足条件的一行数据。例如:delect from students where id = 1;
5. 删除一张表
使用 drop 表名
删除整张表。例如:drop table students;
6. 修改
使用 update 表名 set 列名=新值 where 列=值
修改表中的数据。例如:update students set age = 19 where name = 'Tom';
7. 设置主键值自动增长列
- 主键值自动增长列的数据类型必须是
INTEGER
。 - 语法为
类名 INTEGER PRIMARY KEY AUTOINCREMENT
。例如:create table students(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER);
8. 多表联查
- 内连接:
INNER JOIN
。 - 外连接:
LEFT OUTER JOIN
。
三、SQLite3 提供的 C/C++ API 接口
1. sqlite3_open
功能是打开数据库,如果不存在,则创建。
参数:
filename
:数据库名称。ppDb
:保存数据库句柄的地址。
返回值:成功返回SQLITE_OK
,失败返回错误码。
2. sqlite3_exec
功能是执行 SQL 语句。
参数:
pdb
:数据库句柄。sql
:要执行的 SQL 语句的首地址。callback
:当执行select
语句时使用到的回调函数。arg
:当执行select
语句时,传递给回调函数的第一个参数。errmsg
:存储错误信息的地址。
返回值:成功返回SQLITE_OK
,失败返回错误码。
//打开本目录下的stu.db文件,创建class4列表并添加数据
int main(int argc, const char *argv[])
{sqlite3 *pdb;int ret = sqlite3_open("./stu.db", &pdb); if (ret != SQLITE_OK){fprintf(stderr,"sqlite3_open fail : %s\n", sqlite3_errmsg(pdb));return -1;}char *sql = "create table if not exists class4(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, score REAL);";ret = sqlite3_exec(pdb, sql, NULL, NULL, NULL);if (ret != SQLITE_OK){fprintf(stderr, "sqlite3_exec fail : %s\n", sqlite3_errmsg(pdb));sqlite3_close(pdb);return -1;}sql = "insert into class4 values(NULL, \"zhangsan\", 99);";ret = sqlite3_exec(pdb, sql, NULL, NULL, NULL);if (ret != SQLITE_OK){fprintf(stderr, "sqlite3_exec fail : %s\n", sqlite3_errmsg(pdb));sqlite3_close(pdb);return -1;}sqlite3_close(pdb);return 0;
}
3. 回调函数
int (*callback)(void*,int column_cnt,char**column_value,char**column_name)
,在使用 sqlite3_exec
执行 select
语句时,每查找到一条数据,则调用一次回调。
参数:
arg
:sqlite3_exec
传递的第 4 个参数。column_cnt
:查找到的数据的列数。column_value
:查找到的一行数据的每一列值的地址的集合。column_name
:查找到的一行数据的每一列列名的地址的集合。
返回值:必须返回 0。
注意事项:
- 每找到一行,回调被触发一次。
- 回调函数必须返回 0。
SQLite3思维导图: