【Qt】数据库实战(一)

00. 目录

01. 概述

Qt中的Qt SQL模块提供了对数据库的支持,该模块中的众多类基本上可以分为三层。

驱动层为具体的数据库和SQL接口层之间提供了底层的桥梁;SQL接口层提供了对数据库的访问,其中的QSqlDatabase类用来创建连接,QSqlQuery类可以使用

SQL语句来实现与数据库交互,其他几个类对该层提供了支持;用户接口层的几个类实现了将数据库中的数据链接到窗口部件上,它们是更高层次的抽象,即便不

熟悉SQL也可以操作数据库。如果要使用Qt SQL模块中的这些类,需要在项目文件(.pro文件)中添加QT += sql这一行代码。对应数据库部分的内容,大家可以

在帮助中查看SQL Programming关键字。

02. 开发环境

Windows系统:Windows10

Qt版本:Qt5.15或者Qt6

03. 数据库驱动

Qt SQL模块使用数据库驱动来和不同的数据库接口进行通信。由于Qt的SQL模型的接口是独立于数据库的,所以所有数据库特定的代码都包含在了这些驱动中。Qt现在支持的数据库驱动如下图所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WfTJJ8Qj-1616658483966)(assets/image-20210325152325294.png)]

需要说明的是,由于GPL许可证的兼容性问题,并不是这里列出的所有驱动插件都提供给了Qt的开源版本。下面我们通过程序来查看一下现在版本的Qt中可用的数据库插件。

在.pro文件中添加下面一行

QT += sql

程序示例:

#include <QCoreApplication>

#include <QSqlDatabase>
#include <QStringList>
#include <QDebug>


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    qDebug() << "Availabel drivers: ";
    QStringList drivers = QSqlDatabase::drivers();

    foreach(QString str, drivers)
    {
        qDebug() << str;
    }


    return 0;
}

执行结果:

Availabel drivers: 
"QSQLITE"
"QODBC"
"QODBC3"
"QPSQL"
"QPSQL7"

04. 创建数据库连接

下面使用QSLite数据库来进行一个简单的演示,创建一个数据库表,然后连接到数据库,我们更改main.cpp文件的内容如下:

#include <QCoreApplication>

#include <QSqlDatabase>
#include <QStringList>
#include <QDebug>


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);


    //创建一个SQLite数据库连接
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

    db.setDatabaseName(":memory:");

    bool ret = db.open();
    if (ret)
    {
        qDebug() << "打开数据库成功";
    }
    else
    {
        qDebug() << "打开数据库失败";
    }

    //关闭数据库
    if (db.isOpen())
    {
        db.close();
        db.removeDatabase(db.databaseName());
    }

    return 0;
}

执行结果:

打开数据库成功

05. 数据库简单操作

下面使用QSLite数据库来进行一个简单的演示,创建一个数据库表,然后查找其中的数据并进行输出。我们更改main.cpp文件的内容如下:

#include <QCoreApplication>

#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QStringList>
#include <QDebug>


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);


    //创建一个SQLite数据库连接
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

    db.setDatabaseName(":memory:");

    bool ret = db.open();
    if (ret)
    {
        qDebug() << "打开数据库成功";
    }
    else
    {
        qDebug() << "打开数据库失败";
        return -1;
    }


    //创建QSqlQuery对象
    QSqlQuery query;
    query.exec("create table student(id int primary key, name varchar)");
    query.exec("insert into student values(1, 'xiaoming')");
    query.exec("insert into student values(2, 'xiaogang')");
    query.exec("insert into student values(3, 'xiaohong')");

    //查找表中id > 2的数据
    query.exec("select id, name from student where id >= 2");

    while(query.next())
    {
        int id = query.value(0).toInt();
        QString name = query.value(1).toString();

        //输出两个值
        qDebug() << id << " " << name;
    }


    //关闭数据库
    if (db.isOpen())
    {
        db.close();
        db.removeDatabase(db.databaseName());
    }

    return 0;
}

执行结果:

打开数据库成功
2   "xiaogang"
3   "xiaohong"

06. 附录

6.1 Qt教程汇总
网址:https://dengjin.blog.csdn.net/article/details/115174639

6.2 源码下载
网址:【Qt】数据库实战(一).rar

© 版权声明
THE END
喜欢就支持一下吧
点赞456 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容