Qt如何建立数据库?

在Qt中建立数据库需使用QtSql模块:创建QSqlDatabase对象,指定数据库类型(如QSQLITE);调用open()连接数据库;通过QSqlQuery执行SQL语句创建表结构,需在pro文件中添加QT += sql

准备工作

添加依赖

在项目文件(.pro)中添加数据库模块:

Qt如何建立数据库?

QT += sql

包含头文件

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

连接数据库

SQLite(内置,无需安装)

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");  // 指定驱动类型
db.setDatabaseName("my_database.db");  // 数据库文件名(内存数据库用 ":memory:")
if (!db.open()) {
    qDebug() << "Error: Failed to connect database." << db.lastError();
    return;
}

MySQL(需安装驱动和服务器)

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("localhost");    // 主机地址
db.setPort(3306);               // 端口
db.setDatabaseName("test_db");  // 数据库名
db.setUserName("root");         // 用户名
db.setPassword("123456");       // 密码
if (!db.open()) {
    qDebug() << "MySQL Error:" << db.lastError().text();
}

注意:MySQL需先安装驱动(Windows默认提供,Linux需安装libqt5sql5-mysql)。


创建数据表

使用QSqlQuery执行SQL语句:

QSqlQuery query;
bool success = query.exec(
    "CREATE TABLE IF NOT EXISTS users ("
    "id INTEGER PRIMARY KEY AUTOINCREMENT, "
    "name VARCHAR(50) NOT NULL, "
    "email VARCHAR(50) UNIQUE)"
);
if (!success) {
    qDebug() << "Create table error:" << query.lastError();
}

插入数据

直接执行SQL

query.exec("INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com')");

参数化绑定(防SQL注入)

query.prepare("INSERT INTO users (name, email) VALUES (?, ?)");
query.addBindValue("Bob");
query.addBindValue("bob@test.com");
query.exec();

查询数据

if (query.exec("SELECT id, name, email FROM users")) {
    while (query.next()) {
        int id = query.value("id").toInt();
        QString name = query.value("name").toString();
        QString email = query.value("email").toString();
        qDebug() << "User:" << id << name << email;
    }
} else {
    qDebug() << "Query error:" << query.lastError();
}

错误处理

每次数据库操作后检查错误:

if (query.lastError().isValid()) {
    qDebug() << "SQL Error:" << query.lastError().text();
}

使用模型类(高级操作)

Qt提供QSqlTableModel简化CRUD:

Qt如何建立数据库?

#include <QSqlTableModel>
QSqlTableModel *model = new QSqlTableModel;
model->setTable("users");
model->select();  // 加载数据
// 获取第一行数据
QString name = model->record(0).value("name").toString();

关闭连接

db.close();  // 显式关闭(析构时也会自动关闭)

常见问题

  1. 驱动未加载
    检查是否遗漏QT += sql,或调用QSqlDatabase::drivers()查看可用驱动列表。

  2. 连接失败

    • MySQL:确保服务已启动,用户权限正确。
    • SQLite:检查文件路径是否可写。
  3. 中文乱码
    在连接前设置编码:

    db.setConnectOptions("MYSQL_OPT_SET_CHARSET_NAME=utf8mb4");

最佳实践

  • 使用事务:批量操作时提升性能
    db.transaction();
    // 批量插入...
    db.commit();
  • 参数化查询:避免SQL注入风险
  • 资源释放:及时关闭数据库连接

通过以上步骤,您已掌握在Qt中操作数据库的核心方法,根据需求扩展其他SQL语句(如更新、删除)即可。

Qt如何建立数据库?

引用说明参考Qt官方文档(Database Module)及最佳实践总结,代码示例在Qt 6.5环境下验证通过。

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/46452.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年7月5日 06:26
下一篇 2025年6月9日 11:38

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN