一、項目介紹
當前文章介紹的設計的主要功能是利用 SQLite 數據庫實現寵物投喂器上傳數據的存儲,并且支持數據的增刪改查操作。其中,寵物投喂器上傳的數據包括投喂間隔時間、水溫、剩余重量等參數。
實現功能:
- 創建 SQLite 數據庫表,用于存儲寵物投喂器上傳的數據。
- 實現對數據庫表中數據的插入操作,即將從寵物投喂器接收到的數據存儲到數據庫中。
- 實現對數據庫表中數據的查詢操作,包括按照投喂間隔時間、水溫、剩余重量等參數進行篩選,以便用戶能夠查看特定范圍內的數據信息。
- 實現對數據庫表中數據的修改操作,即可以修改已經存儲的寵物投喂器上傳的數據。
- 實現對數據庫表中數據的刪除操作,即可以刪除已經存儲的寵物投喂器上傳的數據。
二、SQLite數據庫
SQLite是一款輕量級、開源的嵌入式關系型數據庫管理系統(RDBMS),設計目標是嵌入式設備或應用程序使用。與傳統的客戶端/服務器模式不同,SQLite引擎不是一個獨立的進程,而是被集成在一個應用程序中。應用程序可以訪問SQLite數據庫文件,讀寫其中的數據,從而實現數據的存儲和管理。
以下是 SQLite 數據庫的特點:
- 輕量級:SQLite 占用資源較小,運行速度快,并且可以很方便地集成到應用程序中,使其成為一個內嵌的數據庫。
- 無需服務器:SQLite 是一款本地化的數據庫,無需專門的服務器進行支持,因此對于小型應用程序來說,是一種非常適合的解決方案。
- 開源:SQLite 是一款開源的數據庫,用戶可以免費獲取其源代碼,并且可以自由地進行修改和定制。
- 支持 SQL:SQLite 支持完整的 SQL 標準,并且在 SQL 語法和命令方面與其他關系型數據庫非常接近,具有較高的兼容性。
- 可移植性:SQLite 支持多種操作系統和編程語言,如 Windows、Linux、Mac OS X、iOS、Android 等平臺,以及 C/C++、Java、Python、C# 等編程語言。
- 數據庫存儲方式: SQLite 將數據庫存儲在單個文件中,用戶可以根據需要將其復制或移動到其他位置或計算機中,以方便數據的安全備份和分享。
三、在Qt里使用SQLITE數據庫
在 Qt 中,使用 SQLite 數據庫的主要流程如下:
(1)導入 SQLite 相關庫文件:在 Qt 項目中,需要先導入 SQLite 相關的庫文件和頭文件,以便在代碼中使用 SQLite 的相關函數和類。
需要在項目文件中添加以下語句:
QT += sql
這樣就可以包含 SQLite 數據庫支持的相關頭文件和類。
(2)創建數據庫連接:使用 QSqlDatabase 類可以在 Qt 中創建一個數據庫連接。需要設置數據庫類型(如 "QSQLITE"),以及數據庫文件路徑等參數。
代碼示例如下:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("mydatabase.db");
在實際使用時,可以使用絕對或相對路徑指定數據庫文件路徑。
(3)打開數據庫:使用 QSqlDatabase 類的 open 函數可以打開數據庫連接。在成功打開數據庫后,可以執行 SQL 查詢語句,讀取和修改數據庫中的數據。
代碼示例:
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;
}
}
以上代碼創建了一個名為 "mytable" 的數據庫表,并向其中插入了一條記錄。隨后,執行 SELECT 查詢語句讀取表中的數據,并將結果輸出到控制臺中。
(4)關閉數據庫:當不再需要使用數據庫時,應該使用 close 函數關閉數據庫連接,以釋放資源。
代碼示例:
db.close();
在以上流程中,使用 QSqlQuery 類可以執行 SQL 查詢語句,并獲取查詢結果。通過 QSqlRecord 類可以訪問查詢結果中的字段和值。
四、完整代碼
下面是 Qt(C++)中利用 SQLite 數據庫對寵物投喂器上傳的數據進行存儲管理的實現代碼,包括數據的增刪改查功能:
#include < QtSql >
#include < QDebug >
?
// 創建或打開數據庫連接
bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("petfeeder.db");
if (!db.open()) {
qDebug() < < "Failed to connect database.";
return false;
}
// 創建 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;
}
?
// 插入數據
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();
}
}
?
// 更新數據
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();
}
}
?
// 刪除數據
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();
}
}
?
// 查詢數據
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;
}
}
?
// 主函數
int main()
{
if (!createConnection()) {
return 1;
}
// 插入數據
insertData(3, 25.5, 0.2);
insertData(2, 26, 0.3);
insertData(4, 24, 0.4);
// 查詢數據
queryData();
// 更新數據
updateData(2, 4, 27, 0.3);
// 刪除數據
deleteData(3);
// 查詢數據
queryData();
?
return 0;
}
在上面代碼里,使用 createConnection
函數創建或打開數據庫連接,創建名為 petfeeder 的數據表。使用 insertData
函數向數據表中插入數據,使用 updateData
函數更新數據,使用 deleteData
函數刪除數據,使用 queryData
函數查詢數據,將結果輸出到控制臺。
審核編輯:湯梓紅
-
數據庫
+關注
關注
7文章
3794瀏覽量
64360 -
函數
+關注
關注
3文章
4327瀏覽量
62569 -
C++
+關注
關注
22文章
2108瀏覽量
73618 -
Qt
+關注
關注
1文章
302瀏覽量
37899 -
SQlite
+關注
關注
0文章
78瀏覽量
15936
發布評論請先 登錄
相關推薦
評論