欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Qt使用SQLite數(shù)據(jù)庫(kù)實(shí)現(xiàn)數(shù)據(jù)增刪改查

 更新時(shí)間:2023年06月21日 15:46:03   作者:DS小龍哥  
這篇文章主要為大家詳細(xì)介紹了Qt如何使用SQLite數(shù)據(jù)庫(kù)實(shí)現(xiàn)數(shù)據(jù)增刪改查功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下

一、項(xiàng)目介紹

當(dāng)前文章介紹的設(shè)計(jì)的主要功能是利用 SQLite 數(shù)據(jù)庫(kù)實(shí)現(xiàn)寵物投喂器上傳數(shù)據(jù)的存儲(chǔ),并且支持?jǐn)?shù)據(jù)的增刪改查操作。其中,寵物投喂器上傳的數(shù)據(jù)包括投喂間隔時(shí)間、水溫、剩余重量等參數(shù)。

實(shí)現(xiàn)功能:

  • 創(chuàng)建 SQLite 數(shù)據(jù)庫(kù)表,用于存儲(chǔ)寵物投喂器上傳的數(shù)據(jù)。
  • 實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)表中數(shù)據(jù)的插入操作,即將從寵物投喂器接收到的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中。
  • 實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)表中數(shù)據(jù)的查詢(xún)操作,包括按照投喂間隔時(shí)間、水溫、剩余重量等參數(shù)進(jìn)行篩選,以便用戶(hù)能夠查看特定范圍內(nèi)的數(shù)據(jù)信息。
  • 實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)表中數(shù)據(jù)的修改操作,即可以修改已經(jīng)存儲(chǔ)的寵物投喂器上傳的數(shù)據(jù)。
  • 實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)表中數(shù)據(jù)的刪除操作,即可以刪除已經(jīng)存儲(chǔ)的寵物投喂器上傳的數(shù)據(jù)。

二、SQLite數(shù)據(jù)庫(kù)

SQLite是一款輕量級(jí)、開(kāi)源的嵌入式關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),設(shè)計(jì)目標(biāo)是嵌入式設(shè)備或應(yīng)用程序使用。與傳統(tǒng)的客戶(hù)端/服務(wù)器模式不同,SQLite引擎不是一個(gè)獨(dú)立的進(jìn)程,而是被集成在一個(gè)應(yīng)用程序中。應(yīng)用程序可以訪(fǎng)問(wèn)SQLite數(shù)據(jù)庫(kù)文件,讀寫(xiě)其中的數(shù)據(jù),從而實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)和管理。

以下是 SQLite 數(shù)據(jù)庫(kù)的特點(diǎn):

  • 輕量級(jí):SQLite 占用資源較小,運(yùn)行速度快,并且可以很方便地集成到應(yīng)用程序中,使其成為一個(gè)內(nèi)嵌的數(shù)據(jù)庫(kù)。
  • 無(wú)需服務(wù)器:SQLite 是一款本地化的數(shù)據(jù)庫(kù),無(wú)需專(zhuān)門(mén)的服務(wù)器進(jìn)行支持,因此對(duì)于小型應(yīng)用程序來(lái)說(shuō),是一種非常適合的解決方案。
  • 開(kāi)源:SQLite 是一款開(kāi)源的數(shù)據(jù)庫(kù),用戶(hù)可以免費(fèi)獲取其源代碼,并且可以自由地進(jìn)行修改和定制。
  • 支持 SQL:SQLite 支持完整的 SQL 標(biāo)準(zhǔn),并且在 SQL 語(yǔ)法和命令方面與其他關(guān)系型數(shù)據(jù)庫(kù)非常接近,具有較高的兼容性。
  • 可移植性:SQLite 支持多種操作系統(tǒng)和編程語(yǔ)言,如 Windows、Linux、Mac OS X、iOS、Android 等平臺(tái),以及 C/C++、Java、Python、C# 等編程語(yǔ)言。
  • 數(shù)據(jù)庫(kù)存儲(chǔ)方式: SQLite 將數(shù)據(jù)庫(kù)存儲(chǔ)在單個(gè)文件中,用戶(hù)可以根據(jù)需要將其復(fù)制或移動(dòng)到其他位置或計(jì)算機(jī)中,以方便數(shù)據(jù)的安全備份和分享。

