当前位置:首页 > 数据库 > 正文

Qt如何建立数据库?

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

准备工作

添加依赖

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

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)。

Qt如何建立数据库? 第1张


创建数据表

使用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:

#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. 连接失败

    Qt如何建立数据库? 第2张

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

    在连接前设置编码:

    db.setConnectOptions("MYSQL_OPT_SET_CHARSET_NAME=utf8mb4");


最佳实践

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

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

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

Qt如何建立数据库? 第3张

0