SQLite3 数据库

一、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,失败返回错误码。
cs 复制代码
//打开本目录下的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。

注意事项:

  1. 每找到一行,回调被触发一次。
  2. 回调函数必须返回 0。

SQLite3思维导图:

相关推荐
当青春邂逅吉米多维奇2 分钟前
C#图解教程(第5版) 同步方法
开发语言·c#
有想法的py工程师11 分钟前
PostgreSQL 字符集双重转义击穿 磁盘 I/O
数据库·postgresql
头发还在的女程序员15 分钟前
【无标题】
网络·数据库·短剧小程序·短剧系统·海外短剧·短剧后台
波力海苔夹心脆67517 分钟前
C# 机器视觉实战:单相机引导机械手精准贴合,从拍照、偏差计算(平移+旋转)到坐标补偿全解
开发语言·经验分享·数码相机·c#·视觉检测·.net
千千寰宇18 分钟前
[数据库系统] 数据库系统的设计原理研究
数据结构·数据库·database-opengemini/influxdb·database-dament/达梦
麦壳饼34 分钟前
SonnetDB SQL 分页查询:LIMIT/OFFSET 与 FETCH 语法
数据库·sonnetdb
是jin奥38 分钟前
Ubuntu 访问 Windows 共享目录
linux·运维·ubuntu
Gauss松鼠会39 分钟前
【GaussDB】破除gaussdb ugin索引支持中文模糊查询的迷思-字符序
java·运维·服务器·网络·数据库·gaussdb·经验总结
星恒随风1 小时前
Linux基础IO万字详解:从文件描述符fd到重定向、FILE缓冲机制及MiniShell升级
linux·运维·笔记·学习·状态模式
l1t1 小时前
DeepSeek总结的PostgreSQL因选择而宽松,因偶然而永久
数据库·postgresql