QT开发(四十六)——QT数据库编程基础

一、Qt SQL模块简介

1Qt SQL模块简介

    QT通过Qt SQL模块提供了对SQL数据库的支持,Qt SQL模块中的API分为三层:驱动层、SQL接口层、用户接口层。

如果要使用Qt SQL模块中的类,需要在工程文件(.pro文件)中添加QT += sql代码。

2、驱动层

    驱动层为具体的数据库和SQL接口层之间提供了底层的桥梁,主要类包括Qt SQL模块中的QSqlDriverQSqlDriverCreatorQSqlDriverCreatorBaseQSqlDriverPluginQSqlResult

3、SQL接口层

    SQL接口层提供了对数据库的访问,主要类包括Qt SQL模块中的QSqlDatabaseQSqlQueryQSqlErrorQSqlFieldQSqlIndexQSqlRecordQSqlDatabase类用于创建数据库连接,QSqlQuery用于使用SQL语句实现与数据库交互。

 

4、用户接口层

    用户接口层主要包括Qt SQL模块中的QSqlQueryModelQSqlTableModelQSqlRelationalTableModel。用户接口层的类实现了将数据库中的数据链接到窗口部件上,是使用模型/视图框架实现的,是更高层次的抽象,即便不熟悉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(); //连接数据库