三、在Qt里使用SQLITE數(shù)據(jù)庫(kù)

在 Qt 中,使用 SQLite 數(shù)據(jù)庫(kù)的主要流程如下:

(1)導(dǎo)入 SQLite 相關(guān)庫(kù)文件:在 Qt 項(xiàng)目中,需要先導(dǎo)入 SQLite 相關(guān)的庫(kù)文件和頭文件,以便在代碼中使用 SQLite 的相關(guān)函數(shù)和類(lèi)。

需要在項(xiàng)目文件中添加以下語(yǔ)句:

?QT += sql

這樣就可以包含 SQLite 數(shù)據(jù)庫(kù)支持的相關(guān)頭文件和類(lèi)。

(2)創(chuàng)建數(shù)據(jù)庫(kù)連接:使用 QSqlDatabase 類(lèi)可以在 Qt 中創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)連接。需要設(shè)置數(shù)據(jù)庫(kù)類(lèi)型(如 "QSQLITE"),以及數(shù)據(jù)庫(kù)文件路徑等參數(shù)。

代碼示例如下:

?QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
?db.setDatabaseName("mydatabase.db");

在實(shí)際使用時(shí),可以使用絕對(duì)或相對(duì)路徑指定數(shù)據(jù)庫(kù)文件路徑。

(3)打開(kāi)數(shù)據(jù)庫(kù):使用 QSqlDatabase 類(lèi)的 open 函數(shù)可以打開(kāi)數(shù)據(jù)庫(kù)連接。在成功打開(kāi)數(shù)據(jù)庫(kù)后,可以執(zhí)行 SQL 查詢(xún)語(yǔ)句,讀取和修改數(shù)據(jù)庫(kù)中的數(shù)據(jù)。

代碼示例:

?if(db.open())
?{
? ? ?QSqlQuery query;
? ? ?query.exec("CREATE TABLE mytable (id INTEGER PRIMARY KEY, name TEXT)");
? ? ?query.exec("INSERT INTO mytable VALUES(1, 'John')");
? ? ?query.exec("SELECT id, name FROM mytable");
? ? ?while(query.next()) {
? ? ? ? ?int id = query.value(0).toInt();
? ? ? ? ?QString name = query.value(1).toString();
? ? ? ? ?qDebug() << id << name;
? ?  }
?}

以上代碼創(chuàng)建了一個(gè)名為 "mytable" 的數(shù)據(jù)庫(kù)表,并向其中插入了一條記錄。隨后,執(zhí)行 SELECT 查詢(xún)語(yǔ)句讀取表中的數(shù)據(jù),并將結(jié)果輸出到控制臺(tái)中。

(4)關(guān)閉數(shù)據(jù)庫(kù):當(dāng)不再需要使用數(shù)據(jù)庫(kù)時(shí),應(yīng)該使用 close 函數(shù)關(guān)閉數(shù)據(jù)庫(kù)連接,以釋放資源。

代碼示例:

?db.close();

在以上流程中,使用 QSqlQuery 類(lèi)可以執(zhí)行 SQL 查詢(xún)語(yǔ)句,并獲取查詢(xún)結(jié)果。通過(guò) QSqlRecord 類(lèi)可以訪(fǎng)問(wèn)查詢(xún)結(jié)果中的字段和值。

四、完整代碼

下面是 Qt(C++)中利用 SQLite 數(shù)據(jù)庫(kù)對(duì)寵物投喂器上傳的數(shù)據(jù)進(jìn)行存儲(chǔ)管理的實(shí)現(xiàn)代碼,包括數(shù)據(jù)的增刪改查功能:

?#include <QtSql>
?#include <QDebug>
??
?// 創(chuàng)建或打開(kāi)數(shù)據(jù)庫(kù)連接
?bool createConnection()
?{
? ? ?QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
? ? ?db.setDatabaseName("petfeeder.db");
? ? ?if (!db.open()) {
? ? ? ? ?qDebug() << "Failed to connect database.";
? ? ? ? ?return false;
? ?  }
? ? ?// 創(chuàng)建 petfeeder 表
? ? ?QSqlQuery query;
? ? ?bool ret = query.exec("CREATE TABLE IF NOT EXISTS petfeeder "
? ? ? ? ? ? ? ? ? ? ? ? ? ? "(id INTEGER PRIMARY KEY AUTOINCREMENT, "
? ? ? ? ? ? ? ? ? ? ? ? ? ? "interval INTEGER, temperature REAL, weight REAL)");
? ? ?if (!ret) {
? ? ? ? ?qDebug() << "Failed to create table: " << query.lastError().text();
? ?  }
? ? ?return true;
?}
??
?// 插入數(shù)據(jù)
?void insertData(int interval, double temperature, double weight)
?{
? ? ?QSqlQuery query;
? ? ?QString sql = QString("INSERT INTO petfeeder (interval, temperature, weight) "
? ? ? ? ? ? ? ? ? ? ? ? ? ?"VALUES (%1, %2, %3)").arg(interval).arg(temperature).arg(weight);
? ? ?bool ret = query.exec(sql);
? ? ?if (!ret) {
? ? ? ? ?qDebug() << "Failed to insert data: " << query.lastError().text();
? ?  }
?}
??
?// 更新數(shù)據(jù)
?void updateData(int id, int interval, double temperature, double weight)
?{
? ? ?QSqlQuery query;
? ? ?QString sql = QString("UPDATE petfeeder SET interval=%1, temperature=%2, weight=%3 "
? ? ? ? ? ? ? ? ? ? ? ? ? ?"WHERE id=%4").arg(interval).arg(temperature).arg(weight).arg(id);
? ? ?bool ret = query.exec(sql);
? ? ?if (!ret) {
? ? ? ? ?qDebug() << "Failed to update data: " << query.lastError().text();
? ?  }
?}
??
?// 刪除數(shù)據(jù)
?void deleteData(int id)
?{
? ? ?QSqlQuery query;
? ? ?QString sql = QString("DELETE FROM petfeeder WHERE id=%1").arg(id);
? ? ?bool ret = query.exec(sql);
? ? ?if (!ret) {
? ? ? ? ?qDebug() << "Failed to delete data: " << query.lastError().text();
? ?  }
?}
??
?// 查詢(xún)數(shù)據(jù)
?void queryData()
?{
? ? ?QSqlQuery query("SELECT * FROM petfeeder");
? ? ?while (query.next()) {
? ? ? ? ?int id = query.value(0).toInt();
? ? ? ? ?int interval = query.value(1).toInt();
? ? ? ? ?double temperature = query.value(2).toDouble();
? ? ? ? ?double weight = query.value(3).toDouble();
? ? ? ? ?qDebug() << "Id:" << id << "Interval:" << interval << "Temperature:" << temperature << "Weight:" << weight;
? ?  }
?}
??
?// 主函數(shù)
?int main()
?{
? ? ?if (!createConnection()) {
? ? ? ? ?return 1;
? ?  }
? ? ?// 插入數(shù)據(jù)
? ? ?insertData(3, 25.5, 0.2);
? ? ?insertData(2, 26, 0.3);
? ? ?insertData(4, 24, 0.4);
? ? ?// 查詢(xún)數(shù)據(jù)
? ? ?queryData();
? ? ?// 更新數(shù)據(jù)
? ? ?updateData(2, 4, 27, 0.3);
? ? ?// 刪除數(shù)據(jù)
? ? ?deleteData(3);
? ? ?// 查詢(xún)數(shù)據(jù)
? ? ?queryData();
??
? ? ?return 0;
?}

在上面代碼里,使用 createConnection 函數(shù)創(chuàng)建或打開(kāi)數(shù)據(jù)庫(kù)連接,創(chuàng)建名為 petfeeder 的數(shù)據(jù)表。使用 insertData 函數(shù)向數(shù)據(jù)表中插入數(shù)據(jù),使用 updateData 函數(shù)更新數(shù)據(jù),使用 deleteData 函數(shù)刪除數(shù)據(jù),使用 queryData 函數(shù)查詢(xún)數(shù)據(jù),將結(jié)果輸出到控制臺(tái)。

到此這篇關(guān)于Qt使用SQLite數(shù)據(jù)庫(kù)實(shí)現(xiàn)數(shù)據(jù)增刪改查的文章就介紹到這了,更多相關(guān)Qt SQLite內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 對(duì)C語(yǔ)言中遞歸算法的深入解析

    對(duì)C語(yǔ)言中遞歸算法的深入解析

    C通過(guò)運(yùn)行時(shí)堆棧支持遞歸函數(shù)的實(shí)現(xiàn)。遞歸函數(shù)就是直接或間接調(diào)用自身的函數(shù)
    2013-07-07
  • C++實(shí)現(xiàn)將一個(gè)字符串中的字符替換成另一個(gè)字符串的方法

    C++實(shí)現(xiàn)將一個(gè)字符串中的字符替換成另一個(gè)字符串的方法

    這篇文章主要介紹了C++實(shí)現(xiàn)將一個(gè)字符串中的字符替換成另一個(gè)字符串的方法,需要考慮的情況比較全面,有不錯(cuò)的借鑒價(jià)值,需要的朋友可以參考下
    2014-09-09
  • 詳細(xì)對(duì)比C語(yǔ)言中的chmod()函數(shù)和fchmod()函數(shù)

    詳細(xì)對(duì)比C語(yǔ)言中的chmod()函數(shù)和fchmod()函數(shù)

    這篇文章主要介紹了C語(yǔ)言中的chmod()函數(shù)和fchmod()函數(shù)的詳細(xì)對(duì)比,兩個(gè)都是用于修改文件權(quán)限但是請(qǐng)注意實(shí)際使用上的差異,需要的朋友可以參考下
    2015-09-09
  • C++中DeviceIoCteatol的用法實(shí)例

    C++中DeviceIoCteatol的用法實(shí)例

    這篇文章主要介紹了C++中DeviceIoCteatol的用法實(shí)例,對(duì)于學(xué)習(xí)C++針對(duì)硬件的操作有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-10-10
  • Linux c中define的用法小結(jié)

    Linux c中define的用法小結(jié)

    學(xué)習(xí)了這么多年C語(yǔ)言,說(shuō)實(shí)話(huà)對(duì)宏自以為了如指掌了,沒(méi)想到看內(nèi)核代碼的時(shí)候還是那么吃力,設(shè)備驅(qū)動(dòng)代碼中有很多這樣或者那樣的宏定義,各種define,在學(xué)習(xí)的過(guò)程中將C語(yǔ)言中所出現(xiàn)的#define定義整理總結(jié)了一下,供大家借鑒和學(xué)習(xí)。
    2016-01-01
  • C++實(shí)現(xiàn)的多重繼承功能簡(jiǎn)單示例

    C++實(shí)現(xiàn)的多重繼承功能簡(jiǎn)單示例

    這篇文章主要介紹了C++實(shí)現(xiàn)的多重繼承功能,結(jié)合簡(jiǎn)單實(shí)例形式分析了C++面向?qū)ο蟪绦蛟O(shè)計(jì)中類(lèi)的定義與繼承相關(guān)操作實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-05-05
  • 基于C++中sprintf的錯(cuò)誤總結(jié)詳解

    基于C++中sprintf的錯(cuò)誤總結(jié)詳解

    本篇文章是對(duì)C++中sprintf的錯(cuò)誤進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++求最大公約數(shù)四種方法解析

    C++求最大公約數(shù)四種方法解析

    這篇文章主要為大家詳細(xì)介紹了C++求最大公約數(shù)四種方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • C++實(shí)現(xiàn)LeetCode(104.二叉樹(shù)的最大深度)

    C++實(shí)現(xiàn)LeetCode(104.二叉樹(shù)的最大深度)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(104.二叉樹(shù)的最大深度),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++處理鍵盤(pán)輸入的方法

    C++處理鍵盤(pán)輸入的方法

    這篇文章主要介紹了C++處理鍵盤(pán)輸入的方法,是C++程序設(shè)計(jì)中非常實(shí)用的技巧,需要的朋友可以參考下
    2014-10-10

最新評(píng)論