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();
注意事項:
- SQLite 驅動默認包含在 Qt 中,不需要額外配置
- 數據庫文件會被創建在程序的工作目錄(除非指定絕對路徑)
- 使用參數化查詢可防止 SQL 注入
- 重要操作建議使用事務(BEGIN TRANSACTION/COMMIT)
- 錯誤檢查推薦使用
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 架構實現數據庫應用的高效開發。