Qt6.5示例:学习QSqlDatabase创建和访问SQLite数据库

01 QSqlDatabase介绍

QSqlDatabase是用于管理数据库连接的一个类。它提供了一种方便的方式来连接到各种数据库,包括SQLite、MySQL、PostgreSQL等。QSqlDatabase允许你设置数据库连接参数、执行SQL查询、处理结果集等。

02 SQLite数据库介绍

SQLite 是一个轻量级的数据库系统,它不是一个服务器进程或守护进程,而是一个单个跨平台的磁盘文件,包含一个完整的数据库。它作为应用程序的库提供,允许应用程序使用 SQL 语言来创建、修改和管理数据库文件。

SQLite数据库文件扩展名一般是(.db)。

03 QSqlDatabase访问SQLite数据库

  • 连接或创建一个SQLite数据库:
/**** 例子: ****/
#include <QSqlDatabase>

// 添加 SQLite 数据库驱动。
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
// 设置数据库路径。
db.setDatabaseName("sqlite_demo.db");
// 打开数据库,数据库文件存在则连接,不存在则创建。
db.open();
  • 创建表:

示例说明:创建一张简单的表(t_test),包含f_id, f_name, f_description 三个字段。

/**** 例子: ****/
#include <QSqlQuery>

// 创建一张简单的表(t_test),包含f_id, f_name, f_description 三个字段。
QSqlQuery query(db);
query.exec("CREATE TABLE t_test (f_id INTEGER PRIMARY KEY, f_name VARCHAR(32), f_description TEXT);");
  • 插入表记录:
/**** 例子: ****/
#include <QSqlQuery>

// 插入三条记录。
QSqlQuery query(db);
query.exec("INSERT INTO t_test (f_id, f_name, f_description) VALUES (1, 'C++', '20YC编程');");
query.exec("INSERT INTO t_test (f_id, f_name, f_description) VALUES (2, 'QT', '20YC编程');");
query.exec("INSERT INTO t_test (f_id, f_name, f_description) VALUES (3, 'MFC', '20YC编程');");
  • 删除表记录:
/**** 例子: ****/
#include <QSqlQuery>

// 删除 f_id=3 记录。
QSqlQuery query(db);
query.exec("DELETE FROM t_test WHERE f_id=3;");
  • 遍历表记录:

示例说明:列出表所有记录数据。

/**** 例子: ****/
#include <QSqlQuery>

// 遍历表所有记录数据。
QSqlQuery query(db);
query.exec("SELECT * FROM t_test");
while (query.next())
{
    int id = query.value(0).toInt();
    QString name = query.value(1).toString();
    QString description = query.value(2).toString();
}
  • 关闭数据库:
// 访问函数。
void close()

/**** 例子: ****/

db.setDatabaseName("sqlite_demo.db");
//...
db.close();

04 内存数据库

QSqlDatabase支持使用内存数据库,不需要创建数据库文件。内存数据库创建示例如下:

/**** 例子: ****/
#include <QSqlDatabase>

// 添加 SQLite 数据库驱动。
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
// 设置使用内存数据库。
db.setDatabaseName(":memory:");
// 打开内存数据库。
db.open();

05 QSqlDatabase访问SQLite数据库完整示例

#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>

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

    // 添加 SQLite 数据库驱动。
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    // 设置数据库路径。
    db.setDatabaseName("./sqlite_demo.db");
    // 打开数据库,数据库文件存在则连接,不存在则创建。
    if (!db.open()) {
        qDebug() << "SQLite数据库打开失败。";
        return -1;
    }
    else {
        qDebug() << "成功打开SQLite数据库。";
    }

    // 创建一张简单的表(t_test),包含f_id, f_name, f_description 三个字段。
    QSqlQuery query(db);
    if (query.exec("CREATE TABLE t_test (f_id INTEGER PRIMARY KEY, f_name VARCHAR(32), f_description TEXT);")) {
        qDebug() << "表创建成功。";
    }
    else {
        qDebug() << "表创建失败。";
    }

    // 插入三条记录。
    query.exec("INSERT INTO t_test (f_id, f_name, f_description) VALUES (1, 'C++', '20YC编程');");
    query.exec("INSERT INTO t_test (f_id, f_name, f_description) VALUES (2, 'QT', '20YC编程');");
    query.exec("INSERT INTO t_test (f_id, f_name, f_description) VALUES (3, 'MFC', '20YC编程');");

    // 删除 f_id=3 记录。
    query.exec("DELETE FROM t_test WHERE f_id=3;");

    // 遍历数据表所有记录。
    query.exec("SELECT * FROM t_test");
    while (query.next()) {
        int id = query.value(0).toInt();
        QString name = query.value(1).toString();
        QString description = query.value(2).toString();
        qDebug() << "ID: " << id << ", Name: " << name << ", Description: " << description;
    }
    
    return 0;
}

运行这个程序将创建一个名为"sqlite_demo.db"的SQLite数据库文件。

06 附录:完整源码

关注公众号下载本示例完整源码(19_QSqlDatabase_example.zip)。

-【End】-

#想了解更多精彩内容,关注下方公众号,还有示例源码、开发工具免费下载。

喜欢本文章,记得点赞、分享、关注哦~

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

20YC编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值