当前位置: 首页 > news >正文

【数据库编程-SQLite3(二)】API-增删改查基础函数-(含源码)

学习分享

  • 1、sqlite3_exec函数
    • 1.1、使用sqlite3_exec进行【查】操作
      • 1.1.1、callback函数
    • 1.2、使用sqlite3_exec进行【增、删、改】操作
  • 2、sqlite3_get_table函数
    • 2.1、使用sqlite3_get_table函数进行【查】操作

1、sqlite3_exec函数

在这里插入图片描述

1.1、使用sqlite3_exec进行【查】操作

由于sqlite3_exec函数在使用时,需使用回调函数,回调函数为全局变量,程序的耦合性大大提升,不推荐使用该函数进行【查】操作。

#include <QApplication>
#include "sqlite3.h"
#include <QDebug>
#include <QString>//全局变量
//返回数据       列数     结果集二维数组   列名
//回调函数,每查询到一次数据就执行,没有总的数据集
int callback(void * pdata,int col,char **value,char ** name)
{qDebug()<<col;for(int i=0;i<col;i++){qDebug()<<name[i]<<":"<<value[i];}return 0;
}int main(int argc, char *argv[])
{QApplication a(argc, argv);sqlite3 * dbconnect=nullptr;int res=sqlite3_open("./xxxxxx.db",&dbconnect);if(res ==SQLITE_OK){qDebug()<<"数据打开成功!";}else{qDebug()<<"数据库打开失败!";qDebug()<<sqlite3_errmsg(dbconnect);//打印错误信息qDebug()<<sqlite3_errcode(dbconnect);//打印错误的代码}QString name= "hahaha",pwd="654321";QString sql= QString("SELECT *FROM tbl_user WHERE user_name ='%1' AND user_pwd ='%2'").arg(name).arg(pwd);qDebug()<<sql;char * errmeg=nullptr;res = sqlite3_exec(dbconnect,sql.toUtf8(),callback,nullptr,&errmeg);if(res ==SQLITE_OK){qDebug()<<"sql语句执行成功!";}else{qDebug()<<sqlite3_errmsg(dbconnect);//打印错误信息qDebug()<<sqlite3_errcode(dbconnect);//打印错误的代码}//2、关闭数据库sqlite3_close(dbconnect);return a.exec();
}

1.1.1、callback函数

在这里插入图片描述

1.2、使用sqlite3_exec进行【增、删、改】操作

#include <QApplication>
#include "sqlite3.h"
#include <QDebug>
#include <QString>
int main(int argc, char *argv[])
{QApplication a(argc, argv);sqlite3 * dbconnect=nullptr;//1、打开数据库int res=sqlite3_open("./xxxxxx.db",&dbconnect);if(res ==SQLITE_OK){qDebug()<<"数据打开成功!";}else{qDebug()<<"数据库打开失败!";qDebug()<<sqlite3_errmsg(dbconnect);//打印错误信息qDebug()<<sqlite3_errcode(dbconnect);//打印错误的代码}QString sql1="update tbl_user set user_pwd ='121212' where user_name='hahaha';";QString sql2="insert into tbl_user values(9,'alalal','123456',0,'2023-08-22 19:53:00');";QString sql3="delete  from tbl_user where user_id=7;";char * errmeg=nullptr;res = sqlite3_exec(dbconnect,sql1.toUtf8(),nullptr,nullptr,&errmeg);if(res ==SQLITE_OK){qDebug()<<"sql语句执行成功!";}else{qDebug()<<sqlite3_errmsg(dbconnect);//打印错误信息qDebug()<<sqlite3_errcode(dbconnect);//打印错误的代码}//2、关闭数据库sqlite3_close(dbconnect);return a.exec();
}

2、sqlite3_get_table函数

在这里插入图片描述

2.1、使用sqlite3_get_table函数进行【查】操作

#include <QApplication>
#include "sqlite3.h"
#include <QDebug>
#include <QString>
int main(int argc, char *argv[])
{QApplication a(argc, argv);sqlite3 * dbconnect=nullptr;//1、打开数据库int res=sqlite3_open("./xxxxxx.db",&dbconnect);if(res ==SQLITE_OK){qDebug()<<"数据打开成功!";}else{qDebug()<<"数据库打开失败!";qDebug()<<sqlite3_errmsg(dbconnect);//打印错误信息qDebug()<<sqlite3_errcode(dbconnect);//打印错误的代码}char **qres =nullptr;int row=0,col=0;char*errmeg =nullptr;QString sql1="SELECT * FROM tbl_user WHERE user_name ='alalal'";int res =sqlite3_get_table(dbconnect,sql1.toUtf8(), &qres, &row, &col, &errmeg);if(res ==SQLITE_OK){qDebug()<<"sql语句执行成功!";if(row>0){	//qres第一行就是字段名称,所以遍历是i从1开始for(int i=0;i<=row;i++){qDebug()<<qres[i*col]<<" "<<qres[i*col+1]<<" "<<qres[i*col+2]<<" "<<qres[i*col+3];}}}else{qDebug()<<sqlite3_errmsg(dbconnect);//打印错误信息qDebug()<<sqlite3_errcode(dbconnect);//打印错误的代码}//2、关闭数据库sqlite3_close(dbconnect);return a.exec();
}

相关文章:

  • Linux下Shell脚本基础知识
  • 2024数据库期末综合解析(部分题)
  • Docker 安装 MySQL5.7 和 MySQL8
  • 10.Docker Compose容器编排
  • 数据结构01 栈及其相关问题讲解【C++实现】
  • 安全智能体的前沿技术研究与实践
  • 1527. 患某种疾病的患者
  • 如何根据CAP原理设计分布式系统
  • 集合面试题
  • 微信小程序地图
  • JavaFX BorderPane布局
  • 贪心算法学习五
  • Webrtc支持FFMPEG硬解码之解码实现(三)
  • 实战项目: 负载均衡
  • PostgreSQL如何使修改的参数生效
  • 【刷算法】从上往下打印二叉树
  • ES6系列(二)变量的解构赋值
  • java正则表式的使用
  • js面向对象
  • linux安装openssl、swoole等扩展的具体步骤
  • Linux后台研发超实用命令总结
  • Otto开发初探——微服务依赖管理新利器
  • vue总结
  • 创建一个Struts2项目maven 方式
  • 大型网站性能监测、分析与优化常见问题QA
  • 关于extract.autodesk.io的一些说明
  • 基于组件的设计工作流与界面抽象
  • 跨域
  • 小程序01:wepy框架整合iview webapp UI
  • 一、python与pycharm的安装
  • 最近的计划
  • 白色的风信子
  • k8s使用glusterfs实现动态持久化存储
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #{}和${}的区别是什么 -- java面试
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (4)STL算法之比较
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (全注解开发)学习Spring-MVC的第三天
  • (杂交版)植物大战僵尸
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .net core 连接数据库,通过数据库生成Modell
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现