Qt數據庫編程詳解:SQLite實戰指南

Qt數據庫編程詳解:SQLite實戰指南


目錄
  1. SQLite數據庫簡介
  2. Qt數據庫核心類
  3. 數據庫操作全流程
  4. CRUD操作實戰
  5. 運行效果展示

1. SQLite數據庫簡介

SQLite是Qt內置的輕量級嵌入式數據庫:

SQLite特點
零配置
無服務器
單文件存儲
事務支持

核心優勢

  • 無需單獨安裝或配置
  • 數據庫存儲在單個文件中(.db或.db3后綴)
  • 支持標準SQL語法
  • 適用于嵌入式設備和移動應用
  • Qt提供原生支持(無需額外驅動)

?? 使用前需在.pro文件添加:QT += sql


2. Qt數據庫核心類

數據庫操作雙核心類:
類名作用關鍵方法
QSqlDatabase數據庫連接管理addDatabase(), open(), close()
QSqlQuerySQL語句執行和結果集操作exec(), prepare(), next()
QSqlTableModel數據表模型(高級操作)setTable(), select()
QSqlError數據庫錯誤處理text(), type()
類關系圖:
QSqlDatabase
QSqlQuery
QSqlError
QSqlRecord
QSqlTableModel

3. 數據庫操作全流程

六步完成數據庫操作:
AppDatabase1. 添加數據庫驅動2. 設置連接參數3. 打開數據庫連接4. 執行SQL語句5. 處理結果集6. 關閉連接AppDatabase

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注入攻擊
  • 數據庫操作放在獨立線程避免界面卡頓

原創技術筆記,轉載需注明出處。更多系統編程內容持續更新中…

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/90616.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90616.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90616.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

FastAPI 與 OpenIddict 的微服務鑒權整合方案

架構概述基于微服務的身份認證架構采用OAuth 2.0/OpenID Connect協議&#xff0c;OpenIddict作為認證服務器&#xff0c;FastAPI作為資源服務器。系統包含三個核心組件&#xff1a;認證服務、API網關和業務微服務。OpenIddict負責頒發令牌&#xff0c;FastAPI通過JWT驗證訪問權…

計算兩個點的歐式距離

目錄 一、概述 二、公式 1、二維空間 2、三維空間 3、n 維空間 三、python實現 一、概述 歐式距離&#xff08;Euclidean Distance&#xff09;是一種在歐幾里得空間中度量兩個點之間距離的常用方法&#xff0c;其公式根據空間維度的不同而不同 二、公式 1、二維空間 對于二…

八股訓練--RabbitMQ

一、經典問題 1.為什么要用MQ&#xff1f; MQ的作用主要是3個&#xff0c; 第一個是流量削峰&#xff1a;當某個活動舉行時&#xff0c;訪問量可能是平時的幾百倍&#xff0c;可能一下會把服務器弄崩潰&#xff0c;所以通過MQ的形式&#xff0c;引入中間者&#xff0c;客戶端…

Elasticsearch 文檔檢索系統

學習筆記&#xff1a;Elasticsearch 文檔檢索系統 1. 技術棧與核心組件 Node.js&#xff1a;后端運行環境&#xff0c;適合構建高性能 Web 服務。Express&#xff1a;Node.js 的 Web 框架&#xff0c;簡化 API 開發。Elasticsearch&#xff1a;分布式全文檢索引擎&#xff0c;支…

如何準確查看服務器網絡的利用率?

在服務器運維與性能調優過程中&#xff0c;網絡利用率是一個不容忽視的關鍵指標。它反映了服務器帶寬資源的實際使用情況&#xff0c;是判斷系統瓶頸、規劃資源擴展、排查連接問題的重要依據。很多人誤以為網絡是否正常只要“能上網”或“Ping得通”就可以了&#xff0c;實際上…

掌握Spring聲明式事務傳播機制:AOP與ThreadLocal的協同工作

聲明式事務的傳播機制是解決多個事務方法嵌套調用時&#xff0c;事務如何創建、復用、掛起或隔離的核心邏輯。它的實現依賴于事務管理器、事務狀態管理、線程上下文綁定等組件的協同&#xff0c;本質是通過一套 “規則判斷 狀態維護” 的邏輯&#xff0c;在方法調用時動態決定…

@Transactional事務注解的批量回滾機制

關鍵機制說明&#xff1a;1.??事務注解生效??&#xff1a;Transactional(rollbackFor Exception.class)Override Transactional(rollbackFor Exception.class) public Boolean saveUser(UserDTO userDto) {SysUser sysUser new SysUser();BeanUtils.copyProperties(user…

飛算 JavaAI 深度體驗:開啟 Java 開發智能化新紀元

個人主頁&#xff1a;?喜歡做夢 歡迎 &#x1f44d;點贊 ?關注 ??收藏 &#x1f4ac;評論 目錄 一、引言 二、飛算 JavaAI 初印象與功能概覽 &#xff08;一&#xff09;初識飛算 JavaAI &#xff08;二&#xff09;核心功能模塊概覽 三、智能代碼生成功能深度體…

pandas銷售數據分析

