QT使用SQLite 超詳細(增刪改查、包括對大量數據快速存儲和更新)

QT+SQLite

在QT中使用sqlite數據庫,有多種使用方法,在這里我只提供幾種簡單,代碼簡短的方法,包括一些特殊字符處理。在這里也給大家說明一下,如果你每次要存儲的數據量很大,建議使用事務(代碼中有體現),萬條數據不到一秒吧。

用SQlite建立一個簡單學生管理數據庫

數據庫中有兩個表一個是classstudent

Alt

class表結構
Alt

student表結果
Alt

創建工程

我的工程如下:
Alt

直接上代碼(看注釋更通透)

student.pro文件添加sql模塊。

QT       += core gui
QT       += sql #添加數據庫模塊
greaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++17# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \Student.cppHEADERS += \Student.hFORMS += \Student.ui# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

student.h文件添加相關定義。

#ifndef STUDENT_H
#define STUDENT_H#include <QWidget>#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QSqlRecord>
#include <QDebug>QT_BEGIN_NAMESPACE
namespace Ui { class Student; }
QT_END_NAMESPACEclass Student : public QWidget
{Q_OBJECTpublic:Student(QWidget *parent = nullptr);~Student();//定義一個變量,用于增刪改查QString queryString;void Add();//添加數據,不支持大量數據快速添加void Delete();//刪除數據,支持大量數據快速刪除void Update();//更新數據,若更新大量數據,可以先快速刪除后在快速添加void Select();//查詢數據,支持大量數據快速查詢void FastAdd();//在sqlite中快速添加大量數據private:Ui::Student *ui;QSqlDatabase DB;//定義數據庫名稱
};
#endif // STUDENT_H

student.cpp文件編輯。(值得一提的是,在數據庫刪除操作中,有時候要判斷限制條件是否為空,在代碼中已體現)

#include "Student.h"
#include "ui_Student.h"Student::Student(QWidget *parent): QWidget(parent), ui(new Ui::Student)
{ui->setupUi(this);//打開數據庫DB = QSqlDatabase::addDatabase("QSQLITE");DB.setDatabaseName("./StudentDB.db");//打開數據庫if (DB.open()){qDebug() << "Database opened successfully!";}else{qDebug() << "無法打開數據庫:" << DB.lastError().text();}Add();//添加數據Select();//查詢數據Update();//更新數據Delete();//刪除數據FastAdd();//對大量數據進行快速添加,嘗試過添加幾千條數據,不到一秒就添加完成
}Student::~Student()
{delete ui;
}void Student::Add()//增
{/** 在班級表中添加數據,添加的數據為班級名稱:一班班主任:李主任班級人數:25*/queryString = QString("insert into class(class_name, class_teacher ,student_number) values('%1','%2',%3) ").arg("一班").arg("李主任").arg(25);QSqlQuery query;//執行sql語句if(query.exec(queryString)){qDebug()<<"insert data Successful!";}else {qDebug()<<"insert data Failed!";}
}void Student::Delete()//刪
{//在這里有時候要判斷限制條件是否為空,這時候可以用這個sql語句,當班級名稱不為空時刪除//queryString = QString("delete from class where class_name is not null");queryString = QString("delete from class where class_name = '%1'").arg("一班");QSqlQuery query(queryString);if(query.exec()){qDebug()<<"Delete data Successful!";}else {qDebug()<<"Delete data Failed!";}
}void Student::Update()//改
{//更新數據,將班級名稱作為限制條件進行數據更新queryString = QString("update class set class_teacher='%1' ,student_number=%2 where class_name='%3' ").arg("張主任").arg(30).arg("一班");QSqlQuery query;if (query.exec(queryString)){qDebug()<<"updata data Successful!";}else{qDebug()<<"updata data Failed!";}
}void Student::Select()//查
{queryString = QString("select * from class where class_name = '%1'").arg("一班");QSqlQuery query(queryString);while(query.next()){QString class_teacher = query.value("class_teacher").toString();int student_number = query.value("student_number").toInt();qDebug()<<"班主任:"<<class_teacher;qDebug()<<"班級人數:"<<student_number;}
}void Student::FastAdd()//對大量數據進行快速添加,嘗試過添加幾千條數據,不到一秒就添加完成
{//使用事務DB.transaction();//開啟事務QSqlQuery query;query.prepare("INSERT INTO class (class_name, class_teacher, student_number) VALUES (?, ?, ?)");for (int i = 0; i < 100; ++i) {query.bindValue(0, "二班");query.bindValue(1, "張三");query.bindValue(2, i);query.exec();}DB.commit();//一次性提交,省去大量時間
}

