嵌入式数据库

常用数据库

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

  • 大型:Oracle、DB2
  • 中型:MySql、SQLServer
  • 小型:Sqlite

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

sqlite3:stu.db

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

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

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

           4.数据容量最大2T

一、sqlite相关命令

.tables查看数据库中的表
.headers on/off开启或关闭表头
.mode column列对齐
.width 列宽1 列宽2设置每一列的列宽
.schema 表名查看表的结构

二、sqlite的SQL语句

每各SQL语句之后必须有一个

INTEGER整形
REAL浮点型
TEXT文本类型
NULL

1.create table 创建表

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

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 列名称 = 某值

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

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

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

(2)参数:     filename:数据库文件路径 
            ppDb:存放句柄指针空间的首地址

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

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,int (*callback)(void*,int,char**,char**), void *arg,  char **errmsg;

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

(2)参数:     sqlite3*:数据库句柄 
            sql     :SQL语句字符串首地址
            callback:回调函数(只有select时使用)
            void *  :回调函数的传参(只有select时使用)
            char **errmsg:出错信息存放空间首地址

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

回调函数类型:

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

(1)功能:在使用sqlite3_exec函数时,每查找到一条数据,调用一次回调。

(2)参数:     para         : sqlite3_exec传递的第四个参数
            n_column    :查询到数据的列数
            column_value:查询结果每个字段的首地址集合
            column_name :查询结果每个字段的字段名称首地址集合

(3)返回值:0

注意: 1. 回调函数查询到几行数据就执行几次;
            2.回调函数必须要返回0,否则sqlite3_exec调用失败
            3.数据库中查出的数据均为字符串

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

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

            

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值