本文來(lái)源電子發(fā)燒友社區(qū),作者:h1654155285.8644, 帖子地址:https://bbs.elecfans.com/jishu_2299992_1_1.html
一、前言
RZ/GL2型開(kāi)發(fā)板內(nèi)置了sqlite3數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)是一款輕型的數(shù)據(jù)庫(kù),它占用資源非常的低,只需要幾百K的內(nèi)存就夠了。本人研究項(xiàng)目中需要使用到數(shù)據(jù)庫(kù),借此機(jī)會(huì)利用開(kāi)發(fā)板進(jìn)行了sqlite數(shù)據(jù)庫(kù)的學(xué)習(xí)。
本程序中建立數(shù)據(jù)庫(kù)well.db,在數(shù)據(jù)庫(kù)中建立兩個(gè)表格,分別是Well1和Well2,表格內(nèi)容包括時(shí)間、溫度、壓力、液位幾個(gè)參數(shù)。由于該開(kāi)發(fā)板沒(méi)有使用于現(xiàn)場(chǎng),因此溫度、壓力和液位三個(gè)參數(shù)均使用隨機(jī)函數(shù)生成。程序比較簡(jiǎn)單,但是在編寫(xiě)過(guò)程中遇到一些問(wèn)題,與大家共享。
由于僅僅是數(shù)據(jù)庫(kù)的編程,沒(méi)有外接顯示設(shè)備,只是用網(wǎng)線(xiàn)將開(kāi)發(fā)板與路由器連接,利用USB口與計(jì)算機(jī)連接。
二、程序編寫(xiě)
1、數(shù)據(jù)庫(kù)的建立
ret = sqlite3_open("well.db", &db_well);
if( ret )
{
fprintf(stderr, "Can't open database: %sn", sqlite3_errmsg(db_well));
sqlite3_close(db_well);
exit(1);
}
else
{
printf("Open well.db!n");
}
使用sqlite3_open函數(shù)建立數(shù)據(jù)庫(kù),其中well.db是數(shù)據(jù)庫(kù)的名稱(chēng),db_well是該數(shù)據(jù)庫(kù)的句柄。如果建立成功,將輸出“Open well.db!”信息。
2、表格的建立
該數(shù)據(jù)庫(kù)中建立了Well1和Well2兩個(gè)表格,建立帶入如下所示:
sql =" CREATE TABLE Well1( ID INTEGER PRIMARY KEY, Time VARCHAR(17), Temprature REAL, Pressure REAL, Liquid_level REAL);" ;
sqlite3_exec(db_well , sql , 0 , 0 , &Msg );
程序中,首先將指令用ASCII碼形式表示,然后用指令sqlite3_exec執(zhí)行。如果要再建立Well2表格,只需將上述代碼中的Well1換為Well2即可。指令中的ID INTEGER PRIMARY KEY, Time VARCHAR(17), Temprature REAL, Pressure REAL, Liquid_level REAL的分別表示序號(hào)、時(shí)間、溫度、壓力、液位幾個(gè)參數(shù),并且在指令中標(biāo)注了不同的數(shù)據(jù)類(lèi)型。
3、數(shù)據(jù)的產(chǎn)生
(1)時(shí)間的產(chǎn)生
time(&tmp);
timp = localtime(&tmp);
timp中便是以結(jié)構(gòu)體形式存儲(chǔ)的時(shí)間,包括年月日時(shí)分秒等信息。
(2)隨機(jī)數(shù)的產(chǎn)生
t=((rand()%(900-700))+700)/10.0;
上述指令用來(lái)產(chǎn)生700~900之間的一個(gè)隨機(jī)數(shù)。按照此方法依次產(chǎn)生溫度、壓力、液位等隨機(jī)數(shù)。
4、表格數(shù)據(jù)更新
sprintf(str,"INSERT INTO "Well1" VALUES(NULL , '%2d-%2d-%2d %2d:%2d:%2d', %.1f, %.1f, %.1f);", (timp->tm_year)%100, ( 1 + timp->tm_mon), timp->tm_mday, (timp->tm_hour), timp->tm_min, timp->tm_sec,t,p,l);
sqlite3_exec( db_well , str, 0 , 0 , &Msg );
上述指令用于表格數(shù)據(jù)的更新,即首先將指令以ASCII碼的形式存于str,再用sqlite3_exec指令執(zhí)行。在運(yùn)行過(guò)程中,遇到兩個(gè)問(wèn)題:
(1)sprintf指令執(zhí)行中,總是提示“Segmentation Fault”,經(jīng)過(guò)查閱質(zhì)量,將str定義為靜態(tài)變量,才沒(méi)有報(bào)錯(cuò)。
(2)時(shí)間要以ASCII碼形式存儲(chǔ),在str中要使用單引號(hào)。
三、程序運(yùn)行
將程序編譯通過(guò),通過(guò)SSH拷入開(kāi)發(fā)板后,執(zhí)行,出現(xiàn)以下界面:
每秒鐘提示一個(gè)時(shí)間。而且,提示數(shù)據(jù)庫(kù)建立完成。
利用sqlite打開(kāi)well.db數(shù)據(jù)庫(kù),如下圖所示。
打開(kāi)well1表格,展示內(nèi)容如下圖所示:
打開(kāi)well2表格,展示內(nèi)容如下:
通過(guò)上述兩圖可以看出,兩個(gè)表格均正確存儲(chǔ)內(nèi)容。此外,利用數(shù)據(jù)庫(kù)的優(yōu)勢(shì),還可以對(duì)數(shù)據(jù)進(jìn)行插入、查詢(xún)、刪除等操作,在這里不再演示。
-
飛凌
+關(guān)注
關(guān)注
0文章
134瀏覽量
16373 -
開(kāi)發(fā)板試用
+關(guān)注
關(guān)注
3文章
301瀏覽量
2291
發(fā)布評(píng)論請(qǐng)先 登錄
具有3D圖形和視頻編解碼器的通用 MPU RZ/G2L 數(shù)據(jù)手冊(cè)

深入HarmonyOS NEXT開(kāi)發(fā)中的ArkData操作SQLite數(shù)據(jù)庫(kù)
適用于SQLite的dbExpress數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序
瑞薩電子RZ MPU家族精品RZ/N2L產(chǎn)品介紹

飛凌嵌入式受邀亮相瑞薩2024工業(yè)技術(shù)研討會(huì)

RZ/G2L高速虛擬串口方案 基于瑞薩RZ/G2L SMARC開(kāi)發(fā)板的虛擬(Virtual UART)實(shí)現(xiàn)方案

【作品合集】龍芯2K0300蜂鳥(niǎo)開(kāi)發(fā)板試用精選
【飛凌嵌入式OK3576-C開(kāi)發(fā)板體驗(yàn)】開(kāi)箱報(bào)告
飛凌全志T527開(kāi)發(fā)板buildroot系統(tǒng)下擴(kuò)大rootfs分區(qū)
RZ/G2L雙千兆網(wǎng)口使用場(chǎng)景 BASIC模式 SWITCH模式 ROUTER模式

線(xiàn)下培訓(xùn) | 瑞薩電子基于RZ/G2L的OpenAMP混合部署實(shí)戰(zhàn)培訓(xùn)

評(píng)論