本文来源电子发烧友社区,作者: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浏览量
16100 -
开发板试用
+关注
关注
3文章
301浏览量
2041
发布评论请先 登录
相关推荐
评论