当前位置:网站首页>嵌入式数据库--SQLite
嵌入式数据库--SQLite
2022-07-28 02:39:00 【一战成硕冲冲冲】
嵌入式数据库--SQLite
数据库笔记
1.数据库文件类似于一个EXCEL文件
在数据库文件中有多张表(tables),类似于EXCEL中的SHEET。
在每张表中,存放有类似于EXCEL中的2维表格的数据。
每张表中的每一列,叫一个字段。
每张表中的每一行,叫一条记录。
2.命令行(以.开头的命令)
- .tables 查看当前数据库文件下的表
- .schema 查看当前数据库文件下的表结构(表的字段和类型)
3.基本的SQL语句(是所有数据库都遵循的一个语法规则, 以分号结束的命令)
3.1 创建表格,需要知道表名称,字段名称, 每个字段的类型
create table 表名称(字段名称1 字段1类型 , 字段名称2 字段2类型 , 。。。);
EG:create table student(id text , name text , age text , score text);
create table user(id text ,name text, pwd text);
3.2 插入数据
INSERT INTO 表名称 VALUES (value1, value2, value3, ...);
EG: SERT INTO student VALUES("1000", "zhangsan", "18", "90");
3.3 查看某个表格中的数据
SELECT * FROM 表名称 (WHERE 条件);
EG:SELECT * FROM student;
SELECT * FROM student WHERE id = "1000";
SELECT name,score FROM student WHERE id = "1000";
3.4 删除表格(类似于EXCEL中把整个SHEET都删除)
DROP TABLE 表名称;
3.5 删除表中的数据
DELETE FROM 表名称 (WHERE 条件);
EG:DELETE FROM student WHERE name ="zhangsan";
3.6 修改表中的数据
UPDATE 表名称 SET 字段1 = "" AND 字段2 = "" ...(WHERE ) ;
EG: UPDATE student SET score =“80” WHERE name ="zhangsan";
4 .API的使用
sqlite3_open
第一个参数数据库的名字, 第2个参数sqlite3 * db 表示数据库的句柄;
int sqlite3_exec(); 执行一个SQL语句。
sqlite3*, /* An open database */
const char *sql, /* SQL to be evaluated SQL语句*/
int (*callback)(void*,int,char**,char**), /* Callback function 回调函数*/
void *, /* 1st argument to callback 回调函数的参数*/
char **errmsg /* Error msg written here 错误信息*/
/*
callback会自动被调用多次,每有一条记录,callback会自动被调用一次。
notused :回调函数的传入参数
colNum:这条记录有多少列
colContent:每一列的具体内容
colName:每一列的名字
*/
eg:
int main(int argc, char *argv[])
{
QocoreApplication a(argc,argv);
sqlite3 * pdb;
int res = sqlite3_open( "d : //test.db",&pdb);
if(res != sQLITE_OK)
{
printf( "open db err\n");
return -1;
}
printf ( "open db success\n" );
char *errMsg;
char sql[100]= {0} ;
strcpy(sql,"CREATE TABLE user(id TEXT ,name TEXT,pwd TEXT); ");
res = sqlite3_exec(pdb, sql,NULL,NULL,&errMsg);
if(res != SQLITE_OK)
{
printf( "sqlite3_exec db err errMsg=[%s]\n", errMsg);
return -1;
}
printf( "sqlite3_exec db success\n" );
sqlite3_close;
return a.exec();
}
callback
int callback(void* notused, int colNum, char** colContent, char**colName )
~~~
eg:
/ / callback函数是当查询的SQL语句有返回的时候,自动被调用。
//每当有一条记录,该函数被调用一次
// notused :sqlite3_exec传入的参数
// colNum:这条记录的列数
// colContent:字符串数组,为每一列的内容
// colName:这条记录每一列的列名称
int firstFlg = 0;
int callback(void* notused,int colNum,char** colContent,char**colName )
{
if( ! firstFlg)
{
{
//打印列名
for ( int i = 0;i <colNo;i++){
printf("%s ",colName[i]);
}
printf("\n");
firstFlg++;
for(int i = 0;i < colNum;i++)
{
printf("%s ", colContent[i]);
}
}
strcpy(sql,"SELECT * FROM user; ");
firstFlg = 0;
res = sqlite3_exec(pdb, sql,NULL,NULL,&errMsg);
if(res != SQLITE_OK)
{
printf( "sqlite3_exec dr err errMsg=[%s]\n",errMsg);
return -1;
}
printf("sqlite3_exec db success n" );
sqlite3_get_table
sqlite3_get_table, 执行一个查询的SQL语句,并且返回查询的所有结果。
sqlite3 *db, /* An open database */
const char *zSql, /* SQL to be evaluated */
char ***pazResult, /* Results of the query */
int *pnRow, /* Number of result rows written here */
int *pnColumn, /* Number of result columns written here */
char **pzErrmsg /* Error msg written here */
第1个参数不再多说,看前面的例子。
第2个参数是sql 语句,跟sqlite3_exec 里的sql 是一样的。是一个很普通的以\0结尾的char*字符串。
第3个参数是查询结果,它依然一维数组(不要以为是二维数组,更不要以为是三维数组)。
它内存布局是:字段名称,后面是紧接着是每个字段的值。下面用例子来说事。
第4个参数是查询出多少条记录(即查出多少行,不包括字段名那行)。
第5个参数是多少个字段(多少列)。
第6个参数是错误信息,跟前面一样,这里不多说了。
pazResult存放的是结果集,存放的顺序是表头每一个字段,然后每一条记录的每一个字段来存放
EG:数据库中结果集如下:
Name | Age
-----------------------
Alice | 43
Bob | 28
Cindy | 21
那么存放的格式如下
pazResult[0] = "Name";pazResult[1] = "Age";
pazResult[2] = "Alice";pazResult[3] = "43";
pazResult[4] = "Bob";pazResult[5] = "28";
pazResult[6] = "Cindy";pazResult[7] = "21";
sqlite3_close, 关闭数据库
//lsqlite3 *db打开的数据库句柄
//const char *zSql查询的SQL语句
//char ***pazResult所有的结果集//
int *pnRow返回的结果中有多少行数据
//int *pncolumn返回的结果中有多少列数据char **pazResult;
int row = 0;
int col = 0;
res =sqlite3_get_table(pdb,sql,&pazResult,&row,&col,&errMsg);
if(res != SQLITE_OK)
{
printf( "sqlite3_exec db err errMsg=[%s]\n",errMsg);
return -l;
}
for(int j = 0; j <= row;j++)
{
for (int i = 0; i < col;i++)
{
printf("%-20s",pazResult[j*col+i]);
}
printf("\n");
}
sqlite3_free_table(pazResult);
sqlite3_close(pdb);
5.sqlite3 在VS下的环境配置
- 把头文件(sqlite3.h)和库文件(sqlite3.lib)放到工程的源代码文件夹。
- 在菜单的项目-》属性-》配置属性-》连接器-》常规-》附加库目录-》加入sqlite3.lib所在的路径
- 在菜单的项目-》属性-》配置属性-》连接器-》输入-》添加依赖项-》加入sqlite3.lib(告诉编译器需要加载库的名称)
- 在菜单的项目-》属性-》配置属性-》连接器-》输入->忽略特定默认*
- 加入LIBCD.lib
- 在源文件中加入#include “sqlite3.h”, #pragma comment(lib,“sqlite3.lib”)
6.sqlite3 在QT下的环境配置
- 把头文件(sqlite3.h)和库文件(libsqlite3.a)放到工程的源代码文件夹。
- 在QT的工程文件中加入 LIBS += -L D:\workspace\20220721\ -lsqlite3,把libsqlite3.a加入到工程中()
边栏推荐
- [2022 Niuke multi school 2 K link with bracket sequence I] bracket linear DP
- Kubernetes-----介绍
- CAD creation group is not combined?
- 随机森林与集成方法学习笔记
- Pytorch 相关-梯度回传
- [nature of class (in Objective-C language)]
- 四、固态硬盘存储技术的分析(论文)
- 4、 Analysis of solid state disk storage technology (paper)
- Data Lake: flume, a massive log collection engine
- Blue Bridge Cup: the ninth - "lantern controller"
猜你喜欢

基于JSP&Servlet实现的众筹平台系统

Docker advanced -redis cluster configuration in docker container

数据湖:数据库数据迁移工具Sqoop

方案分享 | 高手云集 共同探索重口音AI语音识别

Summary of static blog building tools

Embedded sharing collection 22

QT official example: Fridge Magnets example

OA项目之我的审批(会议查询&会议签字)

stm32F407-------DSP学习

Development and design logic of rtsp/onvif protocol easynvr video platform one click upgrade scheme
随机推荐
JVM memory layout detailed, illustrated, well written!
Redis持久化机制
图像去噪综合比较研究
Original title of Blue Bridge Cup
What kind of job is social phobia suitable for? Can you do we media?
【类的本质(Objective-C语言中)】
【红队】ATT&CK - 文件隐藏
Unexpected harvest of epic distributed resources, from basic to advanced are full of dry goods, big guys are strong!
Data Lake: flume, a massive log collection engine
对象数组转成strin再进行,隔开的字符串,包括赛选某个字段的子,或者求和,
【2022牛客多校2 K Link with Bracket Sequence I】括号线性dp
[email protected]注解使用
数据湖(十七):Flink与Iceberg整合DataStream API操作
WEB安全基础 - - -命令执行漏洞
Random forest and integration method learning notes
阿里云国际版邮件服务套餐购买流程
Why is it that when logging in, you clearly use the account information already in the database, but still display "user does not exist"?
[QNX hypervisor 2.2 user manual]9.10 pass
stm32F407-------FPU学习
行业洞察 | 语音识别真的超过人耳朵了吗?