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*);

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

相关推荐
pokemon..1 小时前
MySQL主从复制与读写分离
数据库·mysql
码农鑫哥的日常1 小时前
MySQL高可用配置及故障切换
数据库·mysql
longlongqin1 小时前
redis的 stream数据类型实现 消息队列?
数据库·redis·缓存
wrx繁星点点2 小时前
多个线程同时写入一个共享变量,会发生什么问题?如何解决?
java·开发语言·数据库
鲨鱼辣椒ii2 小时前
sql中索引查看是否生效
数据库·sql
leidata2 小时前
MySQL系列—10.Innodb行格式
数据库·mysql
阿维的博客日记3 小时前
聚簇索引和二级索引
数据库·聚簇索引·二级索引
璇嘟嘟3 小时前
springboot-创建连接池
数据库
计算机程序设计开发3 小时前
小说阅读网站登录注册搜索小说查看评论前后台管理计算机毕业设计/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序
数据库·vue.js·spring boot·java-ee·课程设计·计算机毕业设计·数据库管理系统
赵利伟@3 小时前
springboot对数据库进行备份+对一个文件夹内的文件按时间排序,只保留最近的8个文件
数据库