柚子快報邀請碼778899分享:QT--SQLite
柚子快報邀請碼778899分享:QT--SQLite
配置類相關的表,所以我使用sqlite,且QT自帶該組件;
1.安裝 sqlite-tools-win-x64-3460000、SQLiteExpert5.4.31.575 使用SQLiteExpert建好數(shù)據(jù)庫.db文件,和對應的表后把db文件放在指定目錄 ./db/program.db;
2.選擇sql組件
3.新增數(shù)據(jù)庫處理類,在使用數(shù)據(jù)庫的地方調(diào)用類成員函數(shù)即可
DataModel::DataModel()
{
db = QSqlDatabase::addDatabase("QSQLITE", "");
db.setDatabaseName("./db/program.db");
connectDataBase();
}
DataModel::~DataModel()
{
disconnectDataBase();
}
// 打開數(shù)據(jù)庫文件
bool DataModel::connectDataBase() {
bool ret = db.open();
if (!ret) {
outPutMsg(QtDebugMsg, "DataModel::connectDataBase error = " + db.lastError().text());
}
return ret;
}
// 關閉數(shù)據(jù)庫文件
void DataModel::disconnectDataBase() {
db.close();
}
QStringList DataModel::queryProgramList() {
QStringList programList;
// 根據(jù)名字查詢
QString sql = QString("select sectionBarName,programNo from program where 1=1;");
outPutMsg(QtDebugMsg, "DataModel::queryProgramList sql = " + sql);
// 創(chuàng)建一個可以對db執(zhí)行語句的對象
QSqlQuery query(db);
// 執(zhí)行sql語句
bool ret = query.exec(sql);
if (!ret)
{
outPutMsg(QtDebugMsg, "DataModel::queryProgramNo error = " + query.lastError().text());
return programList;
}
// 行坐標向下移
while (query.next())
{
//獲取數(shù)據(jù)庫query所指的那行的數(shù)據(jù)
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;
}
// 根據(jù)型材代號查詢程序號碼
QString DataModel::queryProgramNo(QString sectionBarNo) {
// 根據(jù)名字查詢
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);
// 創(chuàng)建一個可以對db執(zhí)行語句的對象
QSqlQuery query(db);
// 執(zhí)行sql語句
bool ret = query.exec(sql);
if (!ret)
{
outPutMsg(QtDebugMsg, "DataModel::queryProgramNo error = " + query.lastError().text());
return "";
}
QString programNo = "";
// 行坐標向下移
while (query.next())
{
//獲取數(shù)據(jù)庫query所指的那行的數(shù)據(jù)
programNo = QString::number(query.value(0).toInt());
outPutMsg(QtDebugMsg, "DataModel::queryProgramNo programNo = " + programNo);
}
return programNo;
}
// 根據(jù)程序號碼查詢
QString DataModel::queryProgramByNo(QString programNo) {
// 根據(jù)名字查詢
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);
// 創(chuàng)建一個可以對db執(zhí)行語句的對象
QSqlQuery query(db);
// 執(zhí)行sql語句
bool ret = query.exec(sql);
if (!ret)
{
outPutMsg(QtDebugMsg, "DataModel::queryProgramByNo error = " + query.lastError().text());
return "";
}
QString sectionBarNo = "";
// 行坐標向下移
while (query.next())
{
//獲取數(shù)據(jù)庫query所指的那行的數(shù)據(jù)
sectionBarNo = QString::number(query.value(0).toInt());
outPutMsg(QtDebugMsg, "DataModel::queryProgramByNo sectionBarNo = " + sectionBarNo);
}
return sectionBarNo;
}
// 根據(jù)型材代號查詢程序號碼
QStringList DataModel::queryProgramInfoBySectionCode(QString sectionBarNo) {
QStringList programInfoList;
// 根據(jù)名字查詢
// 使用索引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);
// 創(chuàng)建一個可以對db執(zhí)行語句的對象
QSqlQuery query(db);
// 執(zhí)行sql語句
bool ret = query.exec(sql);
if (!ret)
{
outPutMsg(QtDebugMsg, "DataModel::queryProgramInfoBySectionCode error = " + query.lastError().text());
return programInfoList;
}
// 行坐標向下移
while (query.next())
{
//獲取數(shù)據(jù)庫query所指的那行的數(shù)據(jù)
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;
// 根據(jù)名字查詢
// 使用索引sectionBarName
QString sqlDel = QString("delete from programInfo where programNo=\'%1\';").arg(proNo);
outPutMsg(QtDebugMsg, "DataModel::updateProInfosByProNo sqlDel = " + sqlDel);
// 創(chuàng)建一個可以對db執(zhí)行語句的對象
QSqlQuery query(db);
// 執(zhí)行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, "提示", "更新程序失??!");
}
}
柚子快報邀請碼778899分享:QT--SQLite
參考文章
本文內(nèi)容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。