QT5下SQLite的增刪改查示例程式碼
阿新 • • 發佈:2018-12-27
Author: Kagula
Date: 2016-8-10
Envrionment: Qt 5.6
Introduction:
從專案中抽出來的如何操作sqlite的程式碼,這裡記下,免得時間久忘記了。
測試示例程式碼
void MainWindow::OnAdd() { MySQLiteEscortStaffFingerPrint db; std::vector<EscortStaffFingerPrint> vecAdd; vecAdd.push_back(EscortStaffFingerPrint("0","0","2","fp","fp-md5")); vecAdd.push_back(EscortStaffFingerPrint("1","3","4","fp2","fp2-md5")); db.TableAdd(vecAdd); } void MainWindow::OnDelete() { std::vector<QString> vecDel; vecDel.push_back("0"); vecDel.push_back("1"); MySQLiteEscortStaffFingerPrint db; db.TableDelete(vecDel); } void MainWindow::OnModify() { std::vector<EscortStaffFingerPrint> vecModify; vecModify.push_back(EscortStaffFingerPrint("2","23","24","fp22","fp22-md5")); MySQLiteEscortStaffFingerPrint db; db.TableModify(vecModify); }
新建資料庫的示例程式碼
標頭檔案
#ifndef MYSQLITE_H
#define MYSQLITE_H
#include <Qtsql/QSqlDatabase>
/*
* parent class
* function
* [1]開啟或新建DB
* [2]關閉DB
* */
class MySQLite
{
public:
MySQLite();
~MySQLite();
private:
QSqlDatabase m_dbconn;
};
#endif // MYSQLITE_H
實現檔案
#include "mysqlite.h" #include <Qtsql/QSqlQuery> #include <QDebug> MySQLite::MySQLite() { m_dbconn = QSqlDatabase::addDatabase("QSQLITE"); //新增SQLite資料庫驅動 QString fullPath = "mytest.db"; m_dbconn.setDatabaseName(fullPath); //在工程目錄新建一個mytest.db的檔案 if(!m_dbconn.open()) { qDebug()<<"open "<<fullPath<<" failed!"; } } MySQLite::~MySQLite() { m_dbconn.close(); }
增刪改查的示例程式碼
標頭檔案
#ifndef MYSQLITEESCORTSTAFFFINGERPRINT_H #define MYSQLITEESCORTSTAFFFINGERPRINT_H #include "mysqlite.h" #include <QString> #include <vector> /* * [1]不支援執行緒,不建議long life span! * [2]class例項化後,使用完畢,應立即釋放。 * [3]服務端會把modify動作拆成delete,add兩個動作,所以理論上不會有修改現存記錄的動作。 * 除非使用者直接修改資料庫EscortStaffFingerPrint表記錄。 * */ struct EscortStaffFingerPrint{ QString idEscortStaffFingerPrint; QString idescortstaff; QString fingersequence; QString fingerprint; QString fingerprintmd5; EscortStaffFingerPrint(){} EscortStaffFingerPrint(QString idEscortStaffFingerPrint, QString idescortstaff, QString fingersequence, QString fingerprint, QString fingerprintmd5) { this->idEscortStaffFingerPrint = idEscortStaffFingerPrint; this->idescortstaff = idescortstaff; this->fingersequence = fingersequence; this->fingerprint = fingerprint; this->fingerprintmd5=fingerprintmd5; } }; struct EscortStaffFingerPrintSimple{ QString idEscortStaffFingerPrint; QString fingerprintmd5; }; class MySQLiteEscortStaffFingerPrint:public MySQLite { public: MySQLiteEscortStaffFingerPrint(); int m_maxid; std::vector<EscortStaffFingerPrintSimple> GetTableInfo(); void TableQuery(const QString &idescortstaff, const QString &fingersequence, QString &sRegTemplate,QString &sRegTemplate10); void TableDelete(std::vector<QString> vecIdEscortStaffFingerPrint); void TableAdd(std::vector<EscortStaffFingerPrint> vecAdd); void TableModify(std::vector<EscortStaffFingerPrint> vecModify); }; #endif // MYSQLITEESCORTSTAFFFINGERPRINT_H
實現檔案
#include "mysqliteescortstafffingerprint.h"
#include <QDebug>
#include <QSqlQuery>
MySQLiteEscortStaffFingerPrint::MySQLiteEscortStaffFingerPrint():MySQLite()
{
m_maxid = 0;
QSqlQuery query;
//sql originated from visual paradigm project.
QString sql="CREATE TABLE EscortStaffFingerPrint (idEscortStaffFingerPrint number(10) NOT NULL, "
"idescortstaff number(10) NOT NULL, fingersequence number(2) DEFAULT 0 NOT NULL, "
"fingerprint varchar2(3072) NOT NULL, fingerprintmd5 varchar2(32) NOT NULL);";
bool success = query.exec(sql);
if(success){
qDebug()<<"Create Table Success! \n";
}else{
//table is already exist!
QString sql = "select idEscortStaffFingerPrint from EscortStaffFingerPrint "
"order by idEscortStaffFingerPrint desc limit 0,1";
QSqlQuery sql_query;
sql_query.prepare(sql);
if(sql_query.exec())
{
if(sql_query.next())
{
m_maxid = sql_query.value(0).toInt();
}
}
}
qDebug()<<"m_maxid="<<m_maxid<<"\n";
}
std::vector<EscortStaffFingerPrintSimple> MySQLiteEscortStaffFingerPrint::GetTableInfo()
{
std::vector<EscortStaffFingerPrintSimple> vecR;
if(m_maxid<=0)
return vecR;
QString sql = "select idEscortStaffFingerPrint,fingerprintmd5 from EscortStaffFingerPrint "
"order by idEscortStaffFingerPrint";
QSqlQuery sql_query;
sql_query.prepare(sql);
if(sql_query.exec())
{
while(sql_query.next())
{
EscortStaffFingerPrintSimple rec;
rec.idEscortStaffFingerPrint = sql_query.value(0).toString();
rec.fingerprintmd5 = sql_query.value(1).toString();
vecR.push_back(rec);
}
}
return vecR;
}
void MySQLiteEscortStaffFingerPrint::TableDelete(std::vector<QString> vecIdEscortStaffFingerPrint)
{
for(unsigned int i=0;i<vecIdEscortStaffFingerPrint.size();i++)
{
QSqlQuery sql_delete;
sql_delete.prepare("delete from EscortStaffFingerPrint where idEscortStaffFingerPrint=?");
int idEscortStaffFingerPrint = vecIdEscortStaffFingerPrint[i].toInt();
sql_delete.addBindValue(idEscortStaffFingerPrint);
if(!sql_delete.exec())
{
qDebug()<<"delete record ["<<vecIdEscortStaffFingerPrint[i]<<"] in EscortStaffFingerPrint table failed!";
}
}
}
void MySQLiteEscortStaffFingerPrint::TableAdd(std::vector<EscortStaffFingerPrint> vecAdd)
{
for(int i=0;i<vecAdd.size();i++)
{
QSqlQuery sql_add;
sql_add.prepare("insert into EscortStaffFingerPrint values(?,?,?,?,?)");
sql_add.addBindValue(vecAdd[i].idEscortStaffFingerPrint.toInt());
sql_add.addBindValue(vecAdd[i].idescortstaff.toInt());
sql_add.addBindValue(vecAdd[i].fingersequence.toInt());
sql_add.addBindValue(vecAdd[i].fingerprint);
sql_add.addBindValue(vecAdd[i].fingerprintmd5);
if(!sql_add.exec())
{
qDebug()<<"insert record ["<<vecAdd[i].idEscortStaffFingerPrint<<"] in EscortStaffFingerPrint table failed!";
}
}
}
void MySQLiteEscortStaffFingerPrint::TableModify(std::vector<EscortStaffFingerPrint> vecModify)
{
for(int i=0;i<vecModify.size();i++)
{
QSqlQuery sql_modify;
sql_modify.prepare("update EscortStaffFingerPrint set idescortstaff=?,"
"fingersequence=?,fingerprint=?,fingerprintmd5=?"
" where idEscortStaffFingerPrint=?");
sql_modify.addBindValue(vecModify[i].idescortstaff.toInt());
sql_modify.addBindValue(vecModify[i].fingersequence.toInt());
sql_modify.addBindValue(vecModify[i].fingerprint);
sql_modify.addBindValue(vecModify[i].fingerprintmd5);
sql_modify.addBindValue(vecModify[i].idEscortStaffFingerPrint.toInt());
if(!sql_modify.exec())
{
qDebug()<<"modify record ["<<vecModify[i].idEscortStaffFingerPrint<<"] in EscortStaffFingerPrint table failed!";
}//end if
}//end for
}//end function
void MySQLiteEscortStaffFingerPrint::TableQuery(const QString &idescortstaff,
const QString &fingersequence,
QString &sRegTemplate,QString &sRegTemplate10)
{
std::vector<EscortStaffFingerPrintSimple> vecR;
if(m_maxid<=0)
return;
QString sql = "select fingerprint from EscortStaffFingerPrint "
"where idescortstaff=? and fingersequence=?";
QSqlQuery sql_query;
sql_query.prepare(sql);
sql_query.bindValue(0,idescortstaff.toInt());
sql_query.bindValue(1,fingersequence.toInt());
if(sql_query.exec())
{
if(sql_query.next())
{
QString fingerPrint = sql_query.value(0).toString();
QStringList Str_List = fingerPrint.split(",");
if(Str_List.size()==2)
{
sRegTemplate = Str_List[0];
sRegTemplate10 = Str_List[1];
}
}
}//end if
}//end function
附: .pro檔案片段
QT += core gui printsupport axcontainer sql