pandas銷售數據分析 數據保存在data目錄 消費者數據&#xff1a;customers.csv商品數據&#xff1a;products.csv交易數據&#xff1a;transactions.csv customers.csv數據結構&#xff1a;字段描述customer_id客戶IDgender性別age年齡region地區membership_date會員日期produc…

訪問Windows服務器備份SQL SERVER數據庫

以前沒有直接訪問過Windows服務器,今天剛一看到的是時候有點懵,竟然下意識的使用SecureCRT遠程工具去連了一下,然后領導說,看一下用戶名,突然意識到,跟我們平時遠程桌面是一樣的。 一、 win + R 打開命令窗口 二、 輸入 mstsc 三、 輸入遠程地址 四、點擊連接,如果有彈…

C++ 面向對象 - 對象定義方法匯總

C對象定義方法匯總 1. 棧上定義方式 1.1 調用無參構造函數的定義方式 無參構造函數有兩種&#xff1a; 默認無參構造函數Demo(){}默認值列表構造函數。Demo():a{1},b{2}{} // 使用初始化列表實現對象定義方式&#xff1a; Demo d; Demo d1{}; // 以下定義方式還調用了拷貝構造…

指尖上的魔法:優雅高效的Linux命令手冊

一、Linux基礎指令 1. ls ls&#xff1a;對于目錄&#xff0c;列出該目錄下的所有子目錄與文件&#xff0c;對于文件&#xff0c;將列出文件名以及其他信息。 -a&#xff1a;列出目錄下的所有文件&#xff0c;包含以.開頭的隱藏文件 -l:列出文件的詳細信息 -d&#xff1a;將目錄…

《磁力下載工具實測:資源搜索+高速下載一站式解決方案》

嘿&#xff0c;朋友們&#xff01;我是阿燦&#xff0c;今天給大家帶來一個超實用的看片神器&#xff0c;特別適合老司機們使用&#xff0c;保證讓你眼前一亮&#xff01;推薦一款比某雷更好用的下載工具&#xff0c;搭配資源搜索神器&#xff0c;輕松獲取資源不限速。超強磁力…

Go網絡編程基礎:網絡模型與協議棧概述 - 從理論到實踐的完整指南

1. 引言 在當今的互聯網時代&#xff0c;網絡編程已經成為后端開發的核心技能。Go語言以其出色的并發性能和簡潔的語法&#xff0c;在網絡編程領域展現出了強大的優勢。從Docker、Kubernetes到眾多微服務框架&#xff0c;Go已經成為構建高性能網絡應用的首選語言之一。 你是否…

Web攻防-SSTI服務端模版注入利用分類語言引擎數據渲染項目工具挖掘思路

知識點&#xff1a; 1、WEB攻防-SSTI-利用分類&功能點 2、WEB攻防-SSTI-利用項目&挖掘思路 SSTI(Server Side Template Injection) 服務器模板注入, 服務端接收了用戶的輸入&#xff0c;將其作為 Web 應用模板內容的一部分&#xff0c;在進行目標編譯渲染的過程中&…

李沐動手學深度學習Pytorch-v2筆記【07自動求導代碼實現】

文章目錄前言自動求導實現非標量變量的反向傳播分離計算Python控制流的梯度計算前言 關于走動求導的理論知識個人有點難以理解&#xff0c;推薦大家去看https://blog.csdn.net/weixin_42831564/article/details/135658138這篇文章&#xff0c;講的很好。 自動求導實現 impor…

strchr 與 strstr 函數詳解

一.strchr - 字符查找函數1.函數原型char *strchr(const char *str, int c);2.核心功能在字符串中查找特定字符的第一次出現位置3.參數說明參數 類型 說明str const char* 要搜索的字符串c int 要查找的字符&#xff08;自動轉換為char&#xff09;4.返回值…

jakes信道模型

Jakes 模型 前面我們介紹了多徑信道合成信號可表示為&#xff1a; r(t)Re{∑i0N(t)?1ai(t)u(t?τi(t))ej2πfc(t?τi(t))?Di(t)} r(t)Re \left\{\sum_{i0}^{N(t)-1}a_{i}(t)u(t-\tau_{i}(t))e^{j2\pi f_{c}(t-\tau_{i}(t))\phi_{D_{i}}(t)} \right\} r(t)…

JVM類加載機制解析

什么是類加載器&#xff1f; 類加載器是JVM的核心組件之一&#xff0c;負責將Java字節碼文件&#xff08;.class文件&#xff09;加載到JVM內存中。由于JVM只能執行二進制字節碼&#xff0c;類加載器的作用就是將編譯后的.class文件轉換為JVM可以理解和執行的格式&#xff0c;使…

用Python和OpenCV從零搭建一個完整的雙目視覺系統(二)

本系列文章旨在系統性地闡述如何利用 Python 與 OpenCV 庫&#xff0c;從零開始構建一個完整的雙目立體視覺系統。 本項目github地址&#xff1a;https://github.com/present-cjn/stereo-vision-python.git 項目架構設計&#xff1a;藍圖、分工與工作流 在上一篇文章中&#…