QT--SQLite

配置类相关的表,所以我使用sqlite,且QT自带该组件;

1.安装 sqlite-tools-win-x64-3460000、SQLiteExpert5.4.31.575
使用SQLiteExpert建好数据库.db文件,和对应的表后把db文件放在指定目录 ./db/program.db;

2.选择sql组件

在这里插入图片描述
3.新增数据库处理类,在使用数据库的地方调用类成员函数即可

DataModel::DataModel()
{db = QSqlDatabase::addDatabase("QSQLITE", "");db.setDatabaseName("./db/program.db");connectDataBase();
}DataModel::~DataModel()
{disconnectDataBase();
}// 打开数据库文件
bool DataModel::connectDataBase() {bool ret = db.open();if (!ret) {outPutMsg(QtDebugMsg, "DataModel::connectDataBase error = " + db.lastError().text());} return ret;
}
// 关闭数据库文件
void DataModel::disconnectDataBase() {db.close();
}
QStringList DataModel::queryProgramList() {QStringList programList;// 根据名字查询QString sql = QString("select sectionBarName,programNo from program where 1=1;");outPutMsg(QtDebugMsg, "DataModel::queryProgramList sql = " + sql);// 创建一个可以对db执行语句的对象QSqlQuery query(db);// 执行sql语句bool ret = query.exec(sql);if (!ret){outPutMsg(QtDebugMsg, "DataModel::queryProgramNo error = " + query.lastError().text());return programList;}// 行坐标向下移while (query.next()){//获取数据库query所指的那行的数据QString program;program += (query.value(0).toString() + ";"); // sectionBarNameprogram += QString::number(query.value(1).toInt()); // programNo// outPutMsg(QtDebugMsg, "DataModel::queryProgramInfoBySectionCode programInfo = " + program);programList.append(program);}return programList;
}
// 根据型材代号查询程序号码
QString DataModel::queryProgramNo(QString sectionBarNo) {// 根据名字查询QString sql = QString("select programNo from program where sectionBarName=\'%1\';").arg(sectionBarNo);//QString sql = QString("select programNo from program where 1=1");outPutMsg(QtDebugMsg, "DataModel::queryProgramNo sql = " + sql);// 创建一个可以对db执行语句的对象QSqlQuery query(db);// 执行sql语句bool ret = query.exec(sql);if (!ret){outPutMsg(QtDebugMsg, "DataModel::queryProgramNo error = " + query.lastError().text());return "";}QString programNo = "";// 行坐标向下移while (query.next()){//获取数据库query所指的那行的数据programNo = QString::number(query.value(0).toInt());outPutMsg(QtDebugMsg, "DataModel::queryProgramNo programNo = " + programNo);}return programNo;
}// 根据程序号码查询
QString DataModel::queryProgramByNo(QString programNo) {// 根据名字查询QString sql = QString("select sectionBarName from program where programNo=\'%1\';").arg(programNo);//QString sql = QString("select programNo from program where 1=1");outPutMsg(QtDebugMsg, "DataModel::queryProgramByNo sql = " + sql);// 创建一个可以对db执行语句的对象QSqlQuery query(db);// 执行sql语句bool ret = query.exec(sql);if (!ret){outPutMsg(QtDebugMsg, "DataModel::queryProgramByNo error = " + query.lastError().text());return "";}QString sectionBarNo = "";// 行坐标向下移while (query.next()){//获取数据库query所指的那行的数据sectionBarNo = QString::number(query.value(0).toInt());outPutMsg(QtDebugMsg, "DataModel::queryProgramByNo sectionBarNo = " + sectionBarNo);}return sectionBarNo;
}// 根据型材代号查询程序号码
QStringList DataModel::queryProgramInfoBySectionCode(QString sectionBarNo) {QStringList programInfoList;// 根据名字查询// 使用索引sectionBarNameQString sql = QString("select stepNo, cutNo,x, y, f, Rx, Ry from programInfo where programNo = (select programNo from program where sectionBarName=\'%1\');").arg(sectionBarNo);//QString sql = QString("select programNo from program where 1=1");outPutMsg(QtDebugMsg, "DataModel::queryProgramInfoBySectionCode sql = " + sql);// 创建一个可以对db执行语句的对象QSqlQuery query(db);// 执行sql语句bool ret = query.exec(sql);if (!ret){outPutMsg(QtDebugMsg, "DataModel::queryProgramInfoBySectionCode error = " + query.lastError().text());return programInfoList;}// 行坐标向下移while (query.next()){//获取数据库query所指的那行的数据QString programInfo;programInfo += (QString::number(query.value(0).toInt())+";"); // stepNoprogramInfo += (QString::number(query.value(1).toInt())+";"); // cutNoprogramInfo += (QString::number(query.value(2).toDouble(), 'f', 2) + ";"); // xprogramInfo += (QString::number(query.value(3).toDouble(), 'f', 2) + ";"); // yprogramInfo += (QString::number(query.value(4).toDouble(), 'f', 2) + ";"); // f 速度programInfo += (QString::number(query.value(5).toDouble(), 'f', 2) + ";"); // RxprogramInfo += (QString::number(query.value(6).toDouble(), 'f', 2)); // RyoutPutMsg(QtDebugMsg, "DataModel::queryProgramInfoBySectionCode programInfo = " + programInfo);programInfoList.append(programInfo);}return programInfoList;
}// 更新程序信息
bool DataModel::updateProInfosByProNo(QString proNo, QStringList proInfoList) {// 开启事务if (!db.transaction()) {outPutMsg(QtDebugMsg, "DataModel::updateProInfosByProNo db.error = " + db.lastError().text());return false;}QStringList programInfoList;// 根据名字查询// 使用索引sectionBarNameQString sqlDel = QString("delete from programInfo where programNo=\'%1\';").arg(proNo);outPutMsg(QtDebugMsg, "DataModel::updateProInfosByProNo sqlDel = " + sqlDel);// 创建一个可以对db执行语句的对象QSqlQuery query(db);// 执行sql语句bool ret = query.exec(sqlDel);if (!ret){outPutMsg(QtDebugMsg, "DataModel::updateProInfosByProNo error = " + query.lastError().text());return false;}try {for (int i = 0; i < proInfoList.size(); i++) {QStringList programInfo = proInfoList.at(i).split(";");QString sqlOne = "insert into programInfo values ( " + proNo + ",";for (int j = 0; j < programInfo.size(); j++) {if (j > 0) {sqlOne += ",";}sqlOne += programInfo.at(j) ;}sqlOne += ");";outPutMsg(QtDebugMsg, "DataModel::updateProInfosByProNo sqlOne = " + sqlOne);if (!query.exec(sqlOne)){outPutMsg(QtDebugMsg, "DataModel::updateProInfosByProNo error = " + query.lastError().text());return false;}}}catch (...) {outPutMsg(QtDebugMsg, "DataModel::updateProInfosByProNo error = " + query.lastError().text());return false;}// 开启事务if (!db.commit()) {outPutMsg(QtDebugMsg, "DataModel::updateProInfosByProNo db.error = " + db.lastError().text());return false;}return true;
}
// 保存程序信息
void ClearCorner::on_edit_saveBtn_clicked() {QStringList proInfoList;for (int i = 0; i < modelProgram.rowCount(); i++) {QString strTmp;for (int j = 0; j < modelProgram.columnCount(); j++) {QStandardItem* item = modelProgram.item(i, j);if (j > 0) {strTmp += ";";}strTmp += item->text();}outPutMsg(QtDebugMsg, "ClearCorner::on_edit_saveBtn_clicked strTmp = " + strTmp);proInfoList.append(strTmp);}DataModel dataModel;bool ret = dataModel.updateProInfosByProNo(ui.edit_lineEdit_programNo->text(), proInfoList);if (ret) {QMessageBox::information(nullptr, "提示", "更新程序成功!");}else {QMessageBox::warning(nullptr, "提示", "更新程序失败!");}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt 异步实现事件的定时执行 - QTimer和QThread的联合使用

异步实现事件的定时执行 - QTimer和QThread的联合使用 引言一、核心源码二、其信号和槽函数简述三、定时器及其moveToThread简述 引言 在 Qt 中&#xff0c;如果想要定时执行某些事件或函数&#xff0c;通常会使用 QTimer 类。QTimer 允许设置一个时间间隔&#xff0c;当这个时…

Linux镜像源设置不再难:一键脚本,新手也能成为优化高手(一键切换镜像源/Docker一键安装脚本)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 更换镜像源 📒📝 一键切换软件源📝 Docker一键安装脚本⚓️ 相关链接 ⚓️📖 介绍 📖 在国内,Linux系统用户经常会遇到下载软件包时速度慢的问题,这通常是因为默认的镜像源并不总是最优选择。对于新手来说,手动设置…

Spin Image(旋转图像)

Spin Image特征描述子原理 Spin Image是Johnson于1999年提出&#xff0c;Lazebnik于2005年完善的基于点云空间分布的特征描述方法&#xff0c;其思想是将一定区域的点云分布转换成二维的Spin Image&#xff0c;然后对场景和模型的Spin Image进行相似性度量。Spin Image方法与通…

HippoRAG如何从大脑获取线索以改进LLM检索

知识存储和检索正在成为大型语言模型(LLM)应用的重要组成部分。虽然检索增强生成(RAG)在该领域取得了巨大进步&#xff0c;但一些局限性仍然没有克服。 俄亥俄州立大学和斯坦福大学的研究团队推出了HippoRAG&#xff0c;这是一种创新性的检索框架&#xff0c;其设计理念源于人类…

CSDN回顾与前行:我的创作之旅——2048天的技术成长与感悟

CSDN回顾与前行&#xff1a;我的创作之旅——2048天的技术成长与感悟 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 前言 时光荏苒&#xff0c;岁月如梭。转眼间&#xff0c;从我在CSDN上写下第一篇技术博客《2-6 带头结点的链式表操作集…

腾讯又一平台即将停止运营

随着腾讯公司业务和战略的调整&#xff0c;某些业务逐渐退出历史舞台&#xff0c;如“腾讯直播平台NOW”&#xff0c;以及“QQ签到”&#xff0c;“腾讯待办”&#xff0c;“企鹅FM音频平台”等&#xff0c;最近又有一则重磅消息&#xff0c;那就是“腾讯课堂”也即将停止运营。…

基于jeecgboot-vue3的Flowable流程-集成仿钉钉流程(四)支持json和xml的显示

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、相应的界面前端代码 <template><div class"formDesign"><FlowDesign :process"process" :fields"fields" :readOnly"readOnly&quo…

从两眼放光到心碎一地《长相思》第二季搞笑爱情转折

这《长相思》第二季的剧情&#xff0c; 简直是心脏按摩器升级版啊&#xff01; 爷爷一开口&#xff0c;要给玱玹安排馨悦当王后 我这小心脏差点就跟着‘嘭’一声 "哎呀&#xff0c;以为要上演宫廷版《速度与激情》 结果小夭女神一出手&#xff0c; 不是醋坛子翻&#…

视图库对接系列(GA-T 1400)十四、视图库对接系列(本级)新增、修改订阅

说明 之前我们已经对接的设备,设备的话比较简单,是设备主动推送数据到平台的。 相信大家已经会了,那今天开始的话,我们来做对接平台,相对难点点。 但搞懂了核心的订阅流程的话,其实就不难了。 对接平台 订阅接口 订阅接口的话,有几个,添加、查询、更新、删除、取消…

SpringIOC原理

SpringIOC原理 1.概念 Spring通过一个配置文件描述Bean及Bean之间的依赖关系&#xff0c;利用Java语言的反射功能实例化Bean并建立Bean之间的依赖关系。Spring的IOC容器在完成这些底层工作的基础上&#xff0c;还提供了Bean实例缓存、生命周期管理、Bean实例代理、事件发布、…

欧拉部署nginx

1.下载nginx 下载地址&#xff1a;https://nginx.org/en/download.html 选择稳定版本 下的镜像文件进行下载 2.解压Nginx包 cd /root/nginx tar -zxvf nginx-1.26.0.tar.gz cd nginx-1.26.03.安装nginx相关依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl o…

Games101——光珊化——深度缓存——shading着色 1

深度缓存 如何解决远近的问题&#xff0c;能正确的覆盖 按照画作来说&#xff0c;先画出远处的物体&#xff0c;再画出近处的物体&#xff0c;近处会将其覆盖&#xff0c;这种算法叫做画家算法 但事实上&#xff0c;排序不仅要花更多的时间&#xff0c;而且排序并不容易&…

U盘启动快捷键查询

电脑开机一般默认自身硬盘启动系统&#xff0c;如需要U盘重装系统&#xff0c;开机时一直按对应机型的U盘启动快捷键&#xff0c;选择对应USB设备即可U盘启动。 一、品牌台式 二、品牌笔记本 三、组装电脑

【LabVIEW学习篇 - 1】:初始LabVIEW

文章目录 初始LabView前面板和程序框图前面板&#xff08;Front Panel&#xff09;程序框图&#xff08;Block Diagram&#xff09;交互和工作流程 练手小案例&#xff1a;LabView中实现加法操作 初始LabView LabVIEW&#xff08;Laboratory Virtual Instrument Engineering W…

【电脑应用技巧】如何寻找电脑应用的安装包华为电脑、平板和手机资源交换

电脑的初学者可能会直接用【百度】搜索电脑应用程序的安装包&#xff0c;但是这样找到的电脑应用程序安装包经常会被加入木马或者强制捆绑一些不需要的应用装入电脑。 今天告诉大家一个得到干净电脑应用程序安装包的方法&#xff0c;就是用【联想的应用商店】。联想电脑我是一点…

深入理解循环神经网络(RNN)

深入理解循环神经网络&#xff08;RNN&#xff09; 循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一类专门处理序列数据的神经网络&#xff0c;广泛应用于自然语言处理、时间序列预测、语音识别等领域。本文将详细解释RNN的基本结构、工作原理以及其优…

阐述 C 语言中的参数传递机制

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01; &#x1f4d9;C 语言百万年薪修炼课程 通俗易懂&#xff0c;深入浅出&#xff0c;匠心打磨&#xff0c;死磕细节&#xff0c;6年迭代&#xff0c;看过的人都说好。 文章目…

从海上长城到数字防线:视频技术在海域边防现代化中的创新应用

随着全球化和科技发展的加速&#xff0c;海域安全问题日益凸显其重要性。海域边防作为国家安全的第一道防线&#xff0c;其监控和管理面临着诸多挑战。近年来&#xff0c;视频技术的快速发展为海域边防场景提供了新的解决方案&#xff0c;其高效、实时、远程的监控特点极大地提…

增强现实(AR)与虚拟现实(VR)的区别?

随着科技的飞速发展&#xff0c;增强现实&#xff08;AR&#xff09;与虚拟现实&#xff08;VR&#xff09;技术在各个领域展现出巨大的潜力和应用前景。这两种技术虽然在体验和实现方式上有所不同&#xff0c;但都为用户提供了全新的感知体验。本文将详细解析AR和VR的概念、区…

《Windows API每日一练》9.13资源-鼠标位图和字符串

鼠标指针位图&#xff08;Mouse Cursor Bitmap&#xff09;是用于表示鼠标指针外观的图像。在 Windows 窗口编程中&#xff0c;可以使用自定义的鼠标指针位图来改变鼠标的外观&#xff0c;并提供更加个性化的用户体验。 ■以下是一些与鼠标指针位图相关的要点&#xff1a; ●…