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

news2024/11/23 9:09:58

学习分享

  • 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();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1829204.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文阅读:RAM++ | Open-Set Image Tagging with Multi-Grained Text Supervision

发表时间&#xff1a;2023年11月16 论文地址&#xff1a;https://arxiv.org/pdf/2310.15200 项目地址&#xff1a;https://github.com/xinyu1205/recognize-anything Recognize Anything Plus Model&#xff08;RAM&#xff09;&#xff0c;这是一种有效利用多粒度文本监督的开…

【iOS】UI学习——cell的复用及自定义cell

目录 前言cell的复用手动&#xff08;非注册&#xff09;自动&#xff08;注册&#xff09; 自定义cell总结 前言 Cell复用和自定义Cell是在开发iOS应用时常见的一种优化技巧和定制需求。   Cell复用是UITableView或UICollectionView的一个重要优化机制。当用户滚动这些视图时…

【宠粉赠书】科研绘图神器:MATLAB科技绘图与数据分析

小智送书第二期~ 为了回馈粉丝们的厚爱&#xff0c;今天小智给大家送上一套科研绘图的必备书籍——MATLAB科技绘图与数据分析。下面我会详细给大家介绍这套图书&#xff0c;文末留有领取方式。 图书介绍 《MATLAB科技绘图与数据分析》是一本综合性强、内容丰富的书籍&#x…

【Android面试八股文】Java中有几种引用关系,它们的区别是什么?

