【QT学习】15.数据库

一。安装数据库

1.判断数据库是否安装成功

方法一:命令行检测

1.进入命令行(不需要管理员模式)

2.结果说是欢迎进入mysql,表示mysql成功安装

方法二:navicat连接mysql

二。qt上配置MySQL

1.配置qt之前

1.点击mysql.pro修改代码--》添加mysql的地址

2.上述运行之后-》把上面生成的dll,放到此文件夹中

3.结果:

补充:只能使用64位来处理数据库

成功表现:运行下面两行代码成功

三。实例,初步创建数据库,删除数据库记录

结果:

        连接数据库成功。

可以根据名称删除数据库记录:

(删除--》确定)删除操作                (删除--》取消)取消操作

步骤:

1.添加框架

QT+=sql

2.添加头文件

//数据库头文件
#include <QSqlDatabase>
//执行数据库指令的类
#include <QSqlQuery>
//执行一系列数据库指令的类
#include <QVariantList>

3.绘图与三个槽函数

4.连接数据库

    //查看当前qt支持的数据库
    qDebug()<<QSqlDatabase::drivers();
    //添加qt支持的数据库
    QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");
    //连接mysql数据库-----------------
    db.setHostName("127.0.0.1");
    db.setUserName("root");
    db.setPassword("********");
    db.setDatabaseName("student");
    //连接数据库
    if(!db.open()){
        QMessageBox::warning(this,"错误","数据库连接失败");
        return;
    }
    qDebug() << "连接数据库成功!";

5.插入数据库(单个插入,多个插入)

//一个一个插入
    //query.exec("insert into student(id,name,age,score) values(3,'李四',44,77);");
    //一次插入多个数据---------------
    QSqlQuery query;
    //占位
    query.prepare("insert into student(id,name,sex,age,score) values(:id,:name,:sex,:age,:score)");

    //准备数据
    QVariantList idList;
    idList<<1<<2<<3<<4;
    QVariantList nameList;
    nameList<<"张三"<<"李四" <<"王五" <<"陈六" ;
    QVariantList sexList;
    sexList<<"男"<<"男"<<"男"<<"男";
    QVariantList ageList;
    ageList<<20<<21<<22<<23;
    QVariantList scoreList;
    scoreList<< 99<<66<<77<<33;

    //绑定
    query.bindValue(":id",idList);
    query.bindValue(":name",nameList);
    query.bindValue(":sex",sexList);
    query.bindValue(":age",ageList);
    query.bindValue(":score",scoreList);
    //添加
    query.execBatch();

    //查找-------------------------
    //方式一:
    query.exec("select * from student;");
    while(query.next()){
        qDebug()<<query.value("id").toInt()
               <<query.value("name").toString()
               <<query.value("sex").toString()
               <<query.value("age").toInt()
               <<query.value("score").toInt();
    }
    //方式二:
    query.exec("select * from student where id=1;");
    while(query.next()){
        qDebug()<<query.value(0).toInt()
               <<query.value(1).toString()
               <<query.value(2).toString()
               <<query.value(3).toInt()
               <<query.value(4).toInt();
    }

6.删除槽函数(创建一个字符串存放数据,启动事务,运行指令)

QSqlDatabase::database().transaction();//启动事务

为什么要启动事务?

答:启动事务后,才可以进行回滚,这样的话可以对误删进行处理。

//删除
void Widget::on_btnDelete_clicked()
{
    QString name = ui->lineEdit->text();
    //根据名字,删除数据
    QString sql = QString("delete from student where name = '%1';").arg(name);

    //启动事务
    QSqlDatabase::database().transaction();
    //执行数据指令
    QSqlQuery query;
    query.exec(sql);

    qDebug()<<"执行删除";
}

7.确定槽函数

//确定
void Widget::on_btnSure_clicked()
{
    //向数据库提交事务
    QSqlDatabase::database().commit();
}

8.取消槽函数

//取消
void Widget::on_btnCancle_clicked()
{
    //回滚
    QSqlDatabase::database().rollback();
}

四。QSqlTablemodel数据库显示控件

1.结果:

        可以直接修改,增删改查。

2.代码

(1)头文件

#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>//执行单个指令
#include <QVariantList>//一次执行多条指令
#include <QSqlTableModel>//qt提供的数据库显示控件
#include <QSqlRecord>//针对上述控件的处理

(2)添加数据库模型

    //数据库模型
    QSqlTableModel* pTableModel;

(3)连接数据库

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //数据库连接----------------------------------
    //查看当前qt支持的数据库
    qDebug() << QSqlDatabase::drivers();
    //添加mysql数据库
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    //设置数据库连接的 参数
    db.setHostName("127.0.0.1");    //地址
    db.setUserName("root");         //用户名
    db.setPassword("sxjh5394");     //密码
    db.setDatabaseName("student");  //数据库名
    //连接数据库
    if(!db.open()){
        QMessageBox::warning(this,"错误","数据库连接失败");
        return;
    }
    qDebug() << "连接数据库成功!";   
}

(4)数据库模型的创建

 //数据库模型的创建
    pTableModel = new QSqlTableModel(this);
    //设置表格
    pTableModel->setTable("student");
    //显示模型
    ui->tableView->setModel(pTableModel);
    pTableModel->select();
    //设置编辑模式,手动提交修改而不是直接在界面上修改
    pTableModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
    //设置只读
    //ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);

(5)查找,删除,增加,修改(自带修改),确定/删除

//查找
void Widget::on_btnFind_clicked()
{
    QString name=ui->lineEdit->text();
    QString str=QString("name='%1'").arg(name);

    pTableModel->setFilter(str);
    pTableModel->select();
}
//加入
void Widget::on_btnAdd_clicked()
{
    //获取一条空记录
    QSqlRecord record=pTableModel->record();
    //获取当前 记录条数 行数
    int row=pTableModel->rowCount();
    //添加空行
    pTableModel->insertRecord(row,record);
}
//删除
void Widget::on_btnDelete_clicked()
{
    //先获取用户选中的
    QItemSelectionModel* pSelectionModel=ui->tableView->selectionModel();
    //获取用户选中的每一条
    QModelIndexList list=pSelectionModel->selectedRows();
    //循环删除
    for(int i=0;i<list.size();i++){
        pTableModel->removeRow(list.at(i).row());
    }
}
//确定
void Widget::on_btnSure_clicked()
{
    pTableModel->submitAll();//提交所有
}
//取消
void Widget::on_btnCancle_clicked()
{
    pTableModel->revertAll();//恢复挂起修改
    pTableModel->submitAll();
}

五。sqlite与数据库的区别

MySQL:
1. 企业级应用:MySQL因其强大的功能、性能和可扩展性,常用于企业级应用,包括电子商务、在线支付、社交网络等。
2. 大数据处理:MySQL可以处理大量数据,并支持多核CPU和分布式存储,适合大数据处理和分析。
3. 云服务和托管服务:MySQL广泛用于云服务和托管服务,如Amazon RDS、阿里云RDS等。
4. 复杂数据查询:MySQL支持复杂的SQL查询和多表连接,适合需要复杂数据操作的应用。
5. 多用户环境:MySQL支持多用户和并发访问,适合需要多用户同时访问数据库的应用。
SQLite:qt中数据放在本地
1. 嵌入式系统:SQLite因其轻量级和零配置的特点,常用于嵌入式系统,如移动设备、物联网设备等。
2. 桌面和移动应用:SQLite可以嵌入到桌面和移动应用中,用于本地数据存储和查询。
3. 开发和测试:由于其简单的安装和易于使用的特性,SQLite常用于开发和测试环境。
4. 轻量级数据库应用:SQLite适合那些不需要复杂查询和事务支持的应用。
5. 个人和小型项目:SQLite可以用于个人和小型项目,如个人博客、小型论坛等。