運行完之后都出現successful,就說明,你已經掌握了qt+sqlite的增刪改查。
在這里插入圖片描述

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

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

相關文章

canvas 有趣的彈簧效果

先上效果 兩個小球之間有一根彈簧&#xff0c;這里有一條線表示&#xff0c;其中左球固定&#xff0c;在點擊開始后&#xff0c;右球開始做自由落體 思路 先做受力分析 經過受力分析可以發現&#xff0c;整個系統一共有三個力在起作用&#xff0c;我們分別把他們求出來并合成…

控制臺打印如來佛圖像

代碼 System.out.println(" _ooOoo_ \n"" o8888888o \n"" 88 \".\" 88 …

python——第十七天

方法重寫(overwrite) 、方法覆蓋(override )&#xff1a;在繼承的基礎上&#xff0c;子類繼承了父類的方法&#xff0c;如果不能滿足自己使用&#xff0c;我們就可以重寫或覆蓋該方法 函數重載(overload)&#xff1a; 在強數據類型的編程語言中(如Java、C、C等等): 函數名稱…

轉換 pytorch 格式模型為 caffe格式模型 pth2caffemodel

基于 GitHub xxradon/PytorchToCaffe 源碼&#xff0c;修改 example\resnet_pytorch_2_caffe.py 如下 import os import sys sys.path.insert(0, .)import torch from torch.autograd import Variable from torchvision.models import resnet import pytorch_to_caffe"&q…

PDI/Kettle-9.4.0.0-343源碼下載及編譯

目錄 &#x1f351;一、概要&#x1f34a;最新版本10.x&#xff08;2023-11-30&#xff09; &#x1f351;二、下載&#x1f351;三、編譯&#x1f34a;3.1、導入開發工具&#x1f34a;3.2、開始編譯&#x1f34a;3.3、編譯報錯&#x1f34a;3.4、報錯原因&#xff1a;jdk版本低…

centos7安全防護_CPU占用率超過百分之300_centos7.4中毒CPU百分之百_清理毒源---Linux工作筆記068

執行top命令的時候看到有個進程: sshd占用cpu百分之300多...而且就算是kill -9 殺掉進程以后,進程又會自動啟動 ll /proc/7298 我們執行這個命令,可以看到有個/var/tmp/sshd的文件 我們進入cd /var/tmp 然后我們執行 rm -rf sshd刪除這個文件,然后我們再去top可以看到 cpu就…

【數倉理論】

一、數倉建模方法論 1.1 ER模型&#xff08;Entity Relationship、實體關系模型、范式模型&#xff09; ER模型是Bill Inmon提出的一種建模方法&#xff0c;實體關系模型將復雜的數據抽象為兩個概念 ---- 實體和關系 該模型在范式理論上符合3NF&#xff0c;這種模型目的是減少…

測距傳感器

測距傳感器 電子元器件百科 文章目錄 測距傳感器前言一、測距傳感器是什么二、測距傳感器的類別三、測距傳感器的應用實例四、測距傳感器的作用原理總結前言 測距傳感器廣泛應用于自動化控制、機器人導航、無人駕駛、測量儀器等領域。不同類型的測距傳感器具有不同的測距范圍、…

xtu oj 1178 Rectangle

題目描述 給你兩個平行于坐標軸的矩形&#xff0c;請判斷兩者是不是相交&#xff08;面積有重合的部分&#xff09;&#xff1f; 輸入 第一行是一個整數K&#xff0c;表示樣例數。 每個樣例占兩行&#xff0c;每行是4個整數&#xff0c;表示一個矩形的對角線點的坐標&#x…

重磅!2023中國高校計算機大賽-人工智能創意賽結果出爐

目錄 中國計算機大賽-人工智能創意賽現場C4-AI大賽頒獎及留影800個AI應用&#xff1f;這屆大學生真能“搞事情”AI原生時代&#xff0c;百度要再培養500萬大模型人才 中國計算機大賽-人工智能創意賽現場 12月8日&#xff0c;杭州&#xff0c;一位“白發老人”突然摔倒在地&…

[基礎IO]文件描述符{C庫函數\系統接口\初識fd}

文章目錄 1.基礎知識1.1對文件的認識1.2對系統調用接口的認識1.3如何理解LInux下一切皆文件? 2.C語言的庫函數2.1FILE *fopen(const char *path, const char *mode);2.2對fopen()的mode的w/a的深層認識2.3fclose()2.4size_t fwrite(const void *ptr, size_t size, size_t nmem…

測試經理主管面試題

測試專業技能 請談談您對軟件測試生命周期&#xff08;STLC&#xff09;的理解 需求分析&#xff1a;在這個階段&#xff0c;測試團隊仔細分析項目需求&#xff0c;理解產品功能和非功能需求。這有助于確定測試的范圍和目標&#xff0c;為后續階段奠定基礎。測試計劃&#xf…

【桌面應用開發】Tauri是什么?基于Rust的桌面應用

自我介紹 做一個簡單介紹&#xff0c;酒架年近48 &#xff0c;有20多年IT工作經歷&#xff0c;目前在一家500強做企業架構&#xff0e;因為工作需要&#xff0c;另外也因為興趣涉獵比較廣&#xff0c;為了自己學習建立了三個博客&#xff0c;分別是【全球IT瞭望】&#xff0c;【…

深入.NET平臺和C#編程總結大全

第一章 簡單認識.NET框架 &#xff08;1&#xff09;首先我們得知道 .NET框架具有兩個主要組件&#xff1a;公共語言進行時CLR&#xff08;Common Language Runtime&#xff09;和框架類庫FCL&#xff08;Framework Class Library&#xff09; 配圖&#xff1a; &#xff08;…

JSON

JSON指的是 JavaScript 對象表示法&#xff08;JavaScript Object Notation&#xff09; javascript對象&#xff1a;javascript中&#xff0c;除開JavaScript原始值(字符串&#xff0c;數字&#xff0c;布爾值&#xff0c;null&#xff0c;正則表達式)的都是javascript對象 JS…

Java - JVM內存區域的劃分

Java 程序運行時&#xff0c;需要在內存中分配空間。為了提高運算效率&#xff0c;就對空間進行了不同區域的劃分&#xff0c;因為每一片區域都有特定的處理數據方式和內存管理方式。 分配&#xff1a;通過關鍵字new創建對象分配內存空間&#xff0c;對象存在堆中。 釋放 &…

柔性數組詳解

前言&#xff1a;柔性數組是C99中新添加的概念&#xff0c;它是結構體里面的最后一個成員&#xff0c;因為它的大小未知&#xff0c;所以很靈活&#xff0c;稱之為柔 1 柔性數組占不占結構體的空間呢&#xff1f; 不占 typedef struct Stu {char y;int x;int arr[];//有些編譯器…

數據在內存中的存儲(整型篇)

1.辨析原碼反碼補碼&#xff1a; 1.原碼&#xff1a;有32位&#xff08;int類四個字節&#xff0c;一個字節八個比特位&#xff09;&#xff0c;第一位是符號位&#xff0c;0正1負&#xff0c;其余為二進制位。 2.計算一般是對原碼進行計算&#xff0c;但在負數計算使用原碼會導…

強化學習(二)——Dueling Network(DQN改進)

與DNQ相比&#xff0c;使用優勢函數(A函數)和狀態價值函數&#xff08;V&#xff09;代替之前的Q(動作價值)函數&#xff0c; 最核心公式為 Q ? ( s , a ) A ? ( s , a ) V ? ( s ) ? max ? a A ? ( s , a ) Q^*(s,a)A^*(s,a)V^*(s)-\max_a A^*(s,a) Q?(s,a)A?(s,a)V…

高效利用內存資源之動態內存管理詳解

目錄 一、為什么存在動態內存分配 二、動態內存函數的介紹 2.1malloc 2.2free 2.3calloc 2.4realloc 三、常見的動態內存錯誤 3.1對NULL指針的解引用操作 3.2對動態開辟空間的越界訪問 3.3對非動態開辟內存使用free釋放 3.4使用free釋放一塊動態開辟內存的一部分 3.…