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

Qt连接MySql数据库

Qt连接Mysql

需要先引入mysql的lib目录下中的两个文件libmysql.dlllibmysql.lib

x32引入MySQL :: Download MySQL Connector/C (Archived Versions)6.0.9版本以上的这两个文件

x64引入这两个文件即可

需要在 .pro 文件里面引入sql

方式一:

#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>// 配置连接mysql服务信息
QSqlDatabase  db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");
db.setPort(3306);
db.setUserName("root");
db.setPassword("123456");// 检测连接是否成功
if(db.open())
{qDebug() << "连接成功";
}
else
{qDebug() << "连接失败" << db.lastError().text();
}// 调用查询语句
QSqlQuery query;
// query.exec("sql语句");
query.exec("create database bigloong");
query.exec("use bigloong");
QString sql = "create table member(""id  int unsigned not null auto_increment primary key, ""username varchar(30) not null unique"")engine=MyISAM default charset=utf8";
query.exec(sql);// 批量插入
// 准备查询的 sql 语句
query.prepare("insert into member values(null, ?)");// 准备填入的数据
QStringList nameList = {"棒槌", "二狗", "胖丫"};// 绑定数据
query.addBindValue(nameList);// 批量添加
query.execBatch();// 批量添加 -2
// 准备查询的 sql 语句
query.prepare("insert into member values(null, :name)");// 准备填入的数据
QStringList nameList1 = {"铁柱", "翠屏"};// 绑定数据
query.bindValue(":name", nameList1);// 批量添加
query.execBatch();// 查询结果
query.exec("select * from 表名");
// 影响的行数
query.numRowsAffected();
// 显示查询结果
while(query.next())
{// 显示方式1qDebug() << query.value(0).toInt() << query.value(1).toString();// 显示方式2qDebug() << query.value("id").toInt() << query.value("username").toString();
}

方式二:

在头文件中的操作

// 只适合单表操作
#include <QSqlTableModel>
// 多表操作
#include <QSqlRelationalTableModel>// 单表只需要 QSqlTableModel *stuModel
QSqlRelationalTableModel *stuModel;

构造函数中的操作

#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlRecord>
#include <QItemSelectionModel>
#include <QModelIndexList>
#include <QSqlRelation>
#include <QSqlRelationalDelegate>// 配置连接mysql服务信息
QSqlDatabase  db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1");
db.setPort(3306);
db.setUserName("root");
db.setPassword("123456");
db.setDatabaseName("study");
// 检测连接是否成功
if(!db.open())
{qDebug() << "连接失败" << db.lastError().text();
}
// 查询显示
// 查询 (将student表的数据取出,显示到tableView 中)
this->stuModel = new QSqlRelationalTableModel(this);
//让stuModel模型管理 student 表
this->stuModel->setTable("student");
// 设置关联关系
this->stuModel->setRelation(6,QSqlRelation("dept","dno","dname"));
// 设置关联授权
ui->tableView->setItemDelegate(new QSqlRelationalDelegate(ui->tableView));// 查找
this->stuModel->select();
// 将模型设置到视图上(将模型中保存的数据显示到视图上)
ui->tableView->setModel(this->stuModel);// 修改表头
this->stuModel->setHeaderData(int column,Qt::Horizontal,"文本");// 重设大小
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::枚举值);// 设置模型的可编辑行
this->stuModel->setEditStrategy(QSqlTableModel::OnManualSubmit);// 以模型方式进行排列
this->stuModel->sort(int column,Qt::SortOrder::规则);
// 以视图方式进行排序
ui->tableView->sortByColumn(int column,Qt::SortOrder::规则);// 通过关键字搜索
// 搜索的关键字
QString keyword = ui->lineEdit->text().trimmed();// 过滤关键字
QString filterStr = QString("sname like '%%1%'").arg(keyword);
// 过滤所需的内容
this->stuModel->setFilter(filterStr);
// 查询所过滤的内容
this->stuModel->select();// 添加
// 先添加一个空行
QSqlRecord record = this->stuModel->record();
// 添加到第几行
int addRow = this->stuModel->rowCount();
// 插入空行
this->stuModel->insertRecord(addRow,record);// 删除
// 获取选中的行
QItemSelectionModel *selectModel = ui->tableView->selectionModel();// 从选中的行中获取对应的索引号的链表
QModelIndexList modelList = selectModel->selectedRows();// 遍历list,获取索引号,再根据索引号从模型中删除
for(QModelIndexList::iterator it=modelList.begin();it!=modelList.end();it++)
{this->stuModel->removeRow(it->row());
}
this->stuModel->submitAll();// 修改
this->stuModel->submitAll();// 撤销所有的操作(增删改)
this->stuModel->revertAll();
this->stuModel->submitAll();
http://www.dtcms.com/a/296484.html

相关文章:

  • SAP B1 DTW成功登录后点击下一步提示没有权限读取清单
  • QML 模型
  • 阿里云SLS未开启索引时无法查询日志内容
  • 11.事务
  • 【GoLang#1】:Go 语言概述(背景 | 环境配置 | 特点 | 学习)
  • Redis单线程模型(含面试题)
  • pytorch常用函数
  • 【MySQL数据库备份与恢复1】二进制日志,mysqlbinlog
  • Linux Wlan 无线网络驱动开发-scan协议全流程详解
  • 企业安全基石:解锁等保测评的战略价值
  • 循环神经网络--LSTM模型
  • 15.2 DeepSpeed显存优化实战:7B大模型训练资源从84GB压缩到10GB!
  • 11-day08文本匹配
  • Cisco 主模式配置
  • 综合实验(4)
  • 光猫配置DMZ到路由器
  • OSPF多区域介绍
  • 使用 Elastic Observability 监控 Proxmox VE 部署
  • Linux命令基础完结篇
  • 【实时Linux实战系列】基于实时Linux的机器学习应用开发
  • 大模型微调学习笔记(基于讯飞星辰MaaS速学版)
  • Java 中 Future 与 Callable 的使用详解
  • pycharm在virtual环境下安装依赖失败的解决方案
  • 面试150 搜索二维矩阵
  • Mirauge3D 赋能:全自动建模,让城市规划与建筑设计拥有高分辨率实景三维模型
  • OpenHands:Manus 最强开源平替——本地部署与实战指南
  • KTH5791——3D 霍尔位置传感器--鼠标滚轮专用芯片
  • 【Ollama】open-webui部署模型
  • 高通平台基线升级时,从Android 13升级到Android 15遇到的selinux权限不生效问题分析
  • 【矩阵专题】Leetcode54.螺旋矩阵