【数据库编程-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();
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

XML Encoding = ‘GBK‘ after STRANS,中文乱码

最近帮同事处理了一个中信银行银企直连接口的一个问题&#xff0c;同事反馈&#xff0c;使用STRANS转换XML后&#xff0c;encoding始终是’utf-16’,就算指定了GBK也不行。尝试了很多办法始终不行&#xff0c;发到银行的数据中&#xff0c;中文始终是乱码。 Debug使用HTML视图…

各种机器学习算法的应用场景分别是什么(比如朴素贝叶斯、决策树、K 近邻、SVM、逻辑回归最大熵模型)?

2023简直被人工智能相关话题席卷的一年。关于机器学习算法的热度&#xff0c;也再次飙升&#xff0c;网络上一些分享已经比较老了。那么今天借着查询和学习的机会&#xff0c;我也来浅浅分享下目前各种机器学习算法及其应用场景。 为了方便非专业的朋友阅读&#xff0c;我会从算…

环形链表2证明

解法 快慢指针相遇后&#xff0c;其中一个指回头部&#xff0c;然后同步前进 代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNod…

Python-json模块

一、相关概念 # 序列号 和反序列号 # 序列号&#xff1a;把内存中的数据类型转成一种特定格式&#xff0c;这种格式&#xff08;json/pickle&#xff09;可以用于存储&#xff0c;或者传输给其他平台 import json # 内存中是数据类型 ----> 序列化 ----> 特定格式&…

传输层——TCP

在学习计算机网络的过程中&#xff0c;我们知道OSI七层协议模型&#xff0c;但是在实际开发应 用中我们发现OSI七层协议模型并不适合实施&#xff0c;因为OSI上三层通常都是由开 发人员统一完成的&#xff0c;这三层之间在实现过程中没有一个明确的界限&#xff0c;所以我 们更…

[面试题]Spring Boot

[面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL[面试题]Maven[面试题]Spring Boot[面试题]Spring Cloud[面试题]Spring MVC Spring Boot 涉及到的知识点很多&#xff0c;在内容上&#xff0c;我们会分成两大块&#xff1a…

融合心血管系统(CVS)多视角信号的新架构新策略

随着深度学习的发展和传感器的广泛采用&#xff0c;自动多视角融合&#xff08;MVF&#xff09;在心血管系统&#xff08;CVS&#xff09;信号处理方面取得了进展。然而&#xff0c;普遍的MVF模型架构通常将同一时间步骤但不同视角的CVS信号混合成统一的表示形式&#xff0c;忽…

01 飞行器设计 —— 一门独立的学科

01 飞行器设计 —— 一门独立的学科 01 引言02 飞机设计概述2-1 什么是飞机设计&#xff1f;2-1 飞机设计是从哪里开始的&#xff1f;2-2 如何成为一名飞机设计师&#xff1f;2-4 本书的组织 参考文献 说明&#xff1a;关于Raymer的《Aircraft Design》的读书笔记&#xff1b; …

CDN简介

CDN 的基本概念 CDN&#xff08;Content Delivery Network&#xff09;&#xff0c;即内容分发网络。 CDN是一种分布式网络架构&#xff1a;它由分布在不同地理位置的服务器组成网络&#xff0c;这些服务器协同工作以提供内容服务。 内容分发的核心目标 确保用户能够快速、可…

VS2022 使用CMake 设置调试

1. 在VS2022 切换到CMake视图 ,右键,添加调试配置: 在launch.vs.json文件中: 写入以下配置: {"version": "0.2.1","defaults": {},"configurations": [{"type": "default","project": "CMak…

Python Webargs库:HTTP请求解析

更多Python学习内容&#xff1a;ipengtao.com Webargs是一个用于解析HTTP请求参数的Python库&#xff0c;支持多种Web框架&#xff0c;如Flask、Django、Pyramid等。它提供了一种声明式的方式来定义和验证请求参数&#xff0c;使得参数处理变得简洁和高效。Webargs的设计理念是…

Windows系统下使用gvim配置LaTeX快速书写环境

0 前言 小白近来读到这样一篇文章&#xff1a;How I’m able to take notes in mathematics lectures using LaTeX and Vim&#xff0c;这位学数学的小哥&#xff0c;通过使用vim和 LaTeX \LaTeX{} LATE​X在整个本科学习期间&#xff0c;共记下了1700多页的数学公式笔记&…

大一期末——写程序100道

1&#xff0e;用循环的嵌套&#xff0c;输出输出如下图形 * * * * * * * * * * * * * * * * * * * * * * * * * public static void main(String[] args) {int i0;//用i记录行数int j1;//用j记录每一行打印*的个数while (i<7){//打印7行if (i<3){//打印1~3行int xj;用x记…

毕业了校园卡怎么改套餐?

毕业了校园卡怎么改套餐&#xff1f; 毕业生校园卡99元套餐变更8元保号套餐教程 学弟学妹们恭喜毕业呀&#x1f393; 校园卡绑定了好多东西注销不掉又不想交高额月租的看过来。 今天一招教你更改校园卡套餐。 中国移动/电信/联通App 打开App&#xff0c;在首页右上角点击人工…

vue框架学习------框架概述

框架 在基础语言之上,对各种基础功能进行封装 什么是框架 框架&#xff08;Framework&#xff09;是整个或部分系统的可重用设计&#xff0c;表现为一组抽象构件及构件实例间交互的方法; 另一种定义认为&#xff0c;框架是可被应用开发者定制的应用骨架。前者是从应用方面而…

system与excel族函数区别

1.system #include<stdlib.h> int system(const char *command); comand是命令的路径&#xff0c;一般我们用绝对路径 system函数会创建新的进程&#xff0c;新的进程执行完返回原来的进程&#xff0c;原来的进程则继续执行后面的代码段。 如我们创建一个sys.cpp文件…

Oracle 入门--前提

目录 1.sqlplus 2.dual是什么&#xff1f; 3.SQL语句的种类 4.Oracle是如何工作的 5.Oracle查看配置文件 6.修改配置文件 7.常用的参数设置 1.sqlplus 管理数据库&#xff1a;启动&#xff0c;关闭&#xff0c;创建&#xff0c;删除对象......查看数据库的运行状态&…

可视化大屏开发系列——页面布局

页面布局是可视化大屏的基础&#xff0c;想要拥有一个基本美观的大屏&#xff0c;就得考虑页面整体模块的宽高自适应&#xff0c;我们自然就会想到具有强大灵活性flex布局&#xff0c;再借助百分比布局来辅助。至此&#xff0c;大屏页面布局问题即可得到解决。 写在前面&#x…

YOLOv10涨点改进创新MSAM注意力,通道注意力升级,魔改CBAM

目录 1,YOLO v10介绍 1.1 C2fUIB介绍 1.2 PSA介绍 1.3 SCDown 2.自研MSAM 2.1 自研MSAM注意力介绍 3.MSAM如何加入到YOLOv8 3.1 MSAM加入ultralytics/nn/attention/MsAM.py 3.2 修改tasks.py1)首先进行引用定义 3.3 yolov10n-MSAM.yaml 3.4 yolov10n-PSMSAM.yaml 改…

C++内存管理(free和delete区别)

本文由小编本人创作&#xff0c;如有不对&#xff0c;请多指正! 我们先来讲一些常见的数据类型存储在哪些位置&#xff0c;大家可以根据下面的试题来检验一下自己 第一个是属于全局变量&#xff0c;他是储存在静态区的&#xff0c;第二个是静态全局变量&#xff0c;也是属于静…