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
暂无评论内容