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 架構實現數據庫應用的高效開發。

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

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

相關文章

從紫光集團看基本財務分析

PE 46PE 代表投資人對他的期望是它的業績至少要增長50%才算及格。 但實際業績 一年不如一年. 所以&#xff0c;這個PE 應該是 業績倒退了&#xff0c;但是市值還沒有掉下去&#xff0c;導致運算的結果處在高PE階段。 那么隨著股價的下跌&#xff0c;這個數字會慢慢變小。 當然…

基于MNIST數據集的手寫數字識別(CNN)

目錄 一&#xff0c;模型訓練 1.1 數據集介紹 1.2 CNN模型層結構 1.3 定義CNN模型 1.4 神經網絡的前向傳播過程 1.5 數據預處理 1.6 加載數據 1.7 初始化 1.8 模型訓練過程 1.9 保存模型 二&#xff0c;模型測試 2.1 定義與訓練時相同的CNN模型架構 2.2 圖像的預處…

centos中postfix的作用

/usr/libexec/postfix/master 是 Postfix 郵件服務器的主進程&#xff0c;qmgr 和 pickup 是 Postfix 的子進程。這些進程本身是正常的&#xff0c;但如果你懷疑服務器被用于釣魚活動&#xff0c;需要進一步檢查 Postfix 的配置和日志&#xff0c;確保它沒有被濫用。 1. 檢查 P…

藍牙耳機什么牌子好?倍思值得沖不?

最近總被問“藍牙耳機什么牌子好”&#xff0c;作為踩過無數坑的資深耳機黨&#xff0c;必須安利剛入手的倍思M2s Pro主動降噪藍牙耳機&#xff01;降噪、音質、顏值全都在線&#xff0c;性價比直接拉滿。 -52dB降噪&#xff0c;通勤摸魚神器 第一次開降噪就被驚到&#xff01…

游戲引擎學習第285天:“Traversables 的事務性占用”

回顧并為當天的工作做準備 我們有一個關于玩家移動的概念&#xff0c;玩家可以在點之間移動&#xff0c;而且當這些點移動時&#xff0c;玩家會隨之移動。現在這個部分基本上已經在工作了。我們本來想實現的一個功能是&#xff1a;當玩家移動到某個點時&#xff0c;這個點能“…

java中的包機制

包機制 為了更好地組織類&#xff0c;java提供了包機制&#xff0c;用于區分類名的命名空間 包語句的語法格式為 package pkg1[. pkg2[. pkg3...]]一般利用公司域名倒置作為包名 &#xff1a; 公司域名&#xff1a;www.baidu.com 包名&#xff1a;com.baidu.www 為了能夠…

python打卡DAY22

##注入所需庫 import pandas as pd import seaborn as sns import matplotlib.pyplot as plt import random import numpy as np import time import shap # from sklearn.svm import SVC #支持向量機分類器 # # from sklearn.neighbors import KNeighborsClassifier …

CodeBuddy 開發 JSON 可視化工具實錄:JsonVision 的誕生之旅

我正在參加CodeBuddy「首席試玩官」內容創作大賽&#xff0c;本文所使用的 CodeBuddy 免費下載鏈接&#xff1a;騰訊云代碼助手 CodeBuddy - AI 時代的智能編程伙伴 &#x1f9ed; 項目起點&#xff1a;一個靈光一現的念頭 在日常的前端開發中&#xff0c;我時常需要調試復雜的…

Redis學習專題(一)配置和持久化

目錄 一.配置Redis 1.配置application.properties 2. 配置Config 3.測試連接redis 二、Redis持久化 持久化方案 RDB&#xff1a; 1、RDB基礎認識 1、具體流程如下&#xff1a; 3、小結&#xff1a; 3、Fork&Copy-On-Write 4、RDB的配置 5、默認快照的配置 6、…

[ctfshow web入門] web77

信息收集 上一題的讀取flag方式不能用了&#xff0c;使用后的回顯是&#xff1a;could not find driver 解題 同樣的查目錄方法 cvar_export(scandir("glob:///*"));die();cforeach(new DirectoryIterator("glob:///*") as $a){echo($a->__toString…

每日算法刷題Day8 5.16:leetcode定長滑動窗口4道題,用時1h

