Qt數據庫編程 SQL連接
如果要使用QSqlQuery或QSqlCursor類,則少要連接并打開一個數據庫連接。如果應用程序只需要一個數據庫連接,QSqlDatabase類可以創建一個為所有SQL操作所利用的默認連接,如果需要多個數據庫連接,每個連接也可以容易地建立。QSqlDatabase需要qsqldatabase.h這個頭文件。
Qt Sql模塊提供了一個平臺無關且數據庫無關的訪問SQL數據庫的接口。
Qt中的每個數據庫連接用一個QSqlDatabase對象來表示;Qt使用不同driver來和各種不同數據庫的API進行通訊。
QSqlQuery提供了直接執行任意SQL語句的特性;此外還提供了兩個高層次的無需SQL命令的數據庫接口:
QSqlTableModel和QSqlRelationalTableModel :Section 1. Connecting and Querying
在執行SQL命令前,必須先建立好同數據庫的連接。
靜態函數QSqlDatabase::addDatabase()用于創建一個新的QSqlDatabase對象,函數的***個參數指定了Qt該選擇哪個Driver來訪問數據庫。
在對創建的QSqlDatabase對象設定好host name,database name ,username和password后,需要調用open()函數來建立到數據庫的連接。
一旦到數據庫的鏈接建立好后,就可以通過QSqlQuery::exec()來執行底層數據庫所支持的任意SQL語句了。
QSqlQuery::next()返回查詢結果集中的下一行,而QSqlQuery::value()則返回當前行中的某一項的值,以QVariant的形式返回。
可以使用QSqlQuery::isActive()來檢查SQL語句的執行是否出現錯誤。
- placeholder
- QSqlQuery::prepare()
- QSqlQuery::bindValue() or QSqlQuery::addBindValue()
- QSqlQuery::exec()
Qt支持數據庫中transaction(事務)這個概念。transaction()用于啟動transaction,而commit()或rollback()用于結束transaction。
靜態函數QSqlDatabase::database(),返回指定連接所對應的QSqlDatabase對象。
QSqlDatabase::driver() 返回該連接底層所使用的dirver
QSqlDatabase::hasFeature()可用來查詢底層數據庫是否支持某項特性。
Qt允許在一個程序中創建多個數據庫連接,這中情況下在執行SQL語句時,需要為QSqlQuery的構造函數傳入要執行該語句的數據庫對應的QSqlDatabase對象。
與QSqlQuery相比,QSqlTableModel提供了一個更高層次、更抽象的接口,可以避免使用原始的SQL命令。
- QSqlTableModel::record() & QSqlTableModel::value()
- QSqlTableModel::insertRow() & QSqlTableModel::setData()
- QSqlTableModel::submitAll()
于其他model不同,在使用QSqlTableModel時,必須調用submitAll()來強制所有的修改都寫入數據庫。
當需要處理外鍵(foreign key)時,需要使用QSqlRelationalTableModel而不是QSqlTableModel。
對于使用了SQL相關類的應用程序,需要在對應的.pro中添加下面一行:"QT +=sql",這樣在鏈接時會將QtSql庫鏈入。
小結:Qt數據庫編程 SQL連接的內容介紹完了,QSqlQuery的這個類要了解清楚,希望本文能夠幫助到你,幫你解決問題。