Qt數據庫編程詳解:SQLite實戰指南
目錄
- SQLite數據庫簡介
- Qt數據庫核心類
- 數據庫操作全流程
- CRUD操作實戰
- 運行效果展示
1. SQLite數據庫簡介
SQLite是Qt內置的輕量級嵌入式數據庫:
核心優勢:
- 無需單獨安裝或配置
- 數據庫存儲在單個文件中(.db或.db3后綴)
- 支持標準SQL語法
- 適用于嵌入式設備和移動應用
- Qt提供原生支持(無需額外驅動)
?? 使用前需在.pro文件添加:
QT += sql
2. Qt數據庫核心類
數據庫操作雙核心類:
類名 | 作用 | 關鍵方法 |
---|---|---|
QSqlDatabase | 數據庫連接管理 | addDatabase() , open() , close() |
QSqlQuery | SQL語句執行和結果集操作 | exec() , prepare() , next() |
QSqlTableModel | 數據表模型(高級操作) | setTable() , select() |
QSqlError | 數據庫錯誤處理 | text() , type() |
類關系圖:
3. 數據庫操作全流程
六步完成數據庫操作:
4. CRUD操作實戰
(1) 創建數據庫和數據表
// 添加SQLite驅動
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("contacts.db"); // 數據庫文件// 打開數據庫
if(!db.open()) {qDebug() << "數據庫打開失敗:" << db.lastError().text();return;
}// 創建數據表
QSqlQuery query;
query.exec("CREATE TABLE IF NOT EXISTS contacts (""id INTEGER PRIMARY KEY AUTOINCREMENT, ""name TEXT NOT NULL, ""phone TEXT, ""email TEXT)");
(2) 插入數據(Create)
// 準備插入語句
query.prepare("INSERT INTO contacts (name, phone, email) ""VALUES (:name, :phone, :email)");// 綁定值
query.bindValue(":name", "張三");
query.bindValue(":phone", "13800138000");
query.bindValue(":email", "zhangsan@example.com");// 執行插入
if(!query.exec()) {qDebug() << "插入失敗:" << query.lastError().text();
}
(3) 查詢數據(Read)
query.exec("SELECT * FROM contacts");
while(query.next()) {int id = query.value("id").toInt();QString name = query.value("name").toString();QString phone = query.value("phone").toString();qDebug() << "ID:" << id << "| 姓名:" << name << "| 電話:" << phone;
}
(4) 更新數據(Update)
query.prepare("UPDATE contacts SET phone = :phone WHERE name = :name");
query.bindValue(":phone", "13900139000");
query.bindValue(":name", "張三");
query.exec();
(5) 刪除數據(Delete)
query.exec("DELETE FROM contacts WHERE name = '李四'");
(6) 使用模型視圖(高級)
QSqlTableModel *model = new QSqlTableModel;
model->setTable("contacts");
model->select();// 在表格視圖中顯示
QTableView *view = new QTableView;
view->setModel(model);
view->show();
5. 運行效果展示
數據庫文件結構:
contacts.db 文件內容:
┌────┬─────────┬──────────────┬──────────────────────┐
│ id │ name │ phone │ email │
├────┼─────────┼──────────────┼──────────────────────┤
│ 1 │ 張三 │ 13900139000 │ zhangsan@example.com │
│ 2 │ 王五 │ 13700137000 │ wangwu@example.com │
└────┴─────────┴──────────────┴──────────────────────┘
查詢結果輸出:
ID: 1 | 姓名: 張三 | 電話: 13900139000
ID: 2 | 姓名: 王五 | 電話: 13700137000
完整源碼:GitHub數據庫示例
官方文檔:
- Qt SQL模塊
- SQLite語法參考
最佳實踐: - 使用事務處理批量操作提升性能
- 使用參數綁定防止SQL注入攻擊
- 數據庫操作放在獨立線程避免界面卡頓
原創技術筆記,轉載需注明出處。更多系統編程內容持續更新中…