嵌入式開發學習———Linux環境下網絡編程學習(四)

數據庫簡介

數據庫是結構化數據的集合,用于高效存儲、檢索和管理數據。常見的數據庫類型包括關系型(如MySQL、SQLite)和非關系型(如MongoDB)。關系型數據庫使用表格形式存儲數據,并通過SQL(結構化查詢語言)操作。

SQLite3

SQLite3是輕量級、嵌入式的關系型數據庫,無需服務器,以文件形式存儲數據。適合嵌入式設備或小型應用。

C語言操作SQLite3示例

以下代碼演示如何用C語言創建SQLite3數據庫、表,并插入數據:

#include <sqlite3.h>
#include <stdio.h>int main() {sqlite3 *db;char *err_msg = 0;// 打開或創建數據庫int rc = sqlite3_open("test.db", &db);if (rc != SQLITE_OK) {fprintf(stderr, "無法打開數據庫: %s\n", sqlite3_errmsg(db));sqlite3_close(db);return 1;}// 創建表char *sql = "CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, name TEXT);";rc = sqlite3_exec(db, sql, 0, 0, &err_msg);if (rc != SQLITE_OK) {fprintf(stderr, "SQL錯誤: %s\n", err_msg);sqlite3_free(err_msg);}// 插入數據sql = "INSERT INTO users(name) VALUES('Alice');""INSERT INTO users(name) VALUES('Bob');";rc = sqlite3_exec(db, sql, 0, 0, &err_msg);if (rc != SQLITE_OK) {fprintf(stderr, "SQL錯誤: %s\n", err_msg);sqlite3_free(err_msg);}sqlite3_close(db);return 0;
}

關鍵步驟說明

  • 使用sqlite3_open打開或創建數據庫文件
  • 通過sqlite3_exec執行SQL語句(如建表、插入數據)
  • 錯誤信息通過sqlite3_errmsgerr_msg獲取
  • 最后調用sqlite3_close關閉數據庫連接

編譯時需要鏈接SQLite3庫:

gcc program.c -lsqlite3 -o program

SQLite3以簡潔高效著稱,適合資源受限的環境。通過C語言接口可直接操作數據庫文件,無需額外服務進程。

作業:

1.數據庫實現案例

