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(); //链接数据库