本文來源電子發燒友社區,作者:h1654155285.8644, 帖子地址:https://bbs.elecfans.com/jishu_2299992_1_1.html
一、前言
RZ/GL2型開發板內置了sqlite3數據庫,該數據庫是一款輕型的數據庫,它占用資源非常的低,只需要幾百K的內存就夠了。本人研究項目中需要使用到數據庫,借此機會利用開發板進行了sqlite數據庫的學習。
本程序中建立數據庫well.db,在數據庫中建立兩個表格,分別是Well1和Well2,表格內容包括時間、溫度、壓力、液位幾個參數。由于該開發板沒有使用于現場,因此溫度、壓力和液位三個參數均使用隨機函數生成。程序比較簡單,但是在編寫過程中遇到一些問題,與大家共享。
由于僅僅是數據庫的編程,沒有外接顯示設備,只是用網線將開發板與路由器連接,利用USB口與計算機連接。
二、程序編寫
1、數據庫的建立
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函數建立數據庫,其中well.db是數據庫的名稱,db_well是該數據庫的句柄。如果建立成功,將輸出“Open well.db!”信息。
2、表格的建立
該數據庫中建立了Well1和Well2兩個表格,建立帶入如下所示:
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執行。如果要再建立Well2表格,只需將上述代碼中的Well1換為Well2即可。指令中的ID INTEGER PRIMARY KEY, Time VARCHAR(17), Temprature REAL, Pressure REAL, Liquid_level REAL的分別表示序號、時間、溫度、壓力、液位幾個參數,并且在指令中標注了不同的數據類型。
3、數據的產生
(1)時間的產生
time(&tmp);
timp = localtime(&tmp);
timp中便是以結構體形式存儲的時間,包括年月日時分秒等信息。
(2)隨機數的產生
t=((rand()%(900-700))+700)/10.0;
上述指令用來產生700~900之間的一個隨機數。按照此方法依次產生溫度、壓力、液位等隨機數。
4、表格數據更新
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 );
上述指令用于表格數據的更新,即首先將指令以ASCII碼的形式存于str,再用sqlite3_exec指令執行。在運行過程中,遇到兩個問題:
(1)sprintf指令執行中,總是提示“Segmentation Fault”,經過查閱質量,將str定義為靜態變量,才沒有報錯。
(2)時間要以ASCII碼形式存儲,在str中要使用單引號。
三、程序運行
將程序編譯通過,通過SSH拷入開發板后,執行,出現以下界面:
每秒鐘提示一個時間。而且,提示數據庫建立完成。
利用sqlite打開well.db數據庫,如下圖所示。
打開well1表格,展示內容如下圖所示:
打開well2表格,展示內容如下:
通過上述兩圖可以看出,兩個表格均正確存儲內容。此外,利用數據庫的優勢,還可以對數據進行插入、查詢、刪除等操作,在這里不再演示。
-
飛凌
+關注
關注
0文章
134瀏覽量
16173 -
開發板試用
+關注
關注
3文章
301瀏覽量
2149
發布評論請先 登錄
相關推薦
評論