sqlite3数据库

常用数据库

1.关系型数据库:将复杂的数据结构简化为二维表格形式(大型:Oracle、DB2

中型:MySql、SQLServer小型:Sqlite)

2.非关系型数据库:以键值对存储,且结构不固定 (JSON、Redis、MongoDB)

sqlite3:stu.db

优势:1.开源免费, c语言开发

2.代码量少,1万行左右,总大小10M以内

3.文件型数据库,可以移动

4.数据容量最大2T

一、sqlite相关命令(不区分大小写)

  1. .help 查看sqlite3支持的相关命令

  2. .quit/.q 退出sqlite3数据库

  3. .table 查看数据库中的所有表

  4. .schema tablename 查看tablename创建时的SQL语句(表的结构)

  5. .headers on/off 开启/关闭表头

  1. .mode column 以左对齐列宽显示数据
  1. .width 列宽1 列宽2 第一列宽度 第二列宽度 第三列宽度

  2. .schema 表名 查看表的结构

二、sqlite的SQL语句(每个sql语句后必须有一个;)

1.create table 创建表

create table 表名称(列名称1 数据类型,列名称2 数据类型,列名称3 数据类型,....);

INTEGER : int REAL:double float TEXT: char 字符串

NULL:值是一个 NULL值。

表不存在,则创建,存在不创建

create table if not exists 表名称(列名称1 数据类型,列名称2 数据类型,列名称3 数据类型,....);

2.insert into 插入表

INSERT INTO 表名称 VALUES(值1, 值2,....);

3.select 查表

SELECT * FROM 表名称;

SELECT 列名称 FROM 表名称;

SELECT *FROM 表名; 查看所有

SELECT *FROM 表名 WHERE 列名 关系运算符 值; 条件查找

关系运算符:> < = != and or

SELECT *FROM 表名 WHERE 列名 LIKE 值; 模糊查找

百分号(%)代表零个、一个或多个数字或字符。

下划线(_)代表一个单一的数字或字符。这些符号可以被组合使用。

SELECT *FROM 表名 ORDER BY 列名 ASC(升序)/DESC(降序);

4.删除

DELETE FROM 表名 WHERE 列名 关系运算符 值; 删除一行

DROP TABLE 表名; 删除表

5.修改

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

  1. 设置主键值自动增长列

create table 表名称(id INTEGER PRIMARY KEY AUTOINCREMENT, 类名称 数据类型, ...);

7.datetime 增加时间

datetime('now', '+8 hours');

select datetime('now', '+8 hours');查询当前东八区时间

三、sqlite3 提供的c/c++ API 接口

1.sqlite3_open

int sqlite3_open(const char *filename, sqlite3 **ppDb);

功能:打开一个数据库文件获得操作数据库文件的句柄,如果数据库存在,则打开;不存在,则创建

参数: filename:数据库文件路径

ppDb:存放句柄指针空间的首地址

返回值: 成功返回SQLITE_OK,失败:错误码

cs 复制代码
	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;
	}
	

2.sqlite3_errmsg

const char *sqlite3_errmsg(sqlite3*);

功能:获得出错原因

3.sqlite3_close

int sqlite3_close(sqlite3*);

功能:关闭数据库句柄,释放空

4.sqlite3_exec

int sqlite3_exec(sqlite3* pDb,const char *sql,nt (*callback)(void*,int,char**,char**), void *arg, char **errmsg;

功能:在数据库中执行SQL语句

参数: sqlite3*:数据库句柄

sql :SQL语句字符串首地址

callback:回调函数(只有select时使用)

void * :回调函数的传参(只有select时使用)

char **errmsg:出错信息存放空间首地址

返回值: 成功返回SQLITE_OK 0,失败:错误码

回调函数类型:

int fun(void* para,int n_column,char** column_value,char** column_name);

参数: para : sqlite3_exec传递的第四个参数

n_column :查询到数据的列数

column_value:查询结果每个字段的首地址集合

column_name :查询结果每个字段的字段名称首地址集合

注意: 1. 回调函数查询到几行数据就执行几次;

2.回调函数必须要返回0,否则sqlite3_exec调用失败

3.数据库中查出的数据均为字符串

cs 复制代码
int flag = 0;

int callback(void *arg, int column_cnt, char **column_value, char **column_name)
{
	if (0 == flag)
	{
		for (int i = 0; i < column_cnt; i++)
		{
			printf("%s ", column_name[i]);
		}
		printf("\n");
		flag = 1;
	}
	for (int i = 0; i < column_cnt; i++)
	{
		printf("%s ", column_value[i]);
	}
	printf("\n");

	return 0;
}
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 = "select name from class2;";
	
	ret = sqlite3_exec(pdb, sql, callback1, 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;
}

5.sqlite3_free

void sqlite3_free(void*);

功能:释放保存出错信息的空间

相关推荐
Omics Pro3 分钟前
研究证实AI虚拟细胞可用于药物靶点发现
数据库·人工智能·算法·机器学习·自然语言处理
好奇的菜鸟7 分钟前
GORM 入门(二):从 database/sql 平滑过渡到 GORM
数据库·sql
长春的KAKA20 分钟前
GitLab 项目页面报 500 错误的完整修复记录:PostgreSQL 数据库损坏、统计表缺失及数据库迁移
数据库·postgresql·gitlab
这个DBA有点耶33 分钟前
关系数据库管理系统选型指南:四步决策框架与主流产品技术路线对比
数据库·sql·程序人生·mysql·database·dba
jason.zeng@150220741 分钟前
(七)「固化 Rest 接口 + Text-to-SQL 灵活查询」双模式 Agent 架构教程
数据库·python·sql·ai·架构·langchain·ai编程
我不会起名字3221 小时前
MVCC 快照读为什么读不到刚提交的数据:ReadView 的 4 条可见性规则
数据库·mysql·innodb·mvcc·事务隔离
2501_933670792 小时前
2027届数据类专业投用户增长岗:A/B实验、指标和SQL准备思路
数据库·sql
用户337922545682 小时前
Sirchmunk 深度解析(一):一个无需向量数据库的自进化搜索引擎架构设计
数据库
染指11102 小时前
139.Agent-多Agent框架-Skills渐进式加载文档
数据库·人工智能·langchain·agents
骑着蜗牛撵大象3272 小时前
SpringBoot+Vue3 企业智能体侧挂架构:独立服务、独立数据库与主线零侵入落地
数据库·spring boot·架构·vue·springboot·事件驱动·服务拆分