SQLite3数据库连接查询(c++篇)
简介
SQLite3作为一个轻量级数据库引擎,拥有无服务器,无需外部依赖,可夸平台等特性。
将SQLite与项目结合
1,将源码文件
导入到项目代码中:
由于SQLite是开源的,所以大家可以自行前往开源社区下载源码,或者在我的上传资源里下载;
sqlite3.c
sqlite3.h
2,连接数据库
函数:int sqlite3_open(const char *zFilename,sqlite3 **ppDb)
功能:打开SQLite数据库
参数:
zFilename :数据库名称(包含路径)
ppDb :指向sqlite句柄的指针,后面对数据库所有的操作都要依赖这个句柄
返回值:成功返回0,失败返回错误码(非零)
void OpenDB()
{sqlite3* pSQLite = NULL; std::string strPath = "SI.db"; //数据库存储路径 int result = sqlite3_open(strPath .c_str(), &pSQLite); // 根据路径打开数据库连接。如果数据库不存在,则创建。 if (result == SQLITE_OK){std::clog << "数据库连接成功"<<endl;}else {std::clog << "数据库连接失败"<<endl;}
}
3,查询数据库-方法1
函数:int sqlite3_get_table(sqlite3 db, const char sql, charresultp, intnrow, int ncolumn, char* errmsg);
功能:执行SQL操作-- 不使用回调函数
参数: db :数据库句柄 sql :SQL语句
resultp :用来指向sql执行结果的指针
nrow:满足 条件的记录的数目
ncolumn :每条记录包含的字段数目
errmsg :错误信息指针的地址
返回值 :成功返回0,失败返回错误码(非零)
void QueryDB(string strSQL)
{int iRt = 0; //执行结果,正确返回0,错误返回非零值char * zErrMsg = NULL; //错误信息指针的地址char ** pResult = NULL; //用来指向sql执行结果的指针int nrow = 0; //满足条件的记录数目int ncolumn = 0; //每条记录包含的字段数据iRt = sqlite3_get_table(m_pSQLite, strSQL.c_str(), &pResult, &nrow, &ncolumn, &zErrMsg);if (iRt != SQLITE_OK){printf("执行sql语句失败\n");return -1;} int iIndex = ncolumn;for (int i = 0; i < nrow; i++){for (int j = 0; j < ncolumn; j++){printf("%-8s : %-8s\n", pResult[j], pResult[iIndex]);//第j行,第iIndex列数据;iIndex++;}printf("***************************\n");}sqlite3_free_table(pResult); //释放查询结果指针
}
4,查询数据库-方法2
函数:int sqlite3_exec(sqlite3 *db, const char *sql, sqlite3_callback callback, void *, char **errmsg);
功能:执行SQL操作 –使用回调函数
参数:
db :数据库句柄
sql :SQL语句,就是我们前面两章用于操作表的增删改查语句
callback:回调函数,每返回一条记录,则调用一次回调函数
errmsg :错误信息指针的地址 返回值:成功返回0,失败返回错误码
返回值:成功返回0,失败返回错误码
//回调函数
int callback(void *para, int f_num, char **f_val, char **f_name)
{for (int i = 0; i < f_num; i++){printf("%-8s", f_val[i]);}printf("\n");return 0;
}void QueryDB_1(string strSQL)
{int iRt = 0; //执行结果,正确返回0,错误返回非零值char * zErrMsg = NULL; //错误信息指针的地址char ** pResult = NULL; //用来指向sql执行结果的指针int nrow = 0; //满足条件的记录数目int ncolumn = 0; //每条记录包含的字段数据iRt = sqlite3_exec(m_pSQLite, strSQL.c_str(), &callback, NULL, &zErrMsg);if (iRt != SQLITE_OK){printf("执行sql语句失败\n");}printf("执行sql语句成功\n");
}
5,断开数据库连接
函数:int sqlite3_close(sqlite3 *db)
功能:执行SQL操作 –使用回调函数
参数:
db :数据库句柄
返回值:成功返回0,失败返回错误码
void CloseDB()
{int iRt = sqlite3_close(m_pSQLite);if(iRt != SQLITE_OK){printf("数据库连接断开失败\n");}printf("数据库连接断开成功\n");
}
SQLite3数据库连接查询(c++篇)相关推荐
- mormot数据库连接+查询+序列为JSON
mormot数据库连接+查询+序列为JSON uses SynDB,SynCommons, SynDBRemote, SynOleDB, SynDBMidasVCL, mORMotMidasVCL p ...
- 庖丁解牛|图解 MySQL 8.0 优化器查询转换篇
简介: 本篇介绍子查询.分析表和JOIN的复杂转换过程 一 背景和架构 在<庖丁解牛-图解MySQL 8.0优化器查询解析篇>一文中我们重点介绍了MySQL最新版本8.0.25关于SQL ...
- mongodb模糊查询_我叫Mongo,收了「查询基础篇」,值得你拥有
这是mongo第二篇「查询基础篇」,后续会连续更新6篇 mongodb的文章总结上会有一系列的文章,顺序是先学会怎么用,在学会怎么用好,戒急戒躁,循序渐进,跟着我一起来探索交流. 通过上一篇基础篇的介 ...
- 庖丁解牛-图解MySQL 8.0优化器查询转换篇
简介: 在<庖丁解牛-图解MySQL 8.0优化器查询解析篇>一文中我们重点介绍了MySQL最新版本8.0.25关于SQL基本元素表.列.函数.聚合.分组.排序等元素的解析.设置和转换过程 ...
- 第6篇:SELECT查询基础篇
第6篇:SELECT查询基础篇 DQL(Data QueryLanguage):数据查询语言,从数据库中获取数据的,按照DQL的语法给数据库发送一条指令,数据库按照需要返回数据 查询常量 SELECT ...
- sqlite3 select查询一列_Python成为专业人士笔记–Sqlite3 模块
"专业人士笔记"系列目录: 创帆云:Python成为专业人士笔记--强烈建议收藏!每日持续更新!zhuanlan.zhihu.com Sqlite3 -一个不需要独立服务器进程的 ...
- 庖丁解牛-图解MySQL 8.0优化器查询解析篇
简介:本文重点介绍了优化器的基于规则的其中一部分优化,更多的偏重于SQL中的基本操作符 一 背景和架构 我们都知道,利用编写程序来动态实现我们应用所需要的逻辑,从而程序执行时得到我们需要的结果.那么 ...
- sqlite3 select查询一列_一眼就会的sqlite3数据库
一.SQLite数据库简介 SQLite 是一个软件库,实现了自给自足的.无服务器的.零配置的.事务性的 SQL 数据库引擎.SQLite 是在世界上最广泛部署的 SQL 数据库引擎. 二.SQLit ...
- SQLite3 模糊查询
如果你还没有安装或者使用过 sqlite,可以借助 SQLite3 安装.基本操作 入门. 1. 创建数据库 test.db cd ~/ sqlite3 test.db 这样在 ~/ 目录下面就生成一 ...
最新文章
- BZOJ5324 洛谷4563 LOJ2545:[JXOI2018]守卫——题解
- JZOJ 4822. 【NOIP2016提高A组集训第1场10.29】完美标号
- 每日程序C语言17-打印出好看的菱形
- arm-linux-gnueabi和arm-linux-gnueabihf 的区别
- java微信服务商支付,Java 微信支付之APP支付服务端 (二)
- python程序是怎么构成的_python程序的构成
- 微信小程序上传接口php,微信小程序API 上传、下载
- 腾讯二十年了,马化腾定了个新方向!
- 将照片转换为网站的Flash
- 商品详情页中特别注意的三件事
- ​力扣解法汇总954-二倍数对数组
- 【已解决】华为P10禁止系统更新EMUI9
- hadoop文件读写示例
- 研发团队管理激励机制
- 2345浏览器写CSDN博客错误
- 学画画要花多少钱_高二学美术的费用大概是多少 要花多少钱
- 推荐系统读书笔记(二)利用用户行为数据
- [XCTF]funny_video(难度2)
- virtio vring原理
- Qt: Linux环境下获取电脑主板序列号
热门文章
- java中将类放入包中,Java 包
- 射频电路设计——传输线理论(Transmission Line Analysis) 【下】
- 四皇后、八皇后……的求解
- 黄冠|南昌大学计算机科学与技术,课制|这里有全华师最好看的课件
- 专防诈骗 法国新型信用卡密码随时变
- 纬地道路纵断面设计教程_市政工程这样设计!案例视频教程+CAD图纸收好,市政全覆盖...
- ubuntu18.04下载地址
- Linux-Day2笔记
- jQuery 入门教程
- .NET Core工程编译事件$(TargetDir)变量为空引发的思考