QT 的資料庫操作(QSqlDatabase、QSqlQuery)
阿新 • • 發佈:2019-02-11
1、QSqlDatabase建立連線資料庫例項,一個QSqlDatabase的例項代表了一個數據庫連線。
Qt提供的對不同資料庫的驅動支援:
Driver Type Description:QDB2 IBM DB2QIBASE Borland InterBase DriverQMYSQL MySQL DriverQOCI Oracle Call Interface DriverQODBC ODBC Driver (includes Microsoft SQL Server)QPSQL PostgreSQL DriverQSQLITE SQLite version 3 or above下面程式碼的功能是建立連線QSQLITE型別的資料庫
QSqlDatabase db = QSqlDatabase::addDatabase("QOCI", "QSQLITE");
db.setHostName("localhost"); //資料庫主機名
db.setDatabaseName("scott"); //資料庫名
db.setUserName("stott"); //資料庫使用者名稱
db.setPassword("tiger"); //資料庫密碼
db.open(); //開啟資料庫連線 呼叫 open() 方法開啟資料庫物理連線。在開啟連線之前,連線不可用
db.close(); //釋放資料庫連線
在使用QSqlDatabase::addDatabase("QOCI","QSQLITE")函式時,第一個引數是驅動型別主鍵,第二個是連線名。
2、QSqlQuery類:操作資料庫
QSqlQuery qsQuery = QSqlQuery(db); QString strSqlText = QString("CREATE TABLE ConfigInfo ( [DicomFolderPath] VARCHAR(256), \ [OpDicomFilePath] VARCHAR(256) \ );"); qsQuery.prepare(strSqlText); qsQuery.exe(); strSqlText = "INSERT INTO ConfigInfo (DicomFolderPath, OpDicomFilePath) \ VALUES (:DicomFolderPath, :OpDicomFilePath)"; qsQuery.prepare(strSqlText); qsQuery.bindValue(":DicomFolderPath", ""); qsQuery.bindValue(":OpDicomFilePath", ""); qsQuery.exec(); CommitDB(qsQuery); bool CommitDB(QSqlQuery& qsQuery) { if (qsQuery.isActive())//成功執行sql語句 isActive會返回true,否則返回false { m_qdbDataBase.commit(); return true; } else { m_qdbDataBase.rollback(); return false; } }
以上基本完成了資料庫的建立、連線以及table的建立,下面演示查詢、刪除、增加等基本操作
3、查詢table名為UserInput裡的所有記錄
QSqlQuery qsQuery = QSqlQuery(db);
QString strSqlText("SELECT * FROM UserInput");//查詢語法
qsQuery.prepare(strSqlText);
qsQuery.exec();
while (qsQuery.next()) //依次取出查詢結果的每一條記錄,直至結束
{
UserInputData userInputData;
userInputData.m_id = qsQuery.value(0).toInt();
userInputData.m_assessDate = qsQuery.value(1).toString();
}
QSqlQuery qsQuery = QSqlQuery(db);
QString strSqlText("SELECT MAX(ID) FROM UserInput");//ID最大的值
qsQuery.prepare(strSqlText);
qsQuery.exec();
if (qsQuery.next())
{
return qsQuery.value(0).toInt();
}
else
{
return 0;
}
4、增加
QSqlQuery qsQuery = QSqlQuery(db);
QString strSqlText("INSERT INTO UserInput (ID, AssessDate) \
VALUES (:ID, :AssessDate)");
qsQuery.prepare(strSqlText);
qsQuery.bindValue(":ID", id);
qsQuery.bindValue(":AssessDate", userInputData.m_assessDate);
qsQuery.exec();
CommitDB(qsQuery);
5、更新
QSqlQuery qsQuery = QSqlQuery(db);
QString strSqlText("UPDATE UserInput SET AssessDate = :AssessDate \
WHERE ID = :ID");
qsQuery.prepare(strSqlText);
qsQuery.bindValue(":AssessDate", userInputData.m_assessDate);
qsQuery.bindValue(":ID", id);
qsQuery.exec();
CommitDB(qsQuery);
6、刪除
QSqlQuery qsQuery = QSqlQuery(db);
QString strSqlText("DELETE FROM UserInput WHERE ID = :ID");
qsQuery.prepare(strSqlText);
qsQuery.bindValue(":ID", id);
qsQuery.exec();
CommitDB(qsQuery);