5. 2379.得到k個黑塊的最少涂色次數(簡單) 2379. 得到 K 個黑塊的最少涂色次數 - 力扣&#xff08;LeetCode&#xff09; 思想 1.返回至少出現 一次 連續 k 個黑色塊的 最少 操作次數 2.還是定長k&#xff0c;統計量就是把白色變成黑色的操作次數&#xff0c;無需記錄當前有…

很啰嗦,再次總結 DOM

DOM (文檔對象模型) 詳解 一、DOM 基礎概念 1. 定義與作用 DOM&#xff08;Document Object Model&#xff09;即文檔對象模型&#xff0c;是一種用于 HTML 和 XML 文檔的編程接口。它將文檔解析為一個由節點和對象組成的樹狀結構&#xff0c;允許程序和腳本動態訪問、修改文…

ES6 (ECMAScript 2015) 詳解

文章目錄 一、ES6簡介1.1 什么是ES6&#xff1f;1.2 為什么要學習ES6&#xff1f;1.3 瀏覽器支持情況 二、let和const關鍵字2.1 let關鍵字2.2 const關鍵字2.3 var、let和const的選擇 三、箭頭函數3.1 基本語法3.2 箭頭函數的特點3.3 何時使用箭頭函數 四、模板字符串4.1 基本語…

LeetCode 746 使用最小花費爬樓梯

當然可以&#xff01;LeetCode 746 是一道經典的動態規劃入門題&#xff0c;我來用 C 為你詳細解釋。 題目描述 給定一個整數數組 cost&#xff0c;其中每個元素 cost[i] 表示從第 i 個臺階向上爬需要支付的費用。一旦支付費用&#xff0c;你可以選擇向上爬 1 步 或 2 步。 你…

6.1.1圖的基本概念

基本概念 圖&#xff1a; 頂點集邊集 頂點集&#xff1a;所有頂點的集合&#xff0c;不能為空&#xff08;因為圖是頂點集和邊集組成&#xff0c;其中一個頂點集不能為空&#xff0c;則圖肯定不為空&#xff09; 邊集&#xff1a;所有邊的集合&#xff0c;邊是由頂點集中的2…

WeakAuras Lua Script [TOC BOSS 5 - Anub‘arak ]

WeakAuras Lua Script [TOC BOSS 5 - Anubarak ] 阿努巴拉克 - 小強中蟲范圍 插件 !WA:2!DE1B0Xrvv8UmuRmIqZwiaXQmgKycwsYUPjPLZPTz3nBYULKnBNDtlYP6o)7T7mMzNz6BMnnBefBqGacIUOsXIkSIki)rCbLkIhLi6h8t3to6h9G2dXt4R9d(rR33mt2MyepQ75KSV3BUZ9FV7VF37g54rDvgU)yX7)GrRgvlQ2Y…

【C/C++】深度探索c++對象模型_筆記

1. 對象內存布局 (1) 普通類&#xff08;無虛函數&#xff09; 成員變量排列&#xff1a;按聲明順序存儲&#xff0c;但編譯器會根據內存對齊規則插入填充字節&#xff08;padding&#xff09;。class Simple {char a; // 1字節&#xff08;偏移0&#xff09;int b; …

湖北理元理律師事務所:債務優化中的雙維支持實踐解析

在債務壓力與生活質量失衡的社會議題下&#xff0c;法律服務機構的功能邊界正在從單一的法律咨詢向復合型支持延伸。湖北理元理律師事務所通過“法律心理”雙維服務模式&#xff0c;探索債務優化與生活保障的平衡路徑&#xff0c;其方法論或為行業提供實踐參考。 法律框架&…

Python uv包管理器使用指南:從入門到精通

Python uv包管理器使用指南&#xff1a;從入門到精通 作為一名Python開發者&#xff0c;你是否曾經為虛擬環境管理和依賴包安裝而頭疼&#xff1f;今天我要向大家介紹一個強大的工具——uv包管理器&#xff0c;它將徹底改變你的Python開發體驗。 什么是uv包管理器&#xff1f…

Windows系統安全加固

掌握的加固點&#xff1a; 用戶系統檢查 口令策略檢查 日志審計檢查 安全選項檢查 信息保護檢查 2.2.1 用戶系統檢查 #檢查系統版本內核 判斷依據&#xff1a;無 檢查方式&#xff1a;命令 msinfo32 dxdiag查看 #檢查Administrator賬號是否停用 判斷依據&#xff1a;禁…