版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、*实践(shjin)教学*兰州理工大学计算机与通信(tng xn)学院2015年春季(chnj)学期嵌入式系统开发课程设计题 目:基于嵌入式Linux系统的图书信息查询数据库的应用设计专业班级: xxxx工程12级x班 姓 名: xxxxx 学 号: 122x0 xxx 指导教师: xxxxxx 成 绩: 嵌入式系统开发课程设计 PAGE 32目录(ml) TOC o 1-3 h z u HYPERLINK l _Toc421175290 摘要(zhiyo) PAGEREF _Toc421175290 h 2 HYPERLINK l _Toc421175291 前言(qin yn) PAGER
2、EF _Toc421175291 h 3 HYPERLINK l _Toc421175292 一、基本原理 PAGEREF _Toc421175292 h 4 HYPERLINK l _Toc421175293 1.1 开发环境搭建 PAGEREF _Toc421175293 h 4 HYPERLINK l _Toc421175294 1.2 应用程序的编写 PAGEREF _Toc421175294 h 5 HYPERLINK l _Toc421175295 二、系统分析 PAGEREF _Toc421175295 h 6 HYPERLINK l _Toc421175296 2.1 需求分析
3、 PAGEREF _Toc421175296 h 6 HYPERLINK l _Toc421175297 2.2 控制台 PAGEREF _Toc421175297 h 7 HYPERLINK l _Toc421175298 2.3 添加图书信息 PAGEREF _Toc421175298 h 7 HYPERLINK l _Toc421175299 2.4 删除图书信息 PAGEREF _Toc421175299 h 8 HYPERLINK l _Toc421175300 2.5 查看图书信息 PAGEREF _Toc421175300 h 9 HYPERLINK l _Toc42117530
4、1 2.5.1索书号查找 PAGEREF _Toc421175301 h 9 HYPERLINK l _Toc421175302 2.5.2 图书名查找 PAGEREF _Toc421175302 h 10 HYPERLINK l _Toc421175303 2.6 帮助系统 PAGEREF _Toc421175303 h 10 HYPERLINK l _Toc421175304 2.7 退出系统 PAGEREF _Toc421175304 h 11 HYPERLINK l _Toc421175305 三、详细设计 PAGEREF _Toc421175305 h 12 HYPERLINK l
5、_Toc421175306 3.1 main.c源码 PAGEREF _Toc421175306 h 12 HYPERLINK l _Toc421175307 3.2 consoleshell.c源码 PAGEREF _Toc421175307 h 12 HYPERLINK l _Toc421175308 3.3 SQLite.c源程序 PAGEREF _Toc421175308 h 14 HYPERLINK l _Toc421175309 3.4 编译源程序 PAGEREF _Toc421175309 h 22 HYPERLINK l _Toc421175310 3.5 NFS挂载实验目录测
6、试 PAGEREF _Toc421175310 h 23 HYPERLINK l _Toc421175311 运行结果 PAGEREF _Toc421175311 h 25 HYPERLINK l _Toc421175312 参考文献 PAGEREF _Toc421175312 h 27 HYPERLINK l _Toc421175313 总结 PAGEREF _Toc421175313 h 28摘要(zhiyo)随着(su zhe)社会的进步,如今(rjn)书店图书数量巨大,每天都有大量的图书售出,在如此多的书中查找到自己想要的书采用计算机图书信息查询系统较为快捷,基于嵌入式Linux系统的
7、图书信息查询数据库的应用是在嵌入式数据库Sqlite的基础上,采用C语言编程及Sqlite C接口来控制数据库Sqlite的读取和存储,使用C语言编写的人机交互界面使得普通人能够很轻松的对图书信息查询应用进行操作,使得添加、修改、查找和删除图书信息方便快捷。关键词:图书信息 嵌入式 Linux Sqlite C语言前言(qin yn)目前(mqin)各大书店(sh din)存书量巨大,对于在如此大量的图书中查找到顾客所需的图书,普遍采用计算机软件结合数据库的图书信息查询系统来查找图书信息。数据库的目标是实现对数据的存储、检索等功能。传统的数据库产品除提供了基本的查询、添加、删除等功能外,也提供
8、了很多高级特性,如触发器、存储过程、数据备份恢复等。但实际上用到这些高级功能的时候并不多,应用中频繁用到的还是数据库的基本功能。于是,在一些特殊的应用场合,传统的数据库就显得过于臃肿了。在这种情况下,嵌入式数据库开始崭露头角。嵌入式数据库是一种具备了基本数据库特性的数据文件,它与传统数据库的区别是:嵌入式数据库采用程序方式直接驱动,而传统数据库则采用引擎响应方式驱动。嵌入式数据库的体积通常都很小,这使得嵌入式数据库常常应用在移动设备上。由于性能卓越,所以在高性能的应用上也经常见到嵌入式数据库的身影。SQLite是一种采用C语言开发的嵌入式数据库。SQLite的目标是尽量简单,因此它抛弃了传统企
9、业级数据库的种种复杂特性,只实现那些对于数据库而言非常必要的功能。尽管简单性是SQLite追求的首要目标,但是其功能和性能都非常出色。通过C语言函数编写的人机交互界面,人工输入所有图书信息,再进行保存,也可以通过图书信息查询系统快速查找到相关图书的信息,对图书信息的修改和删除也非常的方便。一、基本原理1.1 开发环境(hunjng)搭建进行嵌入式系统开发之前需要(xyo)搭建开发环境,所需要的硬件有UP-CUP210-II型嵌入式实验平台(pngti),PC机Pentium 500以上, 硬盘40G以上,内存大于256M,软件部分有Vmware Workstation + Fedora Cor
10、e 14 + MiniCom/Xshell + ARM-LINUX交叉编译开发环境。准备好硬件后,使用串口线和网线连接UP-CUP210-II型嵌入式实验平台和计算机,并将UP-CUP210-II型嵌入式实验平台接通电源。1、打开虚拟机启动Fedora Core 14,点击【编辑】【虚拟网络编辑器】,在【桥接到:】后选择【Realtek PCIe GBE Family Controller】这一项。然后点击【系统】【管理】【网络】【设备】【硬件设备】,在【硬件设备】中选择【eth2()】这一项,再点击【探测】,最后点击【确定】退出,在重新打开查看eth2是否处于活跃状态。处于活跃状态是正常状态
11、,若不是就重复以上步骤知道eth2处于活跃状态。2、在电脑上安装“超级终端”,安装成功后点击【文件】【新建连接】,进入属性界面后把端口选为COM1,波特率选为115200,数据位选为8,校验位选为None,停止位选为1,流控选为None,点击【确定】退出。打开UP-CUP210-II实验板电源,待超级终端上显示完毕后输入命令“ifconfig”查看IP地址,输入命令“ifconfig eth0 50”对刚刚查到的IP地址修改为50。再输入“ifconfig”检查IP地址是否修改成功。使用命令“ping 50”查看实验平台与计算机是否能够通信。3、进入虚拟机终端,输入命令“su root”切换到
12、root用户,输入密码“123456”,然后输入命令“setup”弹出对话框,选择【防火墙配置】后选择不启用防火墙。然后进入【系统服务】,选择不启用ip6tables和iptables,启用network和nfs。退出对话框后输入命令“service network restart”重启网络,每行末都显示确定后输入命令【service nfs restart】重启网络文件系统。待每行末都显示确定后输入命令“vi /etc/exports”弹出文件编辑器,把第一行改为“/UP-CUP210-II192.168.160.*(rw,async,no_root_squash)”,保存并退出。4、在超级
13、终端中输入(shr)命令“mountnfs 30:/UP-CUP210-II /mnt/nfs”挂载。挂载成功(chnggng)后使用命令“cd”和“ls”进入(jnr)文件夹“05_sqlite”中,输入命令“./SQLite_test”执行程序。程序的运行结果会显示到超级终端。1.2 应用程序的编写进入实验目录,输入命令“cd /UP-CUP210-II/SRC/exp/basic/05_sqlite/”,再输入“ls”查看文件夹“05_sqlite”中的所有文件和文件夹,在文件夹“05_sqlite”中存在三个C文件,分别为SQLite.c、consoleshell.c、main.c。为
14、了方便快速的编写程序,只需将以上三个C文件进行修改即可,修改好后仔细检查并保存退出。因修改后的代码没用经过编译,在超级终端执行的文件还是原来的文件,所以要在虚拟机终端中输入命令“make clean”清除中间代码,重新编译。然后再输入命令“make”编译。编译成功后进入超级终端执行修改后的程序,修改后的程序执行结果显示到超级终端。根据这个原理我们可以对程序进行反复修改,反复在超级终端上测设,最终达到理想的结果。二、系统分析2.1 需求(xqi)分析如今遍布全国大大小小的书店数量巨大,每天都有大量的书籍交易,在一些知名的书店每日销售量惊人,如果书店把图书信息记录到纸质表格中,当遇到(y do)大
15、量顾客购书时需要人工查找到图书信息,显然浪费了大量时间,效率低下,严重影响销售额。所以要提高查询(chxn)图书信息的效率就必须的采用运行速度高的计算机系统。当顾客买书时一般都是提供书籍名称,店员通过图书信息查询数据库的应用系统输入书籍名称就能很快的查出书籍的索书号和价格,书店的书都是分区分类摆放的,而且是大区里又分出了很多个小区,每个大区都由不同的数字表示,每个大区里面的小区也是由不同的数字表示,每种图书也由数字表示,这种形式就是树状结构,可以通过一级一级的查找到相应图书,由每种图书的代表数字和上一级区的数字组合就形成了索书号,索书号形如学号,例如兰州理工大学学生学号“12250135”,“
16、12”代表2012级的所有学生,“25”代表通信工程的所有学生,“01”代表通信工程一班,“35”就代表某个学生自己。通过学号从前往后就能知道某学生所属的班级。索书号也是如此,通过索书号也能查到图书在书店的具体位置。所以索书号是图书信息查询数据库的应用系统中必不可少的一个信息项。当人们购买图书是还会考虑到图书的价格,如果价格合适才会去购买。所以图书价格也是图书信息查询数据库的应用系统中必不可少的一个信息项,图书信息查询数据库的应用系统需要根据图书名称查找图书信息,所以图书名称更是图书信息查询数据库的应用系统中必须的一个信息项。总体来说图书信息查询数据库的应用系统的数据库中要包括索书号、图书名称
17、和图书价格这三类信息,为了方便人工操作需要有一个简单的人机交互界面控制台,交互界面菜单应包括添加、删除、查看、帮助和退出功能。控制台添加图书信息根据索书号查找图书查看所有图书信息删除图书信息帮助退出根据图书名查找图书图2.1 软件(run jin)结构图2.2 控制台控制台是计算机与人之间交互的一个平台,里面含有若干选项,通过点击这些(zhxi)选项就能进入到相应的功能项下,控制台是图书信息查询数据库的应用(yngyng)系统中重要的组成部分。包含“查看所有图书信息”、“根据图书名查找图书”、“根据索书号查找图书”、“添加图书信息”、“删除图书信息”、“帮助”和“退出”这几个选项。由于选项信息
18、太长,才用输入简短指令的方法选取选项最为方便快捷。所以这里以“1”、“2”、“3”、“4”、“5”、“*”和“0”分别作为这几个选项的命令。2.3 添加图书信息开始结束输入图书价格输入结束输入索书号输入图书名输入结束输入结束YNNYYN图2.2 添加图书信息(xnx)程序流程图刚刚(gng gng)建立的图书(tsh)信息查询数据库的应用系统数据库为空,第一步通过人工输入图书信息,输入顺序是先索书号,然后是图书名,最后是图书价格,每一项输入结束后会自动进入下一项输入,当三项都输入完毕后自动进入控制台。当输入回车键输入结束。2.4 删除图书信息当书店里的某些图书下架了,这些图书信息在图书信息查询
19、数据库的应用系统的数据库中也没有用处了,所以得删除这些被下架的图书信息。删除图书信息时要根据图书名查找到图书,若图书不存在则回到控制台,若图书存在则询问是否要删除,经过用户确认后方可删除相应图书信息。开始结束输入图书名图书是否存在是否删除图书是否输入完毕NYNYNYY图2.3 删除图书(tsh)信息程序流程图2.5 查看图书(tsh)信息查看(chkn)图书信息分为三种:查看所有图书信息、根据图书名查找图书信息、根据索书号查找图书信息。查看所有图书信息时输入“1”命令则显示数据库中所有的图书信息,实现较为简单。2.5.1索书号查找开始结束输入索书号是否输入完毕查询数据库图书是否存在显示图书信息
20、NYNY图2.4 索书号查找(ch zho)程序流程图根据索书号查找图书时,首先(shuxin)要输入索书号,若索书号输入完毕,则进行数据库查询,若相关图书不存在则返回控制台,若存在则显示相关图书信息。2.5.2 图书(tsh)名查找开始结束输入图书名是否输入完毕查询数据库图书是否存在显示图书信息NYNY图2.5 图书名查找程序流程图根据图书名查找图书时,首先要输入图书名,若图书名输入完毕,则进行数据库查询,若相关图书不存在则返回控制台,若存在则显示相关图书信息。2.6 帮助(bngzh)系统帮助系统是任何一个计算机系统所必须(bx)的一部分,主要作用是引导和帮助用户了解系统的功能和操作方法。
21、图书信息查询数据库的应用系统的帮助系统主要用来向用户说明“1”、“2”、“3”、“4”、“5”、“*”和“0”这几个(j )命令的作用,了解了各个命令的作用后用户才能熟练的操作图书信息查询数据库的应用系统。2.7 退出系统在每一个计算机系统中都要有退出选项,如果在不使用应用程序时不退出程序容易浪费系统资源。再运行其他程序时,系统负荷增大,导致运行速度变慢。功耗增大,耗电量也增大。在嵌入式设计中如果不设计退出选项,就无法输入其他选项,所以退出系统程序是必不可少的。三、详细(xingx)设计3.1 main.c源码#include consoleshell.h#include linuxpatch
22、.hint main(int argc, char *argv) consoleshell(); return 0;3.2 consoleshell.c源码consoleshell.c源文件主要是建立用户终端显示(xinsh)控制台菜单,并根据用户的输入字符,调用相应的接口函数。#include consoleshell.hchar shell_s=nshell ;void get_line(char *cmd);/*控制台*/void * consoleshell() int count=0; int i; char cmd256=0,; int rc = sqliteDB_open();
23、char name40,id40; int price = 0;/demo中只做整型的,浮点型的转换可以参考(cnko)网上实现 printf(n); printf(n 1 查看所有图书信息); printf(n 2 根据书名查找图书); printf(n 3 根据书号查找图书); printf(n 4 删除图书信息); printf(n 5 添加(tin ji)图书信息); printf(n * 帮助(bngzh); printf(n 0 退出(tuch); while(1) printf(shell_s); fflush(stdout); get_line(cmd); if(strncmp
24、(1,cmd,1)=0) sqliteDB_opt_select_all(); else if(strncmp(2,cmd,1)=0) printf(n输入图书名 ); printf(n图书名:); scanf(%s,name); fflush(stdin);/刷新缓冲区 if(!sqliteDB_exist(name) continue; sqliteDB_opt_select(name); else if(strncmp(3,cmd,1)=0) printf(n输入索书号 ); printf(n索书号:); scanf(%s,id); fflush(stdin);/刷新缓冲区 sqlite
25、DB_opt_select_by_id(id); else if(strncmp(4,cmd,1)=0) printf(n请输入将要删除的图书名); printf(n图书名:); scanf(%s,name); fflush(stdin);/刷新缓冲区 if(!sqliteDB_exist(name) continue; sqliteDB_opt_select(name); /删除之前应再次询问是否删除,不可回滚 sqliteDB_opt_delete(name); else if(strncmp(5,cmd,1)=0) printf(n请输入将要添加的图书信息!n索书号:); printf(
26、n输入图书索书号 ); printf(n索书号:); scanf(%s,id); printf(n图书名:); scanf(%s,name); fflush(stdin);/刷新缓冲区 printf(n价格:); scanf(%d,&price); fflush(stdin);/刷新(shu xn)缓冲区 sqliteDB_opt_add(name,id,price); else if(strncmp(*,cmd,2)=0) printf(n); printf(n 1 查看(chkn)所有图书信息); printf(n 2 根据书名(sh mn)查找图书); printf(n 3 根据书号查找
27、图书); printf(n 4 删除图书信息); printf(n 5 添加图书信息); printf(n * 帮助); printf(n 0 退出); else if(strncmp(0,cmd,1)=0) sqliteDB_close();/关闭数据库连接 break;/ else if(cmd0 != 0) else if(strncmp(0,cmd,1)!=0) system(cmd); void get_line(char *cmd) int i=0; while(1) cmdi=getchar(); if(cmdi=10) cmdi=0; break; fflush(stdout)
28、; i+; 3.3 SQLite.c源程序该源码文件主要是对SQLite数据的C/C+接口封装,提供consoleshell.c中程序调用。#include SQLite.h/* auther lyj_* date 2007-3-21* /本程序(chngx)提供了对数据库进行操作的基本接口,对于更复杂的操作,用户可以根据具体情况* 进行修改,程序的更新,以及(yj)其他需求请联系本人或者技术支持* * 例如关于主键的唯一性。用户可以适当添加(tin ji)功能;* 对于可以访问所有table的动态sql语句可以参考其中的程序实现;*/sqlite3 *db;/全局的数据连接/用户第一次打开数
29、据库时应创建对应的table并添加适当的数据记录static int callback(void *NotUsed, int argc, char *argv, char *azColName);/* *建立与数据库的连接* */int sqliteDB_open() int rc;/操作标志 printf(ncreat database:test.dbnncreat table:table merchandise(contents:id name price)nnand add two recordsn); rc = sqlite3_open(test.db, &db); if( rc )
30、fprintf(stderr, 不能打开数据库: %sn, sqlite3_errmsg(db); sqlite3_close(db); exit(1); printf(n打开成功!); if(!sqliteDB_create_table() printf(n数据表存在);/* if(!sqliteDB_insert_records() printf(n进入数据表失败); else sqliteDB_opt_select_all();*/ return 1;/* 关闭与数据库的连接 */int sqliteDB_close() if(db != 0) sqlite3_close(db);/*
31、添加(tin ji)一条记录到已知或未知数据库表*/int sqliteDB_opt_add(char *name,char *id,int price) int rc; char *zErrMsg = 0; char *sql=0;/动态(dngti)生成的SQL语句 char tem_sql256=insert into merchandise values(;/ by sprife for mem out char tem_sql05 = ,; char tem_sql15 = ,; char tem_sql25 = ); char tem_price20; sprintf(tem_pr
32、ice, %d , price);/将int数据(shj)转换为字符串 sql = strcat(tem_sql,name); sql = strcat(sql,tem_sql0); sql = strcat(sql,id); sql = strcat(sql,tem_sql1); sql = strcat(sql,tem_price); sql = strcat(sql,tem_sql2);/ printf(n#);/ printf(n%s,sql);/ printf(n#); rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);/ print
33、f(n rc = %d,rc); if( rc!=SQLITE_OK ) fprintf(stderr, SQL error: %sn, zErrMsg); sqlite3_free(zErrMsg); /* 删除表中的一条(y tio)记录* param name*/int sqliteDB_opt_delete(char *name) int rc; char n4; char *zErrMsg = 0; char *sql=0;/动态生成(shn chn)的SQL语句 char tem_sql256=delete from merchandise where name = ;/ char
34、 tem_sql03 = ; char tem_sql13 = ; /删除之前查询(chxn)该条记录,如存在则显示该记录,并询问是否真的要删除 /如不存在则推出本次操作 sql = strcat(tem_sql,name); sql = strcat(sql,tem_sql0); sql = strcat(sql,tem_sql1);/ printf(n#);/ printf(n%s,sql);/ printf(n#); rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);/ printf(n rc = %d,rc); if( rc!=SQLI
35、TE_OK ) fprintf(stderr, SQL error: %sn, zErrMsg); sqlite3_free(zErrMsg); /* 删除表中的一条记录* param id*/int sqliteDB_opt_delete_by_id(char *id) int rc; char n4; char *zErrMsg = 0; char *sql=0;/动态生成的SQL语句 char tem_sql256=delete from merchandise where id = ;/ char tem_sql03 = ; char tem_sql13 = ; /删除之前查询该条记录
36、,如存在则显示该记录,并询问是否真的要删除 /如不存在则推出本次操作 sql = strcat(tem_sql,id); sql = strcat(sql,tem_sql0); sql = strcat(sql,tem_sql1);/ printf(n#);/ printf(n%s,sql);/ printf(n#); rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);/ printf(n rc = %d,rc); if( rc!=SQLITE_OK ) fprintf(stderr, SQL error: %sn, zErrMsg); sql
37、ite3_free(zErrMsg); /*/* 修改(xigi)数据库表中的记录内容* /暂不提供(tgng)修改函数2007-3-21*/int sqliteDB_opt_modify();/* 用预编译的sql语句减少(jinsho)sql语句的分析时间* * 只举例 查询语句* 2007-3-22* 查询语句*/int sqliteDB_opt_select_all() sqlite3_stmt* stmt=NULL; char* zErrMsg=NULL; char *name,*id; int price=0; int nret=sqlite3_prepare(db,SELECT
38、* FROM merchandise;,strlen(SELECT * FROM merchandise;),&stmt,(const char*)(&zErrMsg); if(nret!=SQLITE_OK) return false; printf(nt图书名tt索书号tt价格n); printf(tn); while(1) nret=sqlite3_step(stmt); if(nret!=SQLITE_ROW) break; name=sqlite3_column_text(stmt,0); id=sqlite3_column_text(stmt,1); price=sqlite3_c
39、olumn_int(stmt,2); printf(t%stt%stt%dn,name,id,price); sqlite3_finalize(stmt); printf(n); return true;/* 查询符合查询条件(tiojin)的记录* param name*/int sqliteDB_opt_select(char *name) sqlite3_stmt* stmt=NULL; char* zErrMsg=NULL; char *_name,*_id; int price=0; int nret=0; int rc; char *sql=0;/动态(dngti)生成的SQL语句
40、 char tem_sql256=select * from merchandise where name = ;/ char tem_sql03 = ; char tem_sql13 = ; sql = strcat(tem_sql,name); sql = strcat(sql,tem_sql0); sql = strcat(sql,tem_sql1);/ printf(n#);/ printf(n%s,sql);/ printf(n#); nret=sqlite3_prepare(db,sql,strlen(sql),&stmt,(const char*)(&zErrMsg); if(n
41、ret!=SQLITE_OK) return false; printf(nt图书(tsh)名tt索书号tt价格n); printf(tn); while(1) nret=sqlite3_step(stmt); if(nret!=SQLITE_ROW) break; _name=sqlite3_column_text(stmt,0); _id=sqlite3_column_text(stmt,1); price=sqlite3_column_int(stmt,2); printf(t%stt%stt%dn,_name,_id,price); sqlite3_finalize(stmt); pr
42、intf(n); return true;/* 查询符合(fh)查询条件的记录* param id*/int sqliteDB_opt_select_by_id(char *id) sqlite3_stmt* stmt=NULL; char* zErrMsg=NULL; char *_name,*_id; int price=0; int nret=0; int rc; char *sql=0;/动态(dngti)生成的SQL语句 char tem_sql256=select * from merchandise where id = ;/ char tem_sql03 = ; char te
43、m_sql13 = ; sql = strcat(tem_sql,id); sql = strcat(sql,tem_sql0); sql = strcat(sql,tem_sql1);/ printf(n#);/ printf(n%s,sql);/ printf(n#); nret=sqlite3_prepare(db,sql,strlen(sql),&stmt,(const char*)(&zErrMsg); if(nret!=SQLITE_OK) return false; printf(nt图书(tsh)名tt索书号tt价格n); printf(tn); while(1) nret=s
44、qlite3_step(stmt); if(nret!=SQLITE_ROW) break; _name=sqlite3_column_text(stmt,0); _id=sqlite3_column_text(stmt,1); price=sqlite3_column_int(stmt,2); printf(t%stt%stt%dn,_name,_id,price); sqlite3_finalize(stmt); printf(n); return true;/*内部(nib)调用函数*/static int callback(void *NotUsed, int argc, char *
45、argv, char *azColName) int i; for(i=0; iargc; i+) printf(%s = %sn, azColNamei, argvi ? argvi : NULL); printf(n); return 0;/*内部调用函数*功能判断所查询的记录是否(sh fu)存在* 依据:图书(tsh)名*/int sqliteDB_exist(char *name) sqlite3_stmt* stmt=NULL; char* zErrMsg=NULL; char *_name; int price=0; int nret=0; int rc; char *sql=0
46、;/动态生成的SQL语句 char tem_sql256=select * from merchandise where name = ;/ char tem_sql03 = ; char tem_sql13 = ; sql = strcat(tem_sql,name); sql = strcat(sql,tem_sql0); sql = strcat(sql,tem_sql1); nret=sqlite3_prepare(db,sql,strlen(sql),&stmt,(const char*)(&zErrMsg); printf(sql: %s,sql); if(nret!=SQLITE
47、_OK) return false; nret=sqlite3_step(stmt); if(nret!=SQLITE_ROW) printf(n 图书不存在!); return false; sqlite3_finalize(stmt); return true;/*在用户还没有创建table时可用该函数创建一个table*/int sqliteDB_create_table() char* zErrMsg=NULL; char sql256=CREATE TABLE merchandise(name varchar(40),id varchar(40),price smallint); i
48、nt nret=sqlite3_exec(db,sql,NULL,NULL,&zErrMsg); if(nret!=SQLITE_OK) printf(%sn,sqlite3_errmsg(db); return false; else return true;/*初始化数据库table时预插入(ch r)两条数据*/int sqliteDB_insert_records() char* zErrMsg=NULL; char sql1256=INSERT INTO merchandise VALUES(ibm,277325073,483); char sql2256=INSERT INTO m
49、erchandise VALUES(sun,433443,400); int nret=sqlite3_exec(db,sql1,NULL,NULL,&zErrMsg); nret=sqlite3_exec(db,sql2,NULL,NULL,&zErrMsg); if(nret!=SQLITE_OK) printf(%sn,sqlite3_errmsg(db); return false; else return true;3.4 编译(biny)源程序 1、进入(jnr)实验目录:rootlocalhost /# cd /UP-CUP210-II/SRC/exp/basic/05_sqli
50、te/rootlocalhost 05_sqlite# lsMakefile SQLite.c SQLite.o consoleshell.h linuxpatch.h main.o sqliteRules.mak SQLite.h consoleshell.c consoleshell.o main.c readme.txtrootlocalhost 05_sqlite# 2、清除中间代码,重新(chngxn)编译rootlocalhost 05_sqlite# make cleanrm -f ./SQLite_test ./sqlite/SQLite_test *.elf *.elf2fl
51、t *.gdb *.orootlocalhost 05_sqlite# makearm-linux-gcc -c -o main.o main.carm-linux-gcc -c -o SQLite.o SQLite.cSQLite.c: In function sqliteDB_opt_select_all:SQLite.c:184: warning: assignment discards qualifiers from pointer target typeSQLite.c:185: warning: assignment discards qualifiers from pointer
52、 target typeSQLite.c: In function sqliteDB_opt_select:SQLite.c:226: warning: assignment discards qualifiers from pointer target typeSQLite.c:227: warning: assignment discards qualifiers from pointer target typeSQLite.c: In function sqliteDB_opt_select_by_id:SQLite.c:268: warning: assignment discards
53、 qualifiers from pointer target typeSQLite.c:269: warning: assignment discards qualifiers from pointer target typearm-linux-gcc -c -o consoleshell.o consoleshell.carm-linux-gcc -static -I ./sqlite/ -L ./sqlite/ -o SQLite_test main.o SQLite.o consoleshell.o -lsqlite3arm-linux-gcc -static -I ./sqlite/
54、 -L ./sqlite/ -o sqlite/SQLite_test main.o SQLite.o consoleshell.o -lsqlite3rootlocalhost 05_sqlite# lsMakefile SQLite.c SQLite.o consoleshell.c consoleshell.o main.c readme.txtRules.mak SQLite.h SQLite_test consoleshell.h linuxpatch.h main.o sqliterootlocalhost 05_sqlite# 当前目录下生成(shn chn)可执行程序SQLit
55、e_test。3.5 NFS挂载实验目录(ml)测试1、启动UP-CUP210-II型实验系统,连好网线、串口线。通过串口终端挂载宿主机实验目录。rootUP-TECH yaffs# mountnfs 57:/UP-CUP210-II /mnt/nfs/2、进入串口终端的NFS共享实验(shyn)目录。rootUP-TECH yaffs# cd /mnt/nfs/SRC/exp/basic/05_sqlite/rootUP-TECH 05_sqlite# lsMakefile SQLite.o consoleshell.o readme.txtRules.mak SQLite_test linuxpatch.h sqliteSQLite.c consoleshell.c main.cSQLite.h consoleshell.h main.orootUP-TECH 05_sqlite# 3、执行程序。rootUP-TECH 05_sqlite# ./SQLite_test此时会在当前目录下创建数据库test.db文件,用户可以(ky)根据终端菜单来对此数据库进行操作了,同样可以使用 ls l 命令(mng lng)观察数据库大小的变化运行(ynxng)结果系统运行结果(ji gu)如下所示:1、控制台rootUP-T
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人教部编八年级语文上册《一着惊海天》示范公开课教学课件
- 部编版六年级下册语文古诗与日积月累(注释、译文)
- 专利技术交易
- 4S店高级涂料装修服务
- 乡村振兴项目工作汇报
- PHP云人才系统的设计和实现
- 2023-2024学年全国小学三年级下语文人教版期中考卷(含答案解析)
- 二手房的购房合同2024年
- 2024年淮安客运从业资格证模拟考试
- 2024年海口客运上岗证条件
- 雨污水管合同模板
- 《篮球:行进间单手肩上投篮》教案(四篇)
- 2024-2025学年部编版初一上学期期中历史试卷与参考答案
- 2024年山东地区光明电力服务公司第二批招聘高频难、易错点500题模拟试题附带答案详解
- 2024山东高速集团限公司招聘367人高频难、易错点500题模拟试题附带答案详解
- DB34T 3730-2020 耕地损毁程度鉴定技术规范
- 北京市历年中考语文现代文之议论文阅读30篇(含答案)(2003-2023)
- 2024年新人教道德与法治一年级上册全册课件(新版教材)
- 请款单模板(范本)
- 2024高校大学《辅导员》招聘考试题库(含答案)
- 管道保温体积面积计算公式
评论
0/150
提交评论