嵌入式课程设计实践(三)——SQLite
2014-06-30 16:32
288 查看
额,课设博文已经第三篇了,还没写我的课设的大概情况,那么就在SQLite前稍微写一下。
一、嵌入式课程设计
题目:基于嵌入式系统的数据采集与Socket通讯系统的设计与实现
内容:利用嵌入式实验箱CVT6410搭建嵌入式系统开发环境,进行Linux内核移植,烧写Linux系统,编写应用程序,完成以下功能,并撰写嵌入式系统设计报告。:
1.通过串口传输,获得ZigBee嵌入式网关采集的ZigBee传感器模块上的信息;
2.将采集的信息存储到嵌入式数据库(SQLite);
3.利用实验箱上的RJ45网口,通过网线与PC机建立连接,并基于Linux环境下的Socket通讯方式在实验箱与PC机间传递数据,显示采集的信息。
前面的课设博文(一)讲述了CVT6410与Linux下的开发环境的搭建过程;
课设博文(二)则简单的介绍了C语言下对于串口传输的开发实践。
下面将进入本博文的正题——SQLite。
二、SQLite
(一)简介
SQLite是一款极为简单的嵌入式关系型数据库系统,代码量很少,大约13万多点,由于其设计目标是嵌入式,所以它具有低资源消耗,高跨平台等特性,同时,它还支持大部分的SQL语句,具有极为良好的数据库移植性。其他的我就不多说了,总之它是个好东西。
(二)SQLite的安装
SQLite支持多平台,因本人做课设需要,分别在CVT6410以及Ubuntu上都装了SQLite,由于两系统基础构架不同,故需要使用不同的安装方式。
1.SQLitefor ARM
SQLite自带支持ARM的编译安装方式,有兴趣的可以自行前往官网了解,问度娘也可。我这里为了简单就选用了别人移植好的安装包了,版本为sqlite-3.5.9,软件下载地址:http://pan.baidu.com/s/1i3sXtJJ#dir
将软件放在你希望放在的地方,我的文件存放路径为:/home/wzg/6410/sqlite-3.5.9.tar.gz
下面就正式开始安装了:(终端下操作)
1.1进入sqlite所在目录,#cd
/home/wzg/6410/
1.2解压文件,#tar
xzvf sqlite-3.5.9.tar.gz
1.3进入解压出来的文件夹,#cdsqlite-3.5.9
1.4由于这是别人移植的,所以使用别人写的命令,#./build
1.5经过一段时间的编译,会在目录下生成一个文件夹“_install”,进入该文件夹,#cd
_install
1.6输入ls命令,会看到三个目录:bin、include、lib
三个目录中,bin里面是sqlite3的程序文件,include里是sqlite的头文件,lib里的是sqlite的库文件,需要分别复制到CVT6410系统的/bin、/include、/lib目录下。由于程序编译于Ubuntu下,还需要以下几步。
1.7继续在该目录下输入,#cp
-R * /tftpboot (此时三文件夹都复制到了tftpboot目录下了)
1.8进入minicom(超级终端),#sudo
minicom
1.96410挂载Ubuntu的tftpboot目录,
#mount 192.168.1.12:/tftpboot(空格)/mnt-o
nolock
1.10进入mnt目录,#cd
/mnt (ls查看三个文件夹是否存在)
1.11分别输入三条命令
#cp bin/* /bin
#cp include/* /include
#cp -R lib/* /lib
1.12执行完毕则sqlite安装结束。
2.SQLitefor Ubuntu
再次强调,PC与ARM构架不同,安装文件不能混用,如果已经做了类似的操作,请立即改回来。我这里将安装最新版的sqlite,在官网即可下载,我的网盘也可以:http://pan.baidu.com/s/1i3sXtJJ#dir
sqlite的名字是sqlite-autoconf-3080500.tar.gz
2.1下载sqlite,放在某个目录下,我依然是/home/wzg/6410/***(名略)
2.2进入该目录,#cd
/home/wzg/6410
2.3解压文件,#tar
xzvfsqlite-autoconf-3080500.tar.gz
2.4进入文件,#cd
sqlite-autoconf-3080500
下面是软件的常规安装方法:
2.5# ./configure
2.6# make
2.7# make install
一切正常则安装成功,下面可以体验SQLite了。
(三)使用SQLite
本小节主要内容为在终端下使用SQLite的操作。
方法一:输入sqlite3回车,进入SQLite的交互操作模式,直接输入SQL语句即可,帮助(.help),退出
(.quit/.exit)。
方法二:输入完整的命令,具体的在后面呈现。
1.创建数据库与表
#sqlite3 database.db “create table tb1(name varchar(10),ageinteger);”
2.插入数据
#sqlite3 database.db “insert into tb1 values(“wzg”,22);”
3.查询数据
#sqlite3 database.db “select * from tb1;”
将按如下显示:
wzg|22
SQLite的基本演示就这么多了,更多的自己去探索吧~
(四)C语言下对SQLite的操作
使用SQLite不可能只是在终端下使用,更多的是需要在c语言中进行调用、使用。下面我以一个例子来演示如何在C语言下使用SQLite。
【sqlite.c】
本段程序最重要的两点:
1)SQL4的赋值,在使用sprintf()时,一定注意声明为数组形式,不要指针,在ARM里运行时会出错(段错误/Segmentation
fault)。
2)在使用回调函数时(call_back()),一定要注意形参的数据类型,否则会编译警告,运行的结果也会出乎意料。比如要对col_values[i]进行赋值操作,建议考虑类似char*col_values[]的形式,否则因为传递的是指针而产生错误的赋值。
下面放出编译命令:
ForPC
#gccsqlite.c -o sqlite -lsqlite3
ForARM
#arm-linux-gccsqlite.c -o sqlite -I/home/wzg/6410/sqlite-3.5.9/_install/include-L/home/wzg/6410/sqlite-3.5.9/_install/lib
-lsqlite3
//对于arm的要解释一下,因为编译环境是在Ubuntu下。,所以需要指定forarm的sqlite库及头文件,否则编译的文件将会无法运行。
三、结语
关于SQLite就写到这里了,SQLite其实比较简单,主要的问题在于编写代码时会遇到的各种错误,需要去解决。本身对于C语言特别是指针与数组不太熟,经常被搞得焦头烂额,耗费了不少时间。希望我的博文能够给大家带来帮助。另外,SQLite在C语言里的调用还有一种方法,不过这个方法只能进行创建数据库和插入数据操作,不能查询就是使用system(),有兴趣的可以去看看。
唔,排版较乱,大家就不要在意渣格式这个细节了=。=
一、嵌入式课程设计
题目:基于嵌入式系统的数据采集与Socket通讯系统的设计与实现
内容:利用嵌入式实验箱CVT6410搭建嵌入式系统开发环境,进行Linux内核移植,烧写Linux系统,编写应用程序,完成以下功能,并撰写嵌入式系统设计报告。:
1.通过串口传输,获得ZigBee嵌入式网关采集的ZigBee传感器模块上的信息;
2.将采集的信息存储到嵌入式数据库(SQLite);
3.利用实验箱上的RJ45网口,通过网线与PC机建立连接,并基于Linux环境下的Socket通讯方式在实验箱与PC机间传递数据,显示采集的信息。
前面的课设博文(一)讲述了CVT6410与Linux下的开发环境的搭建过程;
课设博文(二)则简单的介绍了C语言下对于串口传输的开发实践。
下面将进入本博文的正题——SQLite。
二、SQLite
(一)简介
SQLite是一款极为简单的嵌入式关系型数据库系统,代码量很少,大约13万多点,由于其设计目标是嵌入式,所以它具有低资源消耗,高跨平台等特性,同时,它还支持大部分的SQL语句,具有极为良好的数据库移植性。其他的我就不多说了,总之它是个好东西。
(二)SQLite的安装
SQLite支持多平台,因本人做课设需要,分别在CVT6410以及Ubuntu上都装了SQLite,由于两系统基础构架不同,故需要使用不同的安装方式。
1.SQLitefor ARM
SQLite自带支持ARM的编译安装方式,有兴趣的可以自行前往官网了解,问度娘也可。我这里为了简单就选用了别人移植好的安装包了,版本为sqlite-3.5.9,软件下载地址:http://pan.baidu.com/s/1i3sXtJJ#dir
将软件放在你希望放在的地方,我的文件存放路径为:/home/wzg/6410/sqlite-3.5.9.tar.gz
下面就正式开始安装了:(终端下操作)
1.1进入sqlite所在目录,#cd
/home/wzg/6410/
1.2解压文件,#tar
xzvf sqlite-3.5.9.tar.gz
1.3进入解压出来的文件夹,#cdsqlite-3.5.9
1.4由于这是别人移植的,所以使用别人写的命令,#./build
1.5经过一段时间的编译,会在目录下生成一个文件夹“_install”,进入该文件夹,#cd
_install
1.6输入ls命令,会看到三个目录:bin、include、lib
三个目录中,bin里面是sqlite3的程序文件,include里是sqlite的头文件,lib里的是sqlite的库文件,需要分别复制到CVT6410系统的/bin、/include、/lib目录下。由于程序编译于Ubuntu下,还需要以下几步。
1.7继续在该目录下输入,#cp
-R * /tftpboot (此时三文件夹都复制到了tftpboot目录下了)
1.8进入minicom(超级终端),#sudo
minicom
1.96410挂载Ubuntu的tftpboot目录,
#mount 192.168.1.12:/tftpboot(空格)/mnt-o
nolock
1.10进入mnt目录,#cd
/mnt (ls查看三个文件夹是否存在)
1.11分别输入三条命令
#cp bin/* /bin
#cp include/* /include
#cp -R lib/* /lib
1.12执行完毕则sqlite安装结束。
2.SQLitefor Ubuntu
再次强调,PC与ARM构架不同,安装文件不能混用,如果已经做了类似的操作,请立即改回来。我这里将安装最新版的sqlite,在官网即可下载,我的网盘也可以:http://pan.baidu.com/s/1i3sXtJJ#dir
sqlite的名字是sqlite-autoconf-3080500.tar.gz
2.1下载sqlite,放在某个目录下,我依然是/home/wzg/6410/***(名略)
2.2进入该目录,#cd
/home/wzg/6410
2.3解压文件,#tar
xzvfsqlite-autoconf-3080500.tar.gz
2.4进入文件,#cd
sqlite-autoconf-3080500
下面是软件的常规安装方法:
2.5# ./configure
2.6# make
2.7# make install
一切正常则安装成功,下面可以体验SQLite了。
(三)使用SQLite
本小节主要内容为在终端下使用SQLite的操作。
方法一:输入sqlite3回车,进入SQLite的交互操作模式,直接输入SQL语句即可,帮助(.help),退出
(.quit/.exit)。
方法二:输入完整的命令,具体的在后面呈现。
1.创建数据库与表
#sqlite3 database.db “create table tb1(name varchar(10),ageinteger);”
2.插入数据
#sqlite3 database.db “insert into tb1 values(“wzg”,22);”
3.查询数据
#sqlite3 database.db “select * from tb1;”
将按如下显示:
wzg|22
SQLite的基本演示就这么多了,更多的自己去探索吧~
(四)C语言下对SQLite的操作
使用SQLite不可能只是在终端下使用,更多的是需要在c语言中进行调用、使用。下面我以一个例子来演示如何在C语言下使用SQLite。
【sqlite.c】
<span style="font-size:14px;">#include<stdio.h> #include<sqlite3.h> intselect_callback(void *data,int col_count,char **col_values,char**col_name) { //每条记录回调一次该函数,有多少条就回调多少次 inti; for(i=0;i<col_count;i++) { printf("%s=%s\n",col_name[i],col_values[i]==0?"NULL":col_values[i]); } return0; } intmain(int argc,char **argv) { intk=20; //创建数据库表 constchar *SQL1="CREATE TABLE IF NOT EXISTS users1(cc2530tempint,boardtemp int,temperature int,humidity int,light_lowint,light_high int);"; //向数据库插入数据 constchar *SQL2="insert into users1 values(11,1,11,11,11,11);"; constchar *SQL3="insert into users1 values(11,1,11,11,11,22);"; constchar SQL4[50]; sprintf(SQL4,"insertinto users1 values(22,22,22,22,22,%d);",k); //从数据库查询数据 constchar *SQL5="select * from users1;"; char*ErrMsg=0; int ret = 0; //连接数据库 sqlite3*db =0; ret=sqlite3_open("./DataBase.db",&db); if(ret!= SQLITE_OK) { fprintf(stderr,"无法打开数据库:%s",sqlite3_errmsg(db)); return1; } printf("数据库连接成功!\n"); //执行建表 ret= sqlite3_exec(db,SQL1,0,0,&ErrMsg); if(ret!= SQLITE_OK) { fprintf(stderr,"SQLError:%s\n",ErrMsg); sqlite3_free(ErrMsg); } //执行插入记录SQL语句 ret= sqlite3_exec(db,SQL2,0,0,&ErrMsg); if(ret==SQLITE_OK) { printf("插入数据1成功\n"); } ret= sqlite3_exec(db,SQL3,0,0,&ErrMsg); if(ret==SQLITE_OK) { printf("插入数据2成功\n"); } ret= sqlite3_exec(db,SQL4,0,0,&ErrMsg); if(ret==SQLITE_OK) { printf("插入数据3成功\n"); } //查询数据表内容 printf("查询数据表内容\n"); sqlite3_exec(db,SQL5,select_callback,0,&ErrMsg); //关闭数据库 sqlite3_close(db); db= 0; printf("数据库关闭成功!\n"); return0; }</span>
本段程序最重要的两点:
1)SQL4的赋值,在使用sprintf()时,一定注意声明为数组形式,不要指针,在ARM里运行时会出错(段错误/Segmentation
fault)。
2)在使用回调函数时(call_back()),一定要注意形参的数据类型,否则会编译警告,运行的结果也会出乎意料。比如要对col_values[i]进行赋值操作,建议考虑类似char*col_values[]的形式,否则因为传递的是指针而产生错误的赋值。
下面放出编译命令:
ForPC
#gccsqlite.c -o sqlite -lsqlite3
ForARM
#arm-linux-gccsqlite.c -o sqlite -I/home/wzg/6410/sqlite-3.5.9/_install/include-L/home/wzg/6410/sqlite-3.5.9/_install/lib
-lsqlite3
//对于arm的要解释一下,因为编译环境是在Ubuntu下。,所以需要指定forarm的sqlite库及头文件,否则编译的文件将会无法运行。
三、结语
关于SQLite就写到这里了,SQLite其实比较简单,主要的问题在于编写代码时会遇到的各种错误,需要去解决。本身对于C语言特别是指针与数组不太熟,经常被搞得焦头烂额,耗费了不少时间。希望我的博文能够给大家带来帮助。另外,SQLite在C语言里的调用还有一种方法,不过这个方法只能进行创建数据库和插入数据操作,不能查询就是使用system(),有兴趣的可以去看看。
唔,排版较乱,大家就不要在意渣格式这个细节了=。=
相关文章推荐
- 嵌入式课程设计实践(四)——socket
- 嵌入式课程设计实践(二)——串口
- 嵌入式课程设计实践(一)——环境搭建
- 嵌入式课程设计实践(五)——pthread
- FPGA嵌入式系统设计原理与实践
- Web编程基础课程设计实践教学环节任务书(一)
- 课程设计——聚类分析的初步实践
- 如何使用C语言SQLite3编程?大一课程设计看这里!
- 一个嵌入式课程设计
- 哈工大嵌入式设计与实践实验七 驱动程序开发
- 信息安全系统设计基础课程实践:简单TUI游戏设计
- 嵌入式 课程设计指导书
- stm8s 实践课程之IAP设计编码(bootloader实现)
- 广工嵌入式系统课程设计——单片机售票机
- 嵌入式软件开发培训笔记——基于S5PC100的课程设计
- 求救高手课程设计!!嵌入式《浮点除法器的设计》
- 嵌入式课程设计——温控器
- 数据结构实践课程设计【通讯录管理系统】
- Sundy嵌入式底层开发课程笔记 --Vi的设计思想及使用
- Linux嵌入式实时操作系统开发与设计(三)