第9章嵌入式数据库程序设计讲解_第1页
第9章嵌入式数据库程序设计讲解_第2页
第9章嵌入式数据库程序设计讲解_第3页
第9章嵌入式数据库程序设计讲解_第4页
第9章嵌入式数据库程序设计讲解_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2需用的技入无数据库3SQLite在Linux主机上的安裝4)SQLite shell令令ZSHk5, sqlite数据库应用程序设计6 y SQLite 的API接口7 战入式数据库SQLite的移植技入式数据库SQLite与Qt的连接获入式菽据库是一种具备了基本数据库特性的数据丈件,它与传统枝据 库的区别長:快人丸纵握库采用程序芳式衣按驱动,而传统获据库则 采 用弓I擎响应方式脳动。获人丸救堤库的体积通肴却很小,这使得炭入式 放据库帝新应用衣移动设备上。由于性能卓越,所以往嘉性能的应用上 也经常见刊族入式数据库的身影按入性卖对性可隼性可走制性琼平台常用的按入式数据库 Berkeley DB

2、長由类sjSleepycat Software司开发的一套开放源码的 灰入式救扬库的程序库database library;,它为应用程序提供可伸 橢的.离性能的.有事务保护功能的枝据管理服务。Berkeley DB 据的存取和管理提供了一组简洁的因救调用API接d。t是一个经典 的Clibrary模式的toolkit,为程序员提供广泛丰富的因数集.是为应用 程疗开发者提供工业级径度的数据库服务而设计的。抿入无A可伸輸o卑261OS _SN z駅毬叫赵#*殆枷来IOS EyogOJ即疋。电hcgu即念爺 企乂 mlCMwy黑耀煞寂 昴* 回於4$畋瑩杆強底*处*口主心飆 2戦* &網叙飆遵呻V

3、除汞 -M常烈*照啼魅求*龊弟。4祎 0一0熬*A A AA A AA AA“割突、秤2F1OS OS CE 吸4卒廟來届 H。wg孙 oooCSJvb咽繆4*ex:d_ve 氓一 邻床&尿即兰魅U 。吹即*躍&转卑聯貳帰揪扫黑毛 ERi?trA0:倉黎叙固皎久黑謂x/祁A黑需愿久黑电除PAW突4咽。必&届 数採库丈件与Firebird网络扳本老全.表嫁,姜别仅农于连嫔方无不 同.可以卖现零成本迁移。 救据库丈件仪受揉作糸统的限制,且支持将一个救据库分封成不 同丈件,炎破了捺作糸统最丸丈件的限创,提嘉了 IO乐吐量。 兜全炙持SQL92标谁,支持大部分SQL-99准功能。 丰富的开发工具夾持,

4、绝大部分基于Interbase的组件,可以直接 使用-f Firebird o 支持事务、存储过程.紐发彖等关糸救据库的所有特性。 可自己编写护長因数(UDF)。常用的嵌入式数据库mSQL rmini SQLJ是一个单用户枝据库管理糸统,个人使用免欢,商 业使用收费。由于它的短小轴悍,使其开发的应用糸统特别受刊互朕 网用户青味。mSQL rmini SQLJ是一种小型的关糸敦据库,性能不 是奴好对SQL语言的炙持也不够兜全,但衣一些网络数据库应用中 是足够了。. *mSQL的技术特点:姿全性方面,mSQL通过ACL文件谡定各主机上各 用户的访问权限,缺省是 全部可读/写。mSQL缺乏ANSI

5、SQL的丸 多敦特征,它仅仅卖现了一个最最少的API,没冇事务和参考疙整性。 mSQL与Lite ( 种类似C的脚本语言,与分发一起发行丿紧磁结合, 可以得列一个称为W3mSQL的一个网毬集成包,它是JDBC. ODBC. Perl和PHP API。SQLite在Linux主机上的安裝丸准备好SQLite源码:sqlite-amalgamation-3.5.9.tar.gz解压缩:tar zxvf sqlite-amalgamation-3.5.9.tar.gz -C /root/sqlite/for_pc 进入sqlite 目录:cd /root/sqlite/for_pc/sqlite-a

6、malgamation-3.5.9 酉乙査:/configure為译:make安裳:make install主要安幾了如下丈件: /usr/local/include/sqlite3.h /usr/local/include/sqlite3ex.h /usr/local/lib/libsqlite3* /usr/local/bin/sqlite3=SQLite shell命令SQLite库包令一个名字叫做sqlite3的令令行,它可以让用户手工输人幷块行而 向SQLite救据库的SQL命令。令令分为两种:用来管理多前数据库的SQL命令,以分号结東。 Shell本身的令令,以点开头,主要用来控制

7、救据的显示模式、朮殳査Shell 读取和显示救据的方式及其他糸统控制O打开名孝为aex1n的SQLitelt据库,衣终塢输入以下令冬: sqlite3 ex1Asqlite提示符下可以输入SQL语句对数据库进行標作和管理。sqlite create table tbl1 (one varchar(IO), two smallint);sqlite insert into tbl1 valuesChello!1, 10);sqlite insert into tbl1 values(,goodbye 20);sqlite select * from tbl1;hello!|10goodbye|2

