简介

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++篇)相关推荐

  1. mormot数据库连接+查询+序列为JSON

    mormot数据库连接+查询+序列为JSON uses SynDB,SynCommons, SynDBRemote, SynOleDB, SynDBMidasVCL, mORMotMidasVCL p ...

  2. 庖丁解牛|图解 MySQL 8.0 优化器查询转换篇

    简介: 本篇介绍子查询.分析表和JOIN的复杂转换过程 一  背景和架构 在<庖丁解牛-图解MySQL 8.0优化器查询解析篇>一文中我们重点介绍了MySQL最新版本8.0.25关于SQL ...

  3. mongodb模糊查询_我叫Mongo,收了「查询基础篇」,值得你拥有

    这是mongo第二篇「查询基础篇」,后续会连续更新6篇 mongodb的文章总结上会有一系列的文章,顺序是先学会怎么用,在学会怎么用好,戒急戒躁,循序渐进,跟着我一起来探索交流. 通过上一篇基础篇的介 ...

  4. 庖丁解牛-图解MySQL 8.0优化器查询转换篇

    简介: 在<庖丁解牛-图解MySQL 8.0优化器查询解析篇>一文中我们重点介绍了MySQL最新版本8.0.25关于SQL基本元素表.列.函数.聚合.分组.排序等元素的解析.设置和转换过程 ...

  5. 第6篇:SELECT查询基础篇

    第6篇:SELECT查询基础篇 DQL(Data QueryLanguage):数据查询语言,从数据库中获取数据的,按照DQL的语法给数据库发送一条指令,数据库按照需要返回数据 查询常量 SELECT ...

  6. sqlite3 select查询一列_Python成为专业人士笔记–Sqlite3 模块

    "专业人士笔记"系列目录: 创帆云:Python成为专业人士笔记--强烈建议收藏!每日持续更新!​zhuanlan.zhihu.com Sqlite3 -一个不需要独立服务器进程的 ...

  7. 庖丁解牛-图解MySQL 8.0优化器查询解析篇

    简介:本文重点介绍了优化器的基于规则的其中一部分优化,更多的偏重于SQL中的基本操作符 一  背景和架构 我们都知道,利用编写程序来动态实现我们应用所需要的逻辑,从而程序执行时得到我们需要的结果.那么 ...

  8. sqlite3 select查询一列_一眼就会的sqlite3数据库

    一.SQLite数据库简介 SQLite 是一个软件库,实现了自给自足的.无服务器的.零配置的.事务性的 SQL 数据库引擎.SQLite 是在世界上最广泛部署的 SQL 数据库引擎. 二.SQLit ...

  9. SQLite3 模糊查询

    如果你还没有安装或者使用过 sqlite,可以借助 SQLite3 安装.基本操作 入门. 1. 创建数据库 test.db cd ~/ sqlite3 test.db 这样在 ~/ 目录下面就生成一 ...

最新文章

  1. BZOJ5324 洛谷4563 LOJ2545:[JXOI2018]守卫——题解
  2. JZOJ 4822. 【NOIP2016提高A组集训第1场10.29】完美标号
  3. 每日程序C语言17-打印出好看的菱形
  4. arm-linux-gnueabi和arm-linux-gnueabihf 的区别
  5. java微信服务商支付,Java 微信支付之APP支付服务端 (二)
  6. python程序是怎么构成的_python程序的构成
  7. 微信小程序上传接口php,微信小程序API 上传、下载
  8. 腾讯二十年了,马化腾定了个新方向!
  9. 将照片转换为网站的Flash
  10. 商品详情页中特别注意的三件事
  11. ​力扣解法汇总954-二倍数对数组
  12. 【已解决】华为P10禁止系统更新EMUI9
  13. hadoop文件读写示例
  14. 研发团队管理激励机制
  15. 2345浏览器写CSDN博客错误
  16. 学画画要花多少钱_高二学美术的费用大概是多少 要花多少钱
  17. 推荐系统读书笔记(二)利用用户行为数据
  18. [XCTF]funny_video(难度2)
  19. virtio vring原理
  20. Qt: Linux环境下获取电脑主板序列号

热门文章

  1. java中将类放入包中,Java 包
  2. 射频电路设计——传输线理论(Transmission Line Analysis) 【下】
  3. 四皇后、八皇后……的求解
  4. 黄冠|南昌大学计算机科学与技术,课制|这里有全华师最好看的课件
  5. 专防诈骗 法国新型信用卡密码随时变
  6. 纬地道路纵断面设计教程_市政工程这样设计!案例视频教程+CAD图纸收好,市政全覆盖...
  7. ubuntu18.04下载地址
  8. Linux-Day2笔记
  9. jQuery 入门教程
  10. .NET Core工程编译事件$(TargetDir)变量为空引发的思考