其余与mysql一样:注意sqlite不能设置为自增

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

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

相关文章

人工智能领域向量化技术加速多模态大模型训练与应用

目录 前言1、TextIn文档解析技术1.1、文档解析技术1.2、目前存在的问题1.2.1、不规则的文档信息示例 1.3、合合信息的文档解析1.3.1、合合信息的TextIn文档解析技术架构1.3.2、版面分析关键技术 Layout-engine1.3.3、文档树提取关键技术 Catalog-engine1.3.4、双栏1.3.5、非对称…

MHD、MQA、GQA注意力机制详解

MHD、MQA、GQA注意力机制详解 注意力机制详解及代码前言&#xff1a;MHAMQAGQA 注意力机制详解及代码 前言&#xff1a; 自回归解码器推理是 Transformer 模型的 一个严重瓶颈&#xff0c;因为在每个解码步骤中加 载解码器权重以及所有注意键和值会产生 内存带宽开销 下图为三…

安防视频汇聚/智能分析云平台EasyCVR调用localfile接口会返回日志的问题该如何解决?

视频汇聚/安防视频融合云平台EasyCVR视频监控系统支持多协议接入、兼容多类型设备&#xff0c;平台能在复杂的网络环境中&#xff08;专网、局域网、广域网、VPN、公网等&#xff09;将前端海量的设备进行统一集中接入与视频汇聚管理。视频监控/集中存储系统EasyCVR平台可支持国…

中青杯全国大学生数学建模竞赛纳入多所高校学科竞赛认定目录

2024年第六届中青杯全国大学生数学建模竞赛将于2024年5月23日17:00至5月26日17:00举行,中青杯全国大学生数学建模竞赛是中国高校学科竞赛中规模较大、影响较广的学科竞赛之一,并且纳入多所高校学科竞赛认定目录。 报名截止时间:2024年5月23日12:00 报名网站:http://www.c…

Hadoop 3.4.0 项目实战

1环境基于 上一篇搭建 高可用分布式集群 2 官方提供MapReduce程序 #评估圆周率 cd /data/hadoop/share/hadoop/mapreduce/ hadoop jar hadoop-mapreduce-examples-3.4.0.jar pi 2 6 3 实例项目分析1 #预分析的文件如&#xff0c;如单词统计 # #上传文件到hdfs hdfs …

淘系淘宝订单详情api接口(订单详情,订单列表,出售中,库存等属性)

淘系淘宝订单详情api接口&#xff08;订单详情&#xff0c;订单列表&#xff0c;出售中&#xff0c;库存等属性&#xff09;

【基础算法总结】二分查找二

二分查找二 1.山脉数组的峰顶索引2.寻找峰值3.寻找旋转排序数组中的最小值4.点名 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.山脉数组的…

【vue3】vue3中如何使用typescript

简言 现在vue3和typescript搭配使用是一个较常见的方案&#xff0c;下面参考vue3官网总结下在vue项目中使用ts(TypeScript)的方法。 typescript配置 新建项目 如果你准备新建vue3项目&#xff0c;那么使用create-vue官方脚手架&#xff0c;它提供了搭建基于 Vite 且 TypeSc…

vue-pure-admin项目内复制文字粘贴到word中之后存在边框问题