在Java中,引用关系主要分为以下几种: 强引用(Strong Reference)软引用(Soft Reference)弱引用(Weak Reference)虚引用(Phantom Reference) 这些引用类型的区别在于它们对垃圾回收的影响程度。下面是对每种引用类型的详细解释及代码示例: 1. 强引用(Strong Referen…

Java面向对象-接口

Java面向对象-接口 一、JDK1.8之前二、接口的作用三、JDK1.8之后&#xff0c;新增非抽象方法四、静态方法 一、JDK1.8之前 1、类是类&#xff0c;接口是接口&#xff0c;它们是同一层次的概念 2、接口中没有构造器 3、接口如何声明&#xff1a;interface 4、在jdk1.8之前&…

植物大战僵尸杂交版最新pvzHE_v2.1.0含游戏窗口放大工具

植物大战僵尸杂交版是由B站”潜艇伟伟迷”UP主制作的一款同人策略塔防游戏&#xff0c;也叫pvzHE&#xff0c;该游戏由《植物大战僵尸》原版魔改而来&#xff0c;引入了创新的杂交合成系统&#xff0c;让玩家可以将不同植物进行杂交&#xff0c;创造出具有全新能力和外观的植物…

浪潮信息内存故障预警技术再升级 服务器稳定性再获提升

浪潮信息近日对其内存故障智能预警修复技术进行了全面升级&#xff0c;再次取得技术突破。此次升级后&#xff0c;公司服务器的宕机率实现了80%锐降&#xff0c;再次彰显了浪潮信息在服务器技术领域的卓越能力。 浪潮信息全新升级服务器内存故障智能预警修复技术MUPR (Memory …

复星杏脉算法面经2024年5月16日面试

复星杏脉算法面经2024年5月 面试记录&#xff1a;3个部分1. 自己介绍 2. 问八股 3.代码题先自我介绍20分钟问问题1. 梯度爆炸怎么解决&#xff0c;三个解决方案&#xff1a;梯度裁剪&#xff08;Gradient Clipping&#xff09;正则化&#xff08;Regularization&#xff09;调整…

《全网首发》平衡三进制图灵机的构建

PS:以下内容均为本人原创&#xff0c;未经授权及许可&#xff0c;严禁引图、转载或加工&#xff0c;违者必究。 ————2024年6月13号 1、图灵机的概述 图灵机&#xff08;Turing machine&#xff09;是一种理论计算模型&#xff0c;由英国数学家阿兰图灵&#xff08;Alan T…

Vue44-创建vue脚手架

一、Vue脚手架的版本说明 vue cli&#xff1a;command line interface 命令行接口工具 用最新的脚手架&#xff0c;这样可以兼容vue3荷vue2版本。 二、通过vue脚手架创建项目 注意&#xff1a; 执行npm run serve 启动项目的时候&#xff0c;要进入到创建的vue项目里面&…

Python(二)---数据类型与变量、以及运算符

文章目录 前言1.Python程序的构成1.1.代码的组织和缩进1.2.使用\行连接符 2.对象和引用、标识符规则2.1.对象2.2.引用2.3.标识符规则 3.变量和简单赋值语句3.1.变量的声明和赋值3.2.删除变量和垃圾回收机制3.3.常量3.4.链式赋值3.5.系列解包赋值 4.最基本内置数据类型4.1.数字和…

代理IP协议有何区别?深入了解 SOCKS5、HTTP 代理

在数字通信领域&#xff0c;数据安全和匿名性都是非常重要的指标。互联网的不断发展催生了几种协议&#xff0c;每种协议都有独特的优势和挑战。其中&#xff0c;SOCKS5 代理、HTTP代理最为广泛使用&#xff0c;下面给大家一起讨论&#xff0c;HTTP代理与 SOCKS5代理&#xff0…

Django中间件探索:揭秘中间件在Web应用中的守护角色与实战应用

系列文章目录 Django入门全攻略&#xff1a;从零搭建你的第一个Web项目Django ORM入门指南&#xff1a;从概念到实践&#xff0c;掌握模型创建、迁移与视图操作Django ORM实战&#xff1a;模型字段与元选项配置&#xff0c;以及链式过滤与QF查询详解Django ORM深度游&#xff…

北航第六次数据结构与程序设计作业(查找与排序)选填题

一、 顺序查找的平均查找长度ASL&#xff08;1 2 …… n&#xff09;/ n (n 1&#xff09;/ 2 二、 这半查找法的平均查找次数和判定树的深度有关系。若查找一个不存在的元素&#xff0c;说明进行了深度次比较。 注意&#xff0c;判定树不是满二叉树&#xff0c;因此深…

生信分析进阶5 - 全外显子组变异检测和ANNOVAR注释Snakemake分析流程

基于yaml或ini配置文件&#xff0c;配置文件包含例如样本名称、参考基因组版本、exon capture bed文件路径、参考基因组路径和ANNOVAR注释文件等信息。 基于该流程可以实现全外显测序的fastq文件输入到得到最终变异VCF文件。 1. Snakemake分析流程基础软件安装 # conda安装 …

Vue3【二十一】Vue 路由模式(createWebHashHistory /createWebHistory )和RouterLink写法

Vue3【二十一】Vue 路由模式&#xff08;createWebHashHistory /createWebHistory &#xff09;和RouterLink写法 Vue3【二十一】Vue 路由模式和普通组件目录结构 createWebHistory history模式&#xff1a;url不带#号&#xff0c;需要后端做url适配 适合销售项目 利于seo crea…

pytorch学习笔记6

想要找一些官方的小工具数据集&#xff0c;可以进入pytorch官网&#xff0c;DOCS-》pytorch下拉至libraries&#xff0c;点击torchversion&#xff0c;调整版本至0.9.0就可以找到相应的一些数据集&#xff0c;训练集 ctrlp可以看一个函数中需要设置哪些参数 下载数据集可以参考…

C/C++中内存开辟与柔性数组

C/C中内存的开辟 在C中&#xff0c;我们都知道有三个区&#xff1a; 1. 栈区&#xff08;stack&#xff09;&#xff1a;在执行函数时&#xff0c;函数内局部变量的存储单元都可以在栈上创建&#xff0c;函数执行结 束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指…

云和运维(SRE)的半生缘-深读实证02

这个标题不算太夸张&#xff0c;云计算和很多IT岗位都有缘&#xff0c;但是和运维&#xff08;SRE&#xff09;岗位的缘分最深。 “深读实证”系列文章都会结合一些外部事件&#xff0c;点明分析《云计算行业进阶指南》书中的内容。本次分享介绍了下列内容&#xff1a; 我以运维…

Git学习记录v1.0

1、常用操作 git clonegit configgit branchgitt checkoutgit statusgit addgit commitgit pushgit pullgit loggit tag 1.1 git clone 从git服务器拉取代码 git clone https://gitee.com/xxx/studyJava.git1.2 git config 配置开发者用户名和邮箱 git config user.name …