qidao123.com技术社区-IT企服评测·应用市场

标题: Qt操纵SQLite数据库教程 [打印本页]

作者: 郭卫东    时间: 5 天前
标题: Qt操纵SQLite数据库教程
Qt 中操纵 SQLite 数据库的步骤如下:
1. 添加 SQLite 驱动并打开数据库

  1. #include <QSqlDatabase>
  2. #include <QSqlError>
  3. #include <QSqlQuery>
  4. // 创建数据库连接
  5. QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
  6. db.setDatabaseName("mydatabase.db"); // 可以是绝对路径或相对路径
  7. if (!db.open()) {
  8.     qDebug() << "Error opening database:" << db.lastError().text();
  9.     return;
  10. }
复制代码
2. 执行 SQL 语句

创建表

  1. QSqlQuery query;
  2. if (!query.exec("CREATE TABLE IF NOT EXISTS users ("
  3.                 "id INTEGER PRIMARY KEY AUTOINCREMENT,"
  4.                 "name TEXT NOT NULL,"
  5.                 "age INTEGER)")) {
  6.     qDebug() << "Create table error:" << query.lastError().text();
  7. }
复制代码
插入数据(两种方式)

  1. // 方式1:直接执行 SQL
  2. query.exec("INSERT INTO users (name, age) VALUES ('Alice', 25)");
  3. // 方式2:参数化查询(推荐)
  4. query.prepare("INSERT INTO users (name, age) VALUES (:name, :age)");
  5. query.bindValue(":name", "Bob");
  6. query.bindValue(":age", 30);
  7. query.exec();
复制代码
批量插入(利用事务)

  1. db.transaction();
  2. QSqlQuery batchQuery;
  3. batchQuery.prepare("INSERT INTO users (name) VALUES (?)");
  4. for (const QString &name : {"Tom", "Jerry", "Mike"}) {
  5.     batchQuery.addBindValue(name);
  6.     batchQuery.exec();
  7. }
  8. db.commit();
复制代码
3. 查询数据

  1. QSqlQuery selectQuery("SELECT id, name, age FROM users");
  2. while (selectQuery.next()) {
  3.     int id = selectQuery.value(0).toInt();
  4.     QString name = selectQuery.value("name").toString();
  5.     int age = selectQuery.value(2).toInt();
  6.     qDebug() << id << name << age;
  7. }
复制代码
4. 利用模子视图(示例)

  1. #include <QSqlTableModel>
  2. #include <QTableView>
  3. // 创建模型
  4. QSqlTableModel *model = new QSqlTableModel;
  5. model->setTable("users");
  6. model->select();
  7. // 显示数据
  8. QTableView *view = new QTableView;
  9. view->setModel(model);
  10. view->show();
复制代码
5. 关闭数据库

  1. db.close();
复制代码
注意事项:

常见错误处理:

  1. if (query.lastError().isValid()) {
  2.     qDebug() << "SQL Error:" << query.lastError().text();
  3.     qDebug() << "Executed SQL:" << query.lastQuery();
  4. }
复制代码
完整示例代码可参考 Qt 官方文档:https://doc.qt.io/qt-5/sql-example.html
发起联合 Qt 的信号槽机制和 Model/View 架构实现数据库应用的高效开发。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4