vue-pure-admin项目内复制文字粘贴到word中之后存在黑色边框是由于reset.scss文件内设置了通配符的border样式 修改前 代码 *, ::before, ::after {box-sizing: border-box;// 添加这个样式会导致复制的文字粘贴到word中带有边框问题border-color: currentColor;border-styl…

CCF PTA 2022年11月C++学生会提名

【问题描述】 学生会选举要开始了。根据选举规则&#xff0c;首先由全体同学进行提名&#xff0c;每位同学可以从全体同学中提 名一名同学参选。选举时&#xff0c;会从全体同学的提名中选出一名学生会主席&#xff0c;再从三个年级分别的提名中 各选出一名副主席。现在&#…

sa-token权限认证框架,最简洁,最实用讲解

查看源码&#xff0c;可知&#xff0c;sa sa-token框架 测试代码源码配置自动装配SaTokenConfigSaTokenConfigFactory SaManager工具类SaFoxUtilStpUtilSaResult StpLogic持久层定时任务 会话登录生成token创建account-session事件驱动模型写入tokenSaSessionSaCookieSaTokenDa…

elementui,iview等 表格单元格合并之固定列

要的效果如下 需要合并 show weak 及 Siginin这三列 上代码 <template><Table:columns"columns":span-method"handleSpan":data"data"bordersize"small"ref"table"></Table> </template> <sc…

Linux备份---异地

参考文档&#xff1a;Linux环境实现mysql所在服务器定时同步数据文件到备份服务器&#xff08;异地容灾备份场景&#xff09;_mysql异地备份-CSDN博客 通过SSH进行连接&#xff1a; 应用服务器&#xff1a; 通过ssh-keygen -t rsay建立ssh通信的密钥 密钥建立后&#xff0c;…

JavaScript-输入输出语句

输出语句 document.write( 输出的内容 ) 语法&#xff1a;document.write( 输出的内容) 作用&#xff1a;内容会显示在网页上 如果输出的内容是标签&#xff0c;也会被解析为网页元素 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head>&…

cubemx配置stm32f407VET6实现can通信

背景&#xff1a; 项目上需要把原先的TMC5160电机驱动器替换为购买的电机控制模块&#xff08;该模块采用canopen通信&#xff09; 移植canopen的前提是can通信正常&#xff0c;现在添加一下can通信&#xff08;先用标准帧&#xff0c;250K bit/S的波特率测试&#xff09; 原理…

【回溯】1255. 得分最高的单词集合

本文涉及知识点 回溯 力扣难道&#xff1a;1881 LeetCode1255. 得分最高的单词集合 你将会得到一份单词表 words&#xff0c;一个字母表 letters &#xff08;可能会有重复字母&#xff09;&#xff0c;以及每个字母对应的得分情况表 score。 请你帮忙计算玩家在单词拼写游戏…

系统管理(System Keeping):Codigger资源与配置管理(上)

系统管理&#xff08;System Keeping&#xff09;&#xff0c;作为Codigger不可或缺的一部分&#xff0c;为开发者提供全面而高效的资源与配置管理体验。下面&#xff0c;让我们从它的其中三方面来一探究竟其强大的功能如何助力开发者提升工作效率。 一、环境配置&#xff1a;全…

Linux交叉编译

一. 交叉编译 1.使用环境要求 新版本的orangepi-build是在Ubuntu22.04的x64电脑或虚拟机上运行的 lsb_release -a //查看自己的虚拟机版本 因为编译出的SDK大概有16G大小&#xff0c;因此&#xff0c;至少给虚拟机分配50G的大小。 2.获取Linux SDK 方法一&#xff1a;从…

React框架-Next 学习-1

创建一个 Next.js 应用,node版本要高&#xff0c;16.5以上 npm淘宝镜像切为https://registry.npmmirror.com npm config set registry https://registry.npmmirror.com npx create-next-applatest//安装后 使用npm run dev 启动 Next.js 是围绕着 页面&#xff08;pages&am…

智慧园区EasyCVR视频智能管理方案:构建高效安全园区新视界

一、背景分析 园区作为城市的基本单元&#xff0c;是最重要的人口和产业聚集区。根据行业市场调研&#xff0c;90%以上城市居民工作与生活在园区进行&#xff0c;80%以上的GDP和90%以上的创新在园区内产生&#xff0c;可以说“城市&#xff0c;除了马路都是园区”。 园区形态…