淺談關于Qt中數(shù)據(jù)庫編程學習筆記
Qt數(shù)據(jù)庫編程是本文要介紹的內(nèi)容,主要是來學習在QT中數(shù)據(jù)庫的編程和數(shù)據(jù)庫的使用方法,具體內(nèi)容來看本文詳解。
QtSql模塊提供了一個平臺無關且數(shù)據(jù)庫無關的訪問SQL數(shù)據(jù)庫的接口。Qt中的每個數(shù)據(jù)庫連接用一個QSqlDatabase對象來表示;Qt使用不同driver來和各種不同數(shù)據(jù)庫的API進行通訊。
QSqlQuery提供了直接執(zhí)行任意SQL語句的特性;此外還提供了兩個高層次的無需SQL命令的數(shù)據(jù)庫接口:
- QSqlTableModel和QSqlRelationalTableModelSection1.ConnectingandQuerying
在執(zhí)行SQL命令前,必須先建立好同數(shù)據(jù)庫的連接。
靜態(tài)函數(shù)QSqlDatabase::addDatabase()用于創(chuàng)建一個新的QSqlDatabase對象,函數(shù)的***個參數(shù)指定了Qt該選擇哪個Driver來訪問數(shù)據(jù)庫。
在對創(chuàng)建的QSqlDatabase對象設定好hostname,databasename,username和password后,需要調(diào)用open()函數(shù)來建立到數(shù)據(jù)庫的連接。
一旦到數(shù)據(jù)庫的鏈接建立好后,就可以通過QSqlQuery::exec()來執(zhí)行底層數(shù)據(jù)庫所支持的任意SQL語句了。
QSqlQuery::next()返回查詢結(jié)果集中的下一行,而QSqlQuery::value()則返回當前行中的某一項的值,以QVariant的形式返回。
可以使用QSqlQuery::isActive()來檢查SQL語句的執(zhí)行是否出現(xiàn)錯誤。
- placeholder
- QSqlQuery::prepare()
- QSqlQuery::bindValue()orQSqlQuery::addBindValue()
- QSqlQuery::exec()
Qt支持數(shù)據(jù)庫中transaction(事務)這個概念。transaction()用于啟動transaction,而commit()或rollback()用于結(jié)束transaction。
靜態(tài)函數(shù)QSqlDatabase::database(),返回指定連接所對應的QSqlDatabase對象。
- QSqlDatabase::driver()返回該連接底層所使用的dirver
- QSqlDatabase::hasFeature()可用來查詢底層數(shù)據(jù)庫是否支持某項特性。
Qt允許在一個程序中創(chuàng)建多個數(shù)據(jù)庫連接,這中情況下在執(zhí)行SQL語句時,需要為QSqlQuery的構(gòu)造函數(shù)傳入要執(zhí)行該語句的數(shù)據(jù)庫對應的QSqlDatabase對象。
與QSqlQuery相比,QSqlTableModel提供了一個更高層次、更抽象的接口,可以避免使用原始的SQL命令。
- QSqlTableModel::record()&QSqlTableModel::value()
- QSqlTableModel::insertRow()&QSqlTableModel::setData()
QSqlTableModel::submitAll(), 與其他model不同,在使用QSqlTableModel時,必須調(diào)用submitAll()來強制所有的修改都寫入數(shù)據(jù)庫。
當需要處理外鍵(foreignkey)時,需要使用QSqlRelationalTableModel而不是QSqlTableModel。
對于使用了SQL相關類的應用程序,需要在對應的.pro中添加下面一行:"QT+=sql",這樣在鏈接時會將QtSql庫鏈入。
小結(jié):淺談關于Qt中數(shù)據(jù)庫編程學習筆記的內(nèi)容介紹完了,希望通過本文的學習能對你有所幫助!