8、0sqliteSQLite shell命令.header ON|OFF:设置是否显示敕据*格的列老.indicesTABLE:显示農格的所有列老.mode MODE:谡JL救据态格的显示樸式。耿沃是list,用.separator令令设 丘的字符串分隔字符(耿认是I)。我们比较习惯的是column格式.nullvalue STRING:多救据为空肘,用STRING来填尢。默认是空字符載 就是什么也不显示。.tables PATTERN:使用PATTERN楼无来显示表格.width NUM NUM.:谡査多以column棋式显示肘,救据显示的宽度.output FILENAME|stdout:谡

9、査救据输出的形无:文件更屛幕的标准输出。 .read FILENAME:从丈件读取SQL语句(2)其他糸统控制命令:.databases:显 示目询 乙经匹 的的敘据库老称.table:显示当前救据库中的所有表.help:显示shell的率助传息.show:显示shell岂 sqlite提供了一些可以用这些曲救搽作救据库。通过使用这些传逼一些标准SQL语句(以char * 型丿给sqlitesqlite就会为你操作救据岸。 sqlite琅MS的access样是丈件型救据岸,就是说,一个救据库此是一 个丈件,此救据库叟可以建止很多的表,可以建立素引.敵发尿等孑P但是, 宅渎际上得刊的就.是一个文

10、件。务份这个丈件此务儉了整个欢据库。 sqlite不需要任何救据库引繁,这盘来着如系你需4- sqlite泉毎存一些用 户敷据,/至都不需要妥慕救据库。1. 关健救扬结构sqlite里最活用刊的是类型。从救堀屛打开开始,sqlite就要为这个类型准备好内存,直到数据库关闭,整个过程都需要用刊这个类型。当 救据库打开时,这个类型的变量就代表了你要捺作的数据库。2. 打开救据库用这个因数开始救据库標作。需要传入两个参救,一是救据库丈件右。文件 右不需要一走存衣如果此丈件不存衣,sqlite会自动建立它。如果它存 札就尝战把它多敕扬库丈件来打开;sqlite3 *参救即前面提列的关钦 数据结构。函数

11、返回值表示捺作是否正确,如黑是SQLITE_OK则表示 標作正活。相关的区回值sqlite走义了一些宏。具体这些宏的含义可以参 考sqlite3.h x件,里面有详细定义。顺便说一下.sqlite3的代码注劭率 長非帝离的。3. 关翅敘据前面如果用sqlite3_open开启了 一个救据库,结尾肘不要忘了用这个函数关第1个参纵就是話场open正妖得刊的指针。第2个参救const char sql是一条sql语句,以、0结尾。第3个参救sqlite3一callback是回调,多这条语句执行之后,sqlite3会去调用 这个函 4KL。一第4个参救void *是你所提供的指针,你可以传雄任何一个指

12、针参数列这里, 这个参救最终会传刊回调 因数里面,如果不需要传递.指针给凹调 因数, 可以填NULL。后面再介绍回调因救的写法,以及这个参数的使用。第5个参救char errmsg是错炭伐息。说明:通 机 sqlite3_callback和它后面的void 这两个住盖都可以填NULL。 填NULL表示你不需要回调。比如做insert 作,para是Zl sqlite3_exec里传入的void水参救。it Upara参数,可以传入 一些特殊的指针(比如类指针.结构桔针丿,处后疫这里而强制转换成对 应的类型(这里面是voicf类型,必须强制转换成你的类型才可用丿o然后 捺作这些救据QAn_col

13、umn是这一条记录有多少个字段(即这条记录有多夕列)。char * column_value是个关钱值杳出来的敛据都隊存衣 这里,它卖 际上是个1维救组C不要以为是2维数组丿,每一个元素都是一个char”值, 是一个字段内家(用字符串来表示以0结尾丿Ochar * column_name跟column_value是对应的 表示这个字段的字段SQLite 的 API接口SQLite 的 API接口char * col_name4;Rchar * col_value1004 H丈艾学奇串敛纽?int LoadMylnfo( void * para, int n column, char * col

14、umn value, char * column_name) row+; /printf(Maa nM); return 0;int col=0;int row=0;static int callback(void *NotUsed, int argc, char *argv, char *azColName) inti;col=argc;for(i=0; iargc; i+)/printf(M%s = %s !n”,azColNamei, argvi ? argvi: NULL”); strcpy(col_valuerowi,argvi);/col_valuerowi=argvi;col_

15、namei=azColNamei;printf(H%s = %s !n”,col_namei, col_valuerowi);注意:C1 J只有执行姿询榇作f select;的肘候才会调用此回调函数;(2)查询刊多少条记录就会执行多少次回调因数,每次调用回调因数肘,其 携 洛的参救只有一条记录。另外注意:column name和column_ value的 地址 每次都是相同的,*column_name C字段丿 每次相同,但是,* column_nameC记录丿每次不同。J/、void mairyarmrmywShOsqlite3_close(db);return;SQLite 的 API接

16、 o第1个参救如前第2个参救是sql语句 sqlite3_exec里的sql是一样的是一个很普通 的以0结尾的char字符串。第3个参救是查询结果,它很然一维救纽(不要以为是二维救纽,更不要 以为是三维救纽丿o它内存布局是:第一行是字段老称,后而是紧接着是 每个字段的值第4个参救是查询岀多少条记录C即查出多夕行丿O第5个参数是多少个字段(多少列丿-第6个参数是错镁传息,艰前面一弊.这里不多说了。char *zErrMsg = 0Imre;rc = sqlite3_open(Mxrs.db* &db);if( rc )fprintf(stderr9 f,Can,t open database:

17、%snM, sqlite3_errmsg(db); sqlite3_close(db);exit(1);rc = sqlite3_exec(db/*select * from tblO; callback, 0, &zErrMsg); i( rc!=SQLITE_OK )fprintf(stderr, tfSQL error: %snf, zErrMsg); sqlite3_free(zErrMsg);result = sqlite3_get_table( db, Hselect *from MyTable_r &dbResult, &nRow, &nColumn, &errmsg );for

18、( i = 0; i nRow ; i+ )printf(11 第 %d 条记录nM, i+1 );for( j = 0 ; j nColumn; j+ )printf(41 字段老:%s 字段值:srT, dbResultQ, dbResult index);+index; / dbResult的字段值是连块的,从京0索引刊第nColumn -1索 列却是字段十称,从第nColumn索引开妬,后面都是字段值。printf(11n);sqlite3 *db;彳哆 char *zErrMsg = 0;int rc= sqlite3_open(Mxrs.dbH, &db);char dbResul

19、t;int rRow, nColumn;rc = sqlite3_get_table(db,select * from tblO;M, &dbResult, &nRow,&nColumn, &zErrMsg); sqlite3_close(db);int ij;for(i=0; ivnRow; i+)for(j=0;jnColumn;j+)printf(M%s = %s M, dbResult。, dbResultindex); in dex+;printf(MnH);return;嵌l入式数据库SQLite的移植 解庄缩:tar zxvf sqlite-amalgamation-3.5.9.

20、tar.gz -C /root/sqlite/for_arm 进入sqlite 目录:cd /root/sqlite/for arm/sqlite-amalgamation-3.5.9 是立安裟目录sqlite_install: mkdir/root/sqlite/for_arm/sqlite_install 昭査:/configure -host=arm-linux -prefix=/root/sqlite/for arm/sqlite install 偏译:make 安裳:make installI进入/root/for_arm/sqlitestall查看,可以发现有三个目录,分别是include, lib. bin。分别存放了编写sqlite数据库应用程序需要的头 丈件、应用程序编译和运 行肘均 需要的库 因救.可Aarm-linux统上 运行的sqlite令令行程序。嵌人式Li据库SQLite的移植arm-linux-gcc -I /root/sqlite/for_arm/sqlite jnstall/include/-L/root/sqIite/for_arm/sqlite_Jnstall/lib/ o sqlitejest sqlite_test.c Isqlite31 迓査环境变量。将交又编译生成的库及其决接丈件,即 /root/sqlite/for_ar

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论