Qt操作SQLite数据库教程

Qt 中操作 SQLite 数据库的步骤如下:

1. 添加 SQLite 驱动并打开数据库

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

// 创建数据库连接
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("mydatabase.db"); // 可以是绝对路径或相对路径

if (!db.open()) {
    qDebug() << "Error opening database:" << db.lastError().text();
    return;
}

2. 执行 SQL 语句

创建表
QSqlQuery query;
if (!query.exec("CREATE TABLE IF NOT EXISTS users ("
                "id INTEGER PRIMARY KEY AUTOINCREMENT,"
                "name TEXT NOT NULL,"
                "age INTEGER)")) {
    qDebug() << "Create table error:" << query.lastError().text();
}
插入数据(两种方式)
// 方式1:直接执行 SQL
query.exec("INSERT INTO users (name, age) VALUES ('Alice', 25)");

// 方式2:参数化查询(推荐)
query.prepare("INSERT INTO users (name, age) VALUES (:name, :age)");
query.bindValue(":name", "Bob");
query.bindValue(":age", 30);
query.exec();
批量插入(使用事务)
db.transaction();
QSqlQuery batchQuery;
batchQuery.prepare("INSERT INTO users (name) VALUES (?)");

for (const QString &name : {"Tom", "Jerry", "Mike"}) {
    batchQuery.addBindValue(name);
    batchQuery.exec();
}
db.commit();

3. 查询数据

QSqlQuery selectQuery("SELECT id, name, age FROM users");
while (selectQuery.next()) {
    int id = selectQuery.value(0).toInt();
    QString name = selectQuery.value("name").toString();
    int age = selectQuery.value(2).toInt();
    qDebug() << id << name << age;
}

4. 使用模型视图(示例)

#include <QSqlTableModel>
#include <QTableView>

// 创建模型
QSqlTableModel *model = new QSqlTableModel;
model->setTable("users");
model->select();

// 显示数据
QTableView *view = new QTableView;
view->setModel(model);
view->show();

5. 关闭数据库

db.close();

注意事项:

  1. SQLite 驱动默认包含在 Qt 中,不需要额外配置
  2. 数据库文件会被创建在程序的工作目录(除非指定绝对路径)
  3. 使用参数化查询可防止 SQL 注入
  4. 重要操作建议使用事务(BEGIN TRANSACTION/COMMIT)
  5. 错误检查推荐使用 lastError() 方法

常见错误处理:

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

完整示例代码可参考 Qt 官方文档:https://doc.qt.io/qt-5/sql-example.html

建议结合 Qt 的信号槽机制和 Model/View 架构实现数据库应用的高效开发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

enyp80

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

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

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

打赏作者

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

抵扣说明:

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

余额充值