一、Qt SQL模块简介
1、Qt SQL模块简介
QT通过Qt SQL模块提供了对SQL数据库的支持,Qt SQL模块中的API分为三层:驱动层、SQL接口层、用户接口层。
如果要使用Qt SQL模块中的类,需要在工程文件(.pro文件)中添加QT += sql代码。
2、驱动层
驱动层为具体的数据库和SQL接口层之间提供了底层的桥梁,主要类包括Qt SQL模块中的QSqlDriver、QSqlDriverCreator、QSqlDriverCreatorBase、QSqlDriverPlugin和QSqlResult。
3、SQL接口层
SQL接口层提供了对数据库的访问,主要类包括Qt SQL模块中的QSqlDatabase、QSqlQuery、QSqlError、QSqlField、QSqlIndex和QSqlRecord。QSqlDatabase类用于创建数据库连接,QSqlQuery用于使用SQL语句实现与数据库交互。
4、用户接口层
用户接口层主要包括Qt SQL模块中的QSqlQueryModel、QSqlTableModel、QSqlRelationalTableModel。用户接口层的类实现了将数据库中的数据链接到窗口部件上,是使用模型/视图框架实现的,是更高层次的抽象,即便不熟悉SQL也可以操作数据库。需要注意的是,在使用用户接口层的类之前必须先实例化QCoreApplication对象。
二、数据库驱动
Qt SQL模块使用数据库驱动插件和不同的数据库接口进行通信。由于Qt的SQL模块的接口是独立于数据库的,所以所有具体数据库的代码包含在了这些驱动中。QT本身提供了多种数据库驱动,并且可以添加其他数据库驱动。QT提供的数据库驱动源码可以作为编写自定义驱动的模型。
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(); }
三、数据库连接
1、连接MySQL数据库
//使用MySQL数据库驱动建立一个数据库连接
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("IP");//设置主机
db.setDatabaseName("dbname"); //设置数据库名称
db.setUserName("user"); //设置用户名
db.setPassword("password"); //设置密码
bool ok = db.open(); //连接数据库
2、连接Acess数据库
//使用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();
3、连接SQL Server数据库
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();
4、连接SQLite数据库
//使用SQLite数据库驱动建立一个数据库连接
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setHostName("IP");//设置主机
db.setDatabaseName("dbname"); //设置数据库名称
db.setUserName("user"); //设置用户名
db.setPassword("password"); //设置密码
bool ok = db.open(); //连接数据库