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

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

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

时间: 2024-08-06 20:00:14

QT开发(四十六)——QT数据库编程基础的相关文章

QT开发(十六)——QT绘图实例-钟表

QT开发(十六)--QT绘图实例-钟表 一.钟表实现原理 钟表的实现需要设置定时器,定时器每隔一秒发送timeout()信号到QWidget::update()槽函数,update()槽函数将会重绘一次窗口,重写重绘事件函数paintEvent(QPaintEvent *event),根据获取的当前系统时间的时钟.分钟.秒钟重绘钟表的时针.分针.秒针. QTimer *timer = new QTimer(this); timer->start(1000);//一秒钟 connect(timer

Python学习笔记(四十六)网络编程(2)— UDP编程

摘抄:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001432004977916a212e2168e21449981ad65cd16e71201000 TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据.相对TCP,UDP则是面向无连接的协议. 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包.但是,能不能到达就不知道了. 虽然

Java从零开始学四十五(Socket编程基础)

一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机. 而TCP层则提供面向应用的可靠(tcp)的或非可靠(UDP)的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的. 目前较为流行的网络编程模型是客户机/服务器(C/S)结构.即通信双方一方作为服务器等待客户提出请求并予以响应.客户则

QT开发(四十八)——数据库SQL接口层

QT开发(四十八)--数据库SQL接口层 SQL接口层提供了对数据库的访问,主要类包括Qt SQL模块中的QSqlDatabase.QSqlQuery.QSqlError.QSqlField.QSqlIndex和QSqlRecord.QSqlDatabase类用于创建数据库连接,QSqlQuery用于使用SQL语句实现与数据库交互. 一.QSqlDatabase 1.QSqlDatabase简介 QSqlDatabase类提供了通过连接访问数据库的接口,QSqlDatabase对象本身代表一个连

QT开发(四十九)——数据库用户接口层

QT开发(四十九)--数据库用户接口层 用户接口层主要包括Qt SQL模块中的QSqlQueryModel.QSqlTableModel.QSqlRelationalTableModel.用户接口层的类实现了将数据库中的数据链接到窗口部件上,是使用模型/视图框架实现的,是更高层次的抽象,即便不熟悉SQL也可以操作数据库.需要注意的是,在使用用户接口层的类之前必须先实例化QCoreApplication对象. QT中使用了自己的机制来避免使用SQL语句,提供了更简单的数据库操作及数据显示模型,分别

QT开发(十四)——QT绘图系统

QT开发(十四)--QT绘图系统 一.QT绘图原理 Qt4中的2D绘图系统称为Arthur绘图系统,可以使用相同的API在屏幕上和绘图设备上进行绘制,主要基于QPainter.QPainterDevice和 QPainterEngine.QPainter执行绘图操作,QPainterDevice提供绘图设备,是一个二维空间的抽象,QPainterEngine提供一些接口.QPainter用来执行具体的绘图相关操作,如画点,画线,填充,变换,alpha通道等.QPaintDevice类是能够进行绘

QT开发(十二)——QT事件处理机制

QT开发(十二)--QT事件处理机制 一.QT事件简介 QT程序是事件驱动的, 程序的每个动作都是由内部某个事件所触发.QT事件的发生和处理成为程序运行的主线,存在于程序整个生命周期. 常见的QT事件类型如下: 键盘事件: 按键按下和松开 鼠标事件: 鼠标移动,鼠标按键的按下和松开 拖放事件: 用鼠标进行拖放 滚轮事件: 鼠标滚轮滚动 绘屏事件: 重绘屏幕的某些部分 定时事件: 定时器到时 焦点事件: 键盘焦点移动 进入和离开事件: 鼠标移入widget之内,或是移出 移动事件: widget的

QT开发(十九)——QT内存泄漏问题

QT开发(十九)--QT内存泄漏问题 一.QT对象间的父子关系 QT最基础和核心的类是:QObject,QObject内部有一个list,会保存children,还有一个指针保存parent,当自己析构时,会自己从parent列表中删除并且析构所有的children. QT对象之间可以存在父子关系,每一个对象都可以保存它所有子对象的指针,每一个对象都有一个指向其父对象的指针. 当指定QT对象的父对象时,父对象会在子对象链表中加入该对象的指针,该对象会保存指向其父对象的指针. 当QT对象被销毁时,

QT开发(十五)——QT坐标系统

QT开发(十五)--QT坐标系统 一.QT坐标系简介 Qt中每一个窗口都有一个坐标系,默认窗口左上角为坐标原点,然后水平向右依次增大,水平向左依次减小,垂直向下依次增大,垂直向上依次减小.原点即为(0,0)点,以像素为单位增减. 二.坐标系变换 坐标系变换是利用变换矩阵来进行的, 通常利用QTransform类来设置变换矩阵.QPainter类提供了对坐标系的平移,缩放,旋转,扭曲等变换函数. void translate(const QPointF & offset) void transla