#include <myhead.h>int do_add(sqlite3 *dbfd)
{int id=0;char name[20]="";char sex[10]="";int age=0;printf("請輸入家人編號:");scanf("%d",&id);printf("請輸入姓名:");scanf("%s",name);printf("請輸入性別:");scanf("%s",sex);printf("請輸入年齡:");scanf("%d",&age);getchar();char sql[128]="";char *errmsg=NULL;sprintf(sql,"insert into family values(%d,\"%s\",\"%s\",%d);",id,name,sex,age);if(sqlite3_exec(dbfd,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("sqlite3_exec insert error:%s\n",errmsg);sqlite3_free(errmsg);return -1;}printf("添加成功!!!\n");return 0;
}int do_delete(sqlite3 *dbfd)
{int id=0;printf("請輸入想要刪除的家人編號:");scanf("%d",&id);getchar();char sql[128]="";char *errmsg=NULL;sprintf(sql,"delete from family where id==%d;",id);if(sqlite3_exec(dbfd,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("sqlite3_exec delete error:%s\n",errmsg);sqlite3_free(errmsg);return -1;}printf("刪除成功!!!\n");return 0;
}int do_update(sqlite3 *dbfd)
{int id=0;printf("請輸入想要刪除的家人編號:");scanf("%d",&id);getchar();char name[20]="";char sex[10]="";int age=0;printf("請輸入修改后的姓名:");scanf("%s",name);printf("請輸入修改后的性別:");scanf("%s",sex);printf("請輸入修改后的年齡:");scanf("%d",&age);getchar();char sql[128]="";char *errmsg=NULL;sprintf(sql,"update family set name=\"%s\",sex=\"%s\",age=%d where id==%d;",name,sex,age,id);if(sqlite3_exec(dbfd,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("sqlite3_exec update error:%s\n",errmsg);sqlite3_free(errmsg);return -1;}printf("修改成功!!!\n");return 0;
}int show(void *flag,int num,char **data,char **head)
{if(*((int *)flag)==0){*((int *)flag)=1;for(int i=0;i<num;i++){printf("%s\t",head[i]);}putchar(10);}for(int i=0;i<num;i++){printf("%s\t",data[i]);}putchar(10);return 0;
}int do_show(sqlite3 *dbfd)
{int flag=0;char *sql="select * from family;";char *errmsg=NULL;if(sqlite3_exec(dbfd,sql,show,&flag,&errmsg)!=SQLITE_OK){printf("sqlite3_exec select error:%s\n",errmsg);sqlite3_free(errmsg);return -1;}printf("展示成功!!!\n");return 0;
}int do_select(sqlite3 *dbfd)
{int id=0;int flag=0;printf("請輸入想要查詢的家人編號:");scanf("%d",&id);getchar();char sql[128]="";char *errmsg=NULL;sprintf(sql,"select * from family where id==%d;",id);if(sqlite3_exec(dbfd,sql,show,&flag,&errmsg)!=SQLITE_OK){printf("sqlite3_exec select error:%s\n",errmsg);sqlite3_free(errmsg);return -1;}printf("查詢成功!!!\n");return 0;
}int main(int argc, const char *argv[])
{//打開數據庫文件sqlite3 * dbfd=NULL;if(sqlite3_open("./mydb.db",&dbfd)!=SQLITE_OK){printf("sqlite3_open error:errno:%d,errmsg:%s",sqlite3_errcode(dbfd),sqlite3_errmsg(dbfd));return -1;}//創建數據表char *sql="create table if not exists family(id int,name text,sex char,age int);";char *errmsg=NULL;if(sqlite3_exec(dbfd,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("sqlite3_exec create error:%s\n",errmsg);sqlite3_free(errmsg);return -1;}while(1){system("clear");puts("***********************************");puts("***********家庭成員管理系統********");puts("***********1.添加家人信息**********");puts("***********2.刪除家人信息**********");puts("***********3.更改家人信息**********");puts("***********4.展示家人信息**********");puts("***********5.查詢家人信息**********");puts("***********0.退出程序**************");puts("***********************************");int a=0;scanf("%d",&a);getchar();switch(a){case 1:{do_add(dbfd);}break;case 2:{do_delete(dbfd);}break;case 3:{do_update(dbfd);}break;case 4:{do_show(dbfd);}break;case 5:{do_select(dbfd);}break;case 0:{sqlite3_close(dbfd);exit(EXIT_SUCCESS);}break;default:printf("錯誤輸入,請重新輸入\n");break;}printf("按下回車刷新界面\n");while(getchar()!='\n');}return 0;
}

運行結果:

2.牛客網:

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

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

相關文章

在 CentOS 7 上搭建 OpenTenBase 集群:從源碼到生產環境的全流程指南

目 錄什么是OpenTenBaseOpenTenBase源碼編譯安裝安裝依賴創建opentenbase用戶源碼獲取編譯安裝初始化數據庫初始化數據庫集群啟動與停止服務基本使用示例開機自啟動配置總結官網教程鏈接什么是OpenTenBase OpenTenBase 是一個提供寫可靠性&#xff0c;多主節點數據同步的關系數…

LoRaWAN網絡部署全流程:從方案設計到實際落地的關鍵要點

一、覆蓋范圍&#xff1a;從理論到實踐 LoRaWAN的覆蓋距離在理論上可達15公里&#xff0c;但實際部署受地形和環境影響極大。 城市環境中&#xff0c;密集的建筑群和多徑效應常常使網關有效覆蓋半徑縮小至3至5公里&#xff1b;在空曠的農村或農田場景中&#xff0c;覆蓋范圍可提…

portswigger labs XXE漏洞利用實戰

lab1 利用外部實體注入獲取文件解決此 lab 需要讀取到/etc/passwd<!DOCTYPE test [ <!ENTITY cmd SYSTEM "file:///etc/passwd"> ]> <productId>&cmd;</productId>lab2 利用 XXE 執行 SSRF 攻擊通過構造 xxe 請求特定的 url 獲取目錄拼接…

深入理解 hash -r:解決 Linux 命令緩存難題的關鍵密鑰

前言&#xff1a;在 Linux 終端的日常操作中&#xff0c;你是否遇到過這樣的詭異場景&#xff1a;明明已經升級或切換了軟件版本&#xff08;比如 Node.js 從舊版更新到新版 &#xff09;&#xff0c;但執行命令時&#xff0c;系統卻像被“施了魔法”&#xff0c;依舊執著地調用…

onnx入門教程(二)—— PyTorch 轉 ONNX 詳解

在這一節里&#xff0c;我們將詳細介紹 PyTorch 到 ONNX 的轉換函數—— torch.onnx.export。我們希望大家能夠更加靈活地使用這個模型轉換接口&#xff0c;并通過了解它的實現原理來更好地應對該函數的報錯&#xff08;由于模型部署的兼容性問題&#xff0c;部署復雜模型時該函…

嵌入式LINUX——————網絡TCP

一、TCP連接1.TCP特點&#xff1a;&#xff08;1&#xff09;面向鏈接&#xff08;2&#xff09;面向字節流&#xff08;3&#xff09;安全可靠的傳輸協議&#xff0c;因為會先建立連接&#xff08;4&#xff09;占用資源開銷大&#xff0c;效率低&#xff0c;實時性不佳&#…

alicloud 阿里云有哪些日志 審計日志

1: 阿里有哪些audit log: Audit Related Logs Below table describe the logs available in Log Service that might be applicable to the Security Operations Team. 2: 怎么來分析呢? Overview Its recommended to built a program with SLS Consumer Group which real…

如何理解AP服務發現協議中“如果某項服務需要被配置為可通過多個不同的網絡接口進行訪問,則應為每個網絡接口使用一個獨立的客戶端服務實例”?

上一句&#xff1a;[PRS_SOMEIPSD_00238]◎ 「如果某項服務需要在多個網絡接口上提供&#xff0c;則應為每個網絡接口使用一個獨立的服務器服務實例。」(RS_SOMEIPSD_00003) 本句&#xff1a;[PRS_SOMEIPSD_00239] 「如果某項服務需要被配置為可通過多個不同的網絡接口進行訪問…

piecewise jerk算法介紹

piecewise jerk算法介紹 piecewise jerk算法是百度Apollo中的一種用于路徑和速度平滑的算法&#xff0c;該算法假設相鄰點之間的jerk為常數&#xff0c;基于該假設將平滑問題構建為二次規劃問題&#xff0c;調用osqp求解器求解。參考論文為&#xff1a;Optimal Vehicle Path Pl…

分布式蜜罐系統的部署安裝

前陣子勒索病毒泛濫&#xff0c;中小企業由于缺少專業EDR&#xff0c;態勢感知&#xff0c;IPS等設備&#xff0c;往往是在勒索事件發生之后才后知后覺&#xff0c;也因為缺乏有效的備份策略&#xff0c;導致數據&#xff0c;經濟&#xff0c;商業信譽的喪失&#xff0c;甚至還…

定時器互補PWM輸出和死區

定時器互補PWM輸出和死區互補PWM&#xff08;Complementary PWM&#xff09;H橋、全橋、半橋中的應用為什么需要死區時間互補PWM&#xff08;Complementary PWM&#xff09; 是一種特殊的 PWM 輸出模式&#xff0c;通常用于H橋、全橋或半橋電路的驅動。其核心原理是利用定時器…

嵌入式ARM程序高級調試基礎:8.QEMU ARM虛擬機與tftp配置

嵌入式ARM程序高級調試基礎:8.QEMU ARM虛擬機與tftp配置 文章目錄 嵌入式ARM程序高級調試基礎:8.QEMU ARM虛擬機與tftp配置 一.總的網絡配置過程 二.主機配置 三.QEMU ARM 網絡配置 四.主機與虛擬器之間的網絡測試 五.TFTP網絡配置 5.1 ubuntu主機安裝tftp服務器 5.2 設置tft…

【貪心算法】貪心算法六

貪心算法六 1.壞了的計算器 2.合并區間 3.無重疊區間 4.用最少數量的箭引爆氣球 點贊????收藏????關注???? 你的支持是對我最大的鼓勵,我們一起努力吧!???? 1.壞了的計算器 題目鏈接: 991. 壞了的計算器 題目分析: 算法原理: 解法一:正向推導 以3轉化…

直播預約 | CATIA MODSIM SmartCAE帶練營第3期:讓每輪設計迭代都快人一步!

▼▼免費報名鏈接▼▼ 達索系統企業數字化轉型在線研討會https://3ds.tbh5.com/EventDetail.aspx?eid1195&frpt 迅筑官網 ??

OSI參考模型TCP/IP模型 二三事

計算機網絡的學習離不開OSI參考模型&TCP/IP模型對各層功能與任務的了解就是學習的主要內容其二者的區別也是我們應該了解的其中 擁塞控制和流量控制 就是各層功能中 兩個易混淆的概念流量控制&#xff08;Flow Control&#xff09;&#xff1a;解決的是發送方和接收方之間速…

DataStream實現WordCount

目錄讀取文本數據讀取端口數據事實上Flink本身是流批統一的處理架構&#xff0c;批量的數據集本質上也是流&#xff0c;沒有必要用兩套不同的API來實現。所以從Flink 1.12開始&#xff0c;官方推薦的做法是直接使用DataStream API&#xff0c;在提交任務時通過將執行模式設為BA…

imx6ull-驅動開發篇37——Linux MISC 驅動實驗

目錄 MISC 設備驅動 miscdevice結構體 misc_register 函數 misc_deregister 函數 實驗程序編寫 修改設備樹 驅動程序編寫 miscbeep.c miscbeepApp.c Makefile 文件 運行測試 MISC 驅動也叫做雜項驅動&#xff0c;也就是當某些外設無法進行分類的時候就可以使用 MISC…

C# 項目“交互式展廳管理客戶端“針對的是“.NETFramework,Version=v4.8”,但此計算機上沒有安裝它。

C# 項目“交互式展廳管理客戶端"針對的是".NETFramework,Versionv4.8”&#xff0c;但此計算機上沒有安裝它。 解決方法&#xff1a; C# 項目“交互式展廳管理客戶端"針對的是".NETFramework,Versionv4.8”&#xff0c;但此計算機上沒有安裝它。 下載地址…

FFmpeg及 RTSP、RTMP

FFmpeg 是一個功能強大的跨平臺開源音視頻處理工具集 &#xff0c;集錄制、轉碼、編解碼、流媒體傳輸等功能于一體&#xff0c;被廣泛應用于音視頻處理、直播、點播等場景。它支持幾乎所有主流的音視頻格式和協議&#xff0c;是許多媒體軟件&#xff08;如 VLC、YouTube、抖音等…

金山辦公的服務端開發工程師-25屆春招筆試編程題

1.作弊 溪染&#xff1a;六王畢&#xff0c;四海一&#xff1b;蜀山兀&#xff0c;阿房出。覆壓三百余里&#xff0c;隔離天日。驪山北構而西折&#xff0c;直走咸陽。二川溶溶&#xff0c;流入宮墻。五步一樓&#xff0c;十步一閣&#xff1b;廊腰縵回&#xff0c;檐牙高啄&am…