QT經過Qt SQL模塊提供了對SQL數據庫的支持,Qt SQL模塊中的API分爲三層:驅動層、SQL接口層、用戶接口層。sql
若是要使用Qt SQL模塊中的類,須要在工程文件(.pro文件)中添加QT += sql代碼。數據庫
驅動層爲具體的數據庫和SQL接口層之間提供了底層的橋樑,主要類包括Qt SQL模塊中的QSqlDriver、QSqlDriverCreator、QSqlDriverCreatorBase、QSqlDriverPlugin和QSqlResult。編程
SQL接口層提供了對數據庫的訪問,主要類包括Qt SQL模塊中的QSqlDatabase、QSqlQuery、QSqlError、QSqlField、QSqlIndex和QSqlRecord。QSqlDatabase類用於建立數據庫鏈接,QSqlQuery用於使用SQL語句實現與數據庫交互。框架
用戶接口層主要包括Qt SQL模塊中的QSqlQueryModel、QSqlTableModel、QSqlRelationalTableModel。用戶接口層的類實現了將數據庫中的數據連接到窗口部件上,是使用模型/視圖框架實現的,是更高層次的抽象,即使不熟悉SQL也能夠操做數據庫。須要注意的是,在使用用戶接口層的類以前必須先實例化QCoreApplication對象。ide
Qt SQL模塊使用數據庫驅動插件和不一樣的數據庫接口進行通訊。因爲Qt的SQL模塊的接口是獨立於數據庫的,因此全部具體數據庫的代碼包含在了這些驅動中。QT自己提供了多種數據庫驅動,而且能夠添加其餘數據庫驅動。QT提供的數據庫驅動源碼能夠做爲編寫自定義驅動的模型。spa
QT5.7版本支持的數據庫驅動以下:插件
數據庫驅動對象 |
備註接口 |
QDB2開發 |
IBM DB2 7.1及以上版本 |
QIBASE |
Borland InterBase |
QMYSQL |
Mysql |
QOCI |
Oracle Call Interface Driver |
QODBC |
ODBC |
QPSQL |
PostgreSQL 7.3及以上版本 |
QSQLITE2 |
SQLite 2版本 |
QSQLITE |
SQLite 3版本 |
QTDS |
Sybase Adaptive Server,QT 4.7開始廢棄 |
QT5.7版本支持的數據庫驅動以下:
因爲GPL許可證的兼容性問題,並非列出的全部驅動插件都提供給了Qt的開源版本。實際QT中安裝的驅動能夠根據以下代碼顯示:
#include <QCoreApplication> #include <QSqlDatabase> #include <QDebug> #include <QStringList> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); qDebug() << "Available drivers:"; QStringList drivers = QSqlDatabase::drivers(); foreach(QString driver, drivers) qDebug() << driver; return a.exec(); }
//使用MySQL數據庫驅動創建一個數據庫鏈接
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("IP");//設置主機
db.setDatabaseName("dbname"); //設置數據庫名稱
db.setUserName("user"); //設置用戶名
db.setPassword("password"); //設置密碼
bool ok = db.open(); //鏈接數據庫
//使用ODBC驅動鏈接數據庫
QSqlDatabase ldb = QSqlDatabase::addDatabase("QODBC");
ldb.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=db.mdb;UID=user;PWD=passwor");
bool ok = ldb.open();
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName(QString("DRIVER={SQL SERVER}; SERVER=%1; DATABASE=%2; UID=%3; PWD=%4;").arg("IP").arg("dbname").arg("user").arg("password"));
bool ok = db.open();
//使用SQLite數據庫驅動創建一個數據庫鏈接
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setHostName("IP");//設置主機
db.setDatabaseName("dbname"); //設置數據庫名稱
db.setUserName("user"); //設置用戶名
db.setPassword("password"); //設置密碼
bool ok = db.open(); //鏈接數據庫