QT--SQLite
创始人
2024-12-28 22:38:44
0

配置类相关的表,所以我使用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() + ";"); // sectionBarName         program += 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;     // 根据名字查询     // 使用索引sectionBarName     QString 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())+";"); // stepNo         programInfo += (QString::number(query.value(1).toInt())+";"); // cutNo         programInfo += (QString::number(query.value(2).toDouble(), 'f', 2) + ";"); // x         programInfo += (QString::number(query.value(3).toDouble(), 'f', 2) + ";"); // y         programInfo += (QString::number(query.value(4).toDouble(), 'f', 2) + ";"); // f 速度         programInfo += (QString::number(query.value(5).toDouble(), 'f', 2) + ";"); // Rx         programInfo += (QString::number(query.value(6).toDouble(), 'f', 2)); // Ry                  outPutMsg(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;     // 根据名字查询     // 使用索引sectionBarName     QString 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, "提示", "更新程序失败!");     } } 

相关内容

热门资讯

第六分钟了解!广西八一字牌辅助... 第六分钟了解!广西八一字牌辅助app,一起温州辅助器(确实真的有挂)1、该软件可以轻松地帮助玩家将广...
辅助透视!wepoker有用吗... 辅助透视!wepoker有用吗(透视)永久脚本辅助器(详细辅助玩家教你)1、首先打开wepoker有...
透视能赢"hhpok... 透视能赢"hhpoker辅助软件"详细辅助科技教程(一直是有挂);透视能赢"hhpoker辅助软件"...
第7分钟了解!雀友会广东潮汕麻... 第7分钟了解!雀友会广东潮汕麻雀,欢聚水鱼透视器(切实真的有挂)1、雀友会广东潮汕麻雀系统规律教程、...
透视攻略"poker... 透视攻略"poker红龙辅助"详细辅助爆料教程(果然真的有挂)1、poker红龙辅助系统规律教程、p...
透视辅助!wepoker辅助器... 透视辅助!wepoker辅助器安装包定制(透视)永久脚本辅助神器(详细辅助解密教程);1、透视辅助!...
第五分钟了解!嗨动互动辅助,内... 第五分钟了解!嗨动互动辅助,内置辅助器大全(切实存在有挂)1、金币登录送、破产送、升级送、活动送。详...
透视透视!德扑圈有透视吗(透视... 透视透视!德扑圈有透视吗(透视)永久脚本辅助挂(详细辅助教你教程);1、起透看视 德扑圈有透视吗透明...
透视软件"wejok... 透视软件"wejoker辅助软件价格"详细辅助2025新版教程(一贯是有挂)所有人都在同一条线上,像...
第9分钟了解!赣南好友辅助,吉... 第9分钟了解!赣南好友辅助,吉安中至小程序微信辅助(总是是真的有挂)1、每一步都需要思考,不同水平的...