天津科技大学嵌入式操作系统-第5章 嵌入式数据库_第1页
天津科技大学嵌入式操作系统-第5章 嵌入式数据库_第2页
天津科技大学嵌入式操作系统-第5章 嵌入式数据库_第3页
天津科技大学嵌入式操作系统-第5章 嵌入式数据库_第4页
天津科技大学嵌入式操作系统-第5章 嵌入式数据库_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

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

文档简介

重点回顾共享内存通信获得一段共享内存区域:shmget函数的作用是在内存中获得一段共享内存区域。映射共享内存:使用函数shmat,它的作用是将创建的共享内存映射到具体的进程空间去。撤销映射:shmdt函数用来撤销映射。多线程编程12第5章嵌入式数据库5.1嵌入式数据库概述//5.2SQLite数据库5.3mSQL数据库//5.4BerkeleyDB数据库//

35.1嵌入式数据库概述5.1.1嵌入式数据库简介5.1.2嵌入式数据库的特点及分类5.1.3嵌入式数据库的应用45.1.1嵌入式数据库简介嵌入式数据库将数据库系统与操作系统和具体应用集成在一起,运行在各种智能嵌入式设备上。与传统的数据库系统相比,它一般体积较小,有较强的便携性和易用性,以及较为完备的功能来实现用户对数据的管理操作。但是,由于嵌入式系统的资源限制,它无法作为一个完整的数据库来提供大容量的数据管理,而且嵌入式设备可随处放置,受环境影响较大,数据可靠性较低。55.1.1嵌入式数据库简介在实际应用中,为了弥补嵌入式数据库存储容量小、可靠性低的不足,通常在PC机上配置后台数据库来实现大容量数据的存储和管理。嵌入式数据库作为前端设备,需要一个GUI交互界面来实现嵌入式终端上的人机交互,并通过串口实现和PC机上主数据源之间的数据交换,实现系统服务器端数据的管理,接收嵌入式终端上传的数据和下载数据到嵌入式终端机等操作。嵌入式数据库的名称来自其独特的运行模式。这种数据库嵌入到了应用程序进程中,消除了与客户机服务器配置相关的开销。6嵌入式数据库实际上是轻量级的,在运行时,它们需要较少的内存。它们是使用精简代码编写的,对于嵌入式设备,其速度更快,效果更理想。嵌入式运行模式允许嵌入式数据库通过SQL来轻松管理应用程序数据,而不依靠原始的文本文件。嵌入式数据库还提供零配置运行模式,这样可以启用其中一个并运行一个快照。5.1.1嵌入式数据库简介7在嵌入式系统中,对数据库的操作具有定时限制的特性,这里把应用于嵌入式系统的数据库系统称为嵌入式数据库系统或嵌入式实时数据库系统(ERTDBS)。嵌入式数据库是嵌入式系统的重要组成部分,也成为对越来越多的个性化应用开发和管理而采用的一种必不可少的有效手段。5.1.1嵌入式数据库简介8在嵌入式数据库领域,各大数据库厂商竞争也日趋激烈,Oracle、IBM、Sybase、InterSystems、日立、Firefbird等均在这一领域有所行动。如继2005年并购全球最大的内存数据库厂商TimesTen之后,去年,Oracle又收购了全球下载用户最多的嵌入式数据库厂商Sleepycat及其BerkeleyDB产品,进一步完善了嵌入式软件的产品线。从Oracle自身来说,Oracle提供的不仅是一个嵌入式数据库产品,更重要的是从底层提供的一种端到端的数据管理架构,并大力支持重点行业领域的关键合作伙伴在此架构上开发的相关应用和服务。5.1.1嵌入式数据库简介9嵌入式数据库会跟随信息技术以及互联网的发展得到普及,嵌入式数据库将成为工业智能化的必经之路,未来嵌入式数据库将有很大的发展空间。首先,专业化发展明显。其次,嵌入式数据库将朝标准化发展。最后,嵌入式数据库与企业内部信息的同步管理将得到发展。5.1.1嵌入式数据库简介105.1.2嵌入式数据库的特点及分类1.嵌入式数据库的特点2.嵌入式数据库的分类111.嵌入式数据库的特点嵌入性是嵌入式数据库的基本特性。嵌入式数据库不仅可以嵌入到其他的软件当中,也可以嵌入到硬件设备当中。例如嵌入式数据库Empress就是使数据库以组件的形式存在,并发布给客户,客户只需要像调用自己定义的函数那样调用相应的函数就可以创建表、插入删除数据等常规的数据库操作。客户在自己的产品发布时,可以将Empress数据库编译到自己的产品内,变成自己产品的一部分,最终用户是感受不到数据库的存在的,也不用特意去维护数据库。12可靠性要求是毋庸置疑的。嵌入式系统必须能够在没有人工干预的情况下,长时间不间断地运行。同时要求数据库操作具备可预知性,而且系统的大小和性能也都必须是可预知的,这样才能保证系统的性能。嵌入式系统中会不可避免地与底层硬件打交道,因此在数据管理时,也要有底层控制的能力,如什么时候会发生磁盘操作,磁盘操作的次数,如何控制等。底层控制的能力是决定数据库管理操作的关键。1.嵌入式数据库的特点13实时性和嵌入性是分不开的。只有具有了嵌入性的数据库才能够第一时间得到系统的资源,对系统的请求在第一时间内做出响应。但是,并不是具有嵌入性就一定具有实时性。要想嵌入式数据库具有很好的实时性,必须做很多额外的工作。比如:Empress实时数据库将嵌入性和高速的数据引擎、定时功能以及防断片处理等措施整合在一起来保证最基本的实时性。当然,不同的场合实时性要求比较高时,除了软件的实时性外,硬件的实时性也是必须的,具体情况需要有具体和切实的解决方案,不能一概而论。1.嵌入式数据库的特点14移动性是目前在国内提的比较多的一个说法,这和目前国内移动设备的大规模应用有关。可以这么说,具有嵌入性的数据库一定具有比较好的移动性,但是具有比较好的移动性的数据库,不一定具有嵌入性。比如,一个小型的C/S结构的数据库也可以运用在移动设备上,而具有移动性。但这个数据库本身是一个独立存在的实体,需要额外的运行资源,本质上讲和企业级数据库区别不大。所以不具有嵌入性,也基本上不具备实时性。Empress是优秀的嵌入式实时数据库,毫无疑问也是非常优秀的移动数据库。1.嵌入式数据库的特点15可定制性在嵌入式场合显得尤为重要。首先嵌入式场合硬件和软件的平台都是千差万别,基本都是客户根据需要自己选择的结果。所以嵌入式场合的数据库必须能够支持非常多的平台,如Empress目前支持6000多种平台。同时,数据存储要支持常见的存储设备,如CF/Flash/HD等。多进程和多线程是必备的,现在的嵌入式系统已经远远不是当初的简单的编程,代码量增大,功能日益复杂,所以必然要支持多线程和多进程。C/C++和SQL接口的支持也是必备的,作为数据库当然要有大家熟悉的SQL,但同时不要忘记嵌入式场合用的最多的标准的C/C++接口。1.嵌入式数据库的特点162.嵌入式数据库的分类可以按照嵌入的对象不同分为:软件嵌入数据库、设备嵌入数据库、内存数据库。也有人将它们粗略的分为:嵌入数据库、移动数据库、小型的C/S结构数据库等。小型C/S数据库。这种数据库其实是企业级数据库的一个缩小版,缩小以后可以在一些实时性要求不高的设备内运行。它只和操作系统有关,一般只能支持一些常见的移动操作系统,如,Linux和WindowsCE系列。17面向软件嵌入数据库。它将数据库作为组件嵌入到其他的软件系统中。一般用在对数据库的安全性、稳定性和速度要求比较高的系统中。这种结构资源消耗低,最终用户不用维护数据库,甚至感受不到数据的存在。面向设备嵌入数据库。它将关系型数据库嵌入到设备当中去,作为设备数据处理的核心组件。这种场合要求数据库有很高的实时性和稳定性,一般运行在实时性非常高的操作系统当中。为了达到这些要求有的厂商采用关系型的数据结构,有的采用非关系型的数据结构。有时候甚至直接和硬件打交道。当然,这种结构在实时性要求不高的移动场合更能够胜任。内存数据库。数据库直接在内存内运行,数据处理更加高速,不过安全性等方面需要额外的手段来保障。2.嵌入式数据库的分类185.1.3嵌入式数据库的应用1.医疗领域北美和欧洲的一些著名的厂商利用嵌入式数据库开发过完整的电子病历系统,同时将数据库嵌入到医疗器械当中。如,血液分析装置、乳癌的检测装置、医学图像装置等。2.军事设备和系统一些著名的军事机构和全球著名的武器生产商将嵌入式数据库运用到他们的系统控制装置、战士武器、军舰装置、火箭和导弹装置中。这些场合用的数据库有很多的安全设定和特化设定,基本上严格按照每个客户的技术标准的要求来特化引擎级构件。具体的应用级的构件由客户自己完成。193.地理信息系统地理信息包括的范围很广,在国外地理信息系统已经发展了很多年,国内这几年也逐渐加大对地理信息系统方面的投入。嵌入式数据库在地理信息系统方面的应用非常广泛。如,空间数据分析系统、卫星天气数据、龙卷风和飓风监控及预测等等。几乎涉及到地理信息的方方面面。4.工业控制工业控制的一个基本方式是一个反馈的闭环或半闭环的控制方式。随着工业控制技术的发展,简单的数据采集方式和反馈方式基本上很难满足要求。采用嵌入式数据库即能够进行高速的数据采集,也能够快速的反馈。5.1.3嵌入式数据库的应用205.网络通讯随着互联网的发展,网络越来越普及,网络设备的处理能力越来越强、各种要求也越来越高,运用嵌入式数据库也成了必然趋势。我们现在日常见到的很多网络设备和系统都已经使用了嵌入式数据库。6.空间探索一些全球著名的机构将嵌入式数据库用在一些著名的空间探索装置中,如大家熟知的一些太阳系内行星的探测器等。5.1.3嵌入式数据库的应用217.消费类电子目前在中国消费类电子比较火热,它包含的范围也非常广。如:个人消费相关的PND、移动电话、PDA、SmartPhone、数码产品等;信息家电和智能办公相关的机顶盒、家用多媒体盒、互联网电视接收装置、打印机、一体机等;还有汽车电子等。5.1.3嵌入式数据库的应用225.2SQLite数据库5.2.1SQLite数据库概述5.2.2SQLite数据库的安装5.2.3SQLite数据库基本命令5.2.4SQLite数据库管理命令5.2.5SQLite的API函数5.2.6SQLite实例分析235.2.1SQLite数据库概述1.概述2.SQLite组件3.数据类型241.概述

SQLite是D.RichardHipp用C语言编写的开源嵌入式数据库引擎。发布于2000年5月。它是完全独立的,不具有外部依赖性。SQLite支持多数SQL92标准,可以在所有主要的操作系统上运行。其创建者保守地估计SQLite可以处理每天负担多达100,00次点击率的Web站点,并且SQLite有时候可以处理10倍于上述数字的负载。5.2.1SQLite数据库概述25SQLite对SQL92标准的支持包括索引、限制、触发和查看。SQLite不支持外键限制,但支持原子的、一致的、独立和持久(ACID)的事务(后面会提供有关ACID的更多信息)。SQLite通过数据库级上的独占性和共享锁定来实现独立事务处理。这意味着当多个进程和线程可以在同一时间从同一数据库读取数据,但只有一个可以写入数据。在某个进程或线程向数据库执行写入操作之前,必须获得独占锁定。在发出独占锁定后,其他的读或写操作将不会再发生。5.2.1SQLite数据库概述262.SQLite组件

SQLite由以下几个组件组成:SQL编译器、内核、后端以及附件SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展SQLite的内核变得更加方便。所有SQL语句都被编译成易读的、可以在SQLite虚拟机中执行的程序集。5.2.1SQLite数据库概述275.2.1SQLite数据库概述3.数据类型SQLite不支持静态数据类型,而是使用列关系。这意味着它的数据类型不具有表列属性,而具有数据本身的属性。当某个值插入数据库时,SQLite将检查它的类型。如果该类型与关联的列不匹配,则SQLite会尝试将该值转换成列类型。如果不能转换,则该值将作为其本身具有的类型存储。SQLite支持NULL、INTEGER、REAL、TEXT和BLOB数据类型。285.2.2SQLite数据库的安装sqlite是一个面向嵌入式系统的数据库,编译完成只有200K,同时支持2T的数据记录。对于嵌入式设备是一个很好的数据库引擎。SQLite是源码开放,可以直接到网上免费下载源码包,其下载地址为:/download.html。这里我们下载到了这个版本,我们使用的操作系统是ubuntu10,依照Readme中的步骤,其安装过程如下:1.本地安装把下载到的压缩包拷贝到root目录下,然后运行解压压缩包命令,在当前目录会生成一个sqlite-autoconf-3071502的子目录,所有的源代码都存放到了该目录中,进入到该目录进行配置,配置完后会在当前目录下生成Makefile文件。29接下来编译并安装,其命令如下:使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤如下:[root@JLUZH~]#tar-zxvfsqlite-autoconf-3071502.tar.gz[root@JLUZH~]#cdsqlite-autoconf-30715025.2.2SQLite数据库的安装【常用参数】:tar常用参数如下:-x解开一个打包文件的参数指令-f指定打包后的文件名,注意:在f之后不能有其他参数-z调用gzip来压缩或解压打包文件-v执行时显示详细的信息30./configure是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本make是用来编译的,它从Makefile中读取指令,然后编译。makeinstall是用来安装的,它也从Makefile中读取指令,安装到指定的位置。

[root@JLUZH~/sqlite-autoconf-3071502]#./configure[root@JLUZH~/sqlite-autoconf-3071502]#make[root@JLUZH~/sqlite-autoconf-3071502]#makeinstall

5.2.2SQLite数据库的安装31在make和makeinstall之后,库文件编译并安装在/usr/local/lib目录下,可执行文件sqlite3安装在/usr/local/bin目录下,头文件安装在/usr/local/include目录下。在链接程序时,为了能够找到库文件,需要把库文件所在路径加到系统文件/etc/ld.so.conf中,如图

在文件后面追加/usr/local/lib一行内容。保存文件并退出,重新启动系统之后,设置生效,如果不想重新启动系统,可运行如下命令:[root@JLUZH~]#/sbin/ldconfig

5.2.2SQLite数据库的安装32为了验证安装是否成功,在shell下运行sqlite3命令创建一个数据库,并测试数据库,其命令如下:

[root@JLUZHbin]#sqlite3SQLiteversion3.6.20Enter".help"forinstructionsEnterSQLstatementsterminatedwitha";"sqlite>5.2.2SQLite数据库的安装332.交叉编译与安装如果要把SQLite3运行在嵌入式体系上,则需要对SQLite3进行交叉编译。以编译在ARM体系运行的SQLite3为例,基本操作步骤和前面一致,只是更改了配置信息。--disabel-tcl参数表示屏蔽掉tcl库;-prefix参数指定安装的路径,在这里/usr/local为指定的安装bin、lib、include路径;--host参数指定交叉编译器。这里armv4l-unknown-linux为交叉编译器。需要指出的是,该交叉编译器需要提前安装好,并且交叉编译器的路径已经加入到环境变量中。配置完后,编译安装的步骤和本地安装一致。[root@JLUZHsqlite-3.6.20]#./configure–disable–tcl–host=armv4l-unknown-linux–prefix=/usr/local

5.2.2SQLite数据库的安装345.2.3SQLite数据库基本命令便于学习,我们结合实例来说明命令的使用,假设我们要设计一个个人信息管理系统。首先我们根据需求来设计一个数据库,命名为test.db,在个人信息管理系统中我们主要是要实现对某个人的信息进行增加、删除、修改、查询等操作,而个人信息主要包括姓名、性别和电话,我们创建一个people的数据表,这样就可以起到一个通讯录的作用,用户也可以根据别的需求增加其他字段。另外,在数据库的表中应该有一个主键,由于名字可能发生重名,所以不能作为主键,所以我们将增加ID字段来作为主键。35people数据表的结构如表5-1所示。5.2.3SQLite数据库基本命令36用sqlite3建立数据库的方法很简单,启动终端,只需输入如下命令:[root@JLUZHsqlite-3.6.20]#sqlite3test.dbSQLiteversion3.6.20Enter".help"forinstructionsEnterSQLstatementsterminatedwitha";"(1)建立数据库37createtable指令的语法为:createtabletable_name(field1,field2,field3,...);table_name是数据表的名称,fieldx则是字段的名字。sqlite3与许多SQL数据库软件不同的是,它不在乎字段属于哪一种数据型态,sqlite3的字段可以储存任何类型:文字、数字、大量文字(blub),它会在适时自动转换。假设我们要建一个名叫people的数据表,只要键入以下指令就可以了:CREATETABLEpeople(IDintegerprimarykey,namevarchar(10),ageinteger,numvarchar(18));执行以上命令建立了一个名叫people的数据表,里面有ID、name、age、num四个字段。(2)建立表38如果数据表有相当多的数据,我们便会建立索引来加快速度。这个指令的语法为:createindexindex_nameontable_name(field_to_be_indexed);针对上面的数据表people建立一个索引,则可以使用如下命令:createindexpeople_name_indexonpeople(name);意思是针对people数据表的name字段,建立一个名叫people_name_index的索引。一旦建立了索引,sqlite3会在针对该字段作查询时,自动使用该索引。这一切的操作都是在幕后自动发生的,无须使用者特别指令。(3)建立索引39接下来我们要加入记录了,加入的方法为使用insertinto指令,语法为:insertintotable_namevalues(data1,data2,data3,...);例如在people数据表中,我们使用如下命令加入记录:insertintopeopleVALUES(1,'LiMing',20,);insertintopeopleVALUES(2,'LiSi',21,);insertintopeopleVALUES(3,'WangWu',20,);(4)插入记录40(5)查询记录查询记录的命令为select,其基本格式如下:selectcolumnsfromtable_namewhereexpression;以下是select命令的一些例子:select*frompeople;当然是列出所有数据库的内容select*frompeoplewherename='LiSi';查找姓名为LiSi的记录select指令是SQL中最强大的指令,这里只是简单介绍select的基本用法,进一步的各种组合,请大家参考有关数据库的书籍41(6)修改或删除记录掌握select语句的用法非常重要,因为要在sqlite中更改或删除记录,其语法是类似的。修改记录的命令为update,删除记录的命令为delete,其使用如下:updatepeoplesetname='Lisi'wherename='LiSi';修改姓名为LiSi的记录deletefrompeoplewherename='Lisi';删除姓名为Lisi的记录

425.2.4SQLite数据库管理命令在终端输入sqlite3命令启动数据库系统后,就会出现sqlite->提示符,在提示符下输入命令即可操作SQLite3数据库,数据库的管理可以使用命令行方式,也可以使用图形化方式进行管理。1.命令行方式管理命令(1)Help命令启动sqlite数据管理系统后,出现提示符sqlite->,则可以输入数据库管理命令了,注意命令之前必须用“.”开头,比如help命令的执行如下:43sqlite>.help.backup?DB?FILEBackupDB(default"main")toFILE.bailON|OFFStopafterhittinganerror.DefaultOFF.databasesListnamesandfilesofattacheddatabases.dump?TABLE?...DumpthedatabaseinanSQLtextformatIfTABLEspecified,onlydumptablesmatchingLIKEpatternTABLE.…

(1)Help命令44Database命令用于查看当前的数据库,其命令格式如下:sqlite>.databaseseqnamefile--------------------------------------------------------------0main/root/sqlite/test.db1temp输入.database命令后,即可按顺序显示当前的数据库,并且显示对应数据库的文件,这里是/root/sqlite/test.db文件。(2)Database命令45Tables命令用于查看当前数据库中有多少个数据表,其命令格式如下:qlite>.tablespeople输入.tables命令后,可以看出,在这个数据库中存在一个people的数据表。(3)Tables命令46Schema命令用于查看数据表的结构,其命令格式如下:sqlite>.schemapeopleCREATETABLEpeople(IDintegerprimarykey,namevarchar(10),ageinteger,numvarchar(18));

输入.schemapeople命令后,即可显示people数据表的结构。(4)Schema命令47Output命令用于把查询的结果输出到文件,其使用格式如下:sqlite>.outputwen.txtsqlite>select*frompeople;sqlite>.exit退出后,即可在当前目录下找到wen.txt文件,然后使用cat命令显示其内容,其操作如下:

[root@JLUZHsqlite]#catwen.txt1|LiMing|20|3623021989010102142|LiSi|21|3623021990050102543|WangWu|205)Output命令48使用.dump命令可以输出表结构,同时输出操作记录。这样可以创建一个包含必要命令和数据的文件,从而重新创建数据库。.dump命令也可以用于备份数据库表,其操作格式如下。sqlite>.dumpPRAGMAforeign_keys=OFF;BEGINTRANSACTION;CREATETABLEpeople(IDintegerprimarykey,namevarchar(10),ageinteger,numvarchar(18));INSERTINTO"people"VALUES(1,'LiMing',20,);INSERTINTO"people"VALUES(2,'LiSi',21,);INSERTINTO"people"VALUES(3,'WangWu',20,);COMMIT;(6)Dump命令49(7)quit/exit这两个命令用于退出sqlite数据库系统,其操作如下:sqlite>.quit[root@JLUZHsqlite]#50管理SQLite数据库除命令行外,网络上还有很多开源的可视化的SQLite数据库管理工具,登陆/或者通过其他搜索引擎(GOOOGLE/BAIDU),输入“SQLite”可以找到一大片相关工具,比如,SQLite

Database

Browser、SQLite

Administrator...

等等。这里推荐SQLite

Administrator工具,该工具界面支持简体中文、界面比较简洁、数据库相关管理操作相对比较简便,该工具可以登陆http://sqliteadmin.orbmu2k.de/下载,其操作界面如图5-3所示2.图形化管理工具512.图形化管理工具52重点回顾嵌入式数据库简介SQLite数据库SQLite数据库基本命令:建立数据库、建立表、建立索引、插入记录、查询记录、修改和删除记录SQLite数据库管理命令:Help、Database、Tables、Schema、Output、Dump、quit/exit535.2.5SQLite的API函数1.打开数据库打开数据库的函数格式如下:intsqlite3_open(constchar*filename,/*数据库名称*/sqlite3**ppDb/*输出参数,SQLite数据库句柄*/);该函数用来打开或创建一个SQLite3数据库。如果在包含该函数的文件所在的路径下有同名的数据库(*.db),则打开数据库,如果不存在数据库,则创建一个同名的数据库在该路径下。如果打开或创建数据库成功,则该函数返回0,输出参数为sqlite3类型的变量,后续对该数据库的操作,通过该参数进行传递。54关闭数据库的函数格式如下: intsqlite3_close(sqlite3*db);当结束对数据库的操作时,调用该函数来实现关闭数据库,该函数的一个参数是成功打开数据库时的输出参数----sqlite3类型的变量。2.关闭数据库55intsqlite3_exec(sqlite3*,/*打开的数据库名称*/constchar*sql,/*要执行的SQL语句*/sqlite_callback,/*回调函数*/void*,/*回调函数的参数*/char**errmsg/*错误信息*/);实现对数据库操作时,可以通过调用该函数来完成,sql参数为具体操作数据库的SQL语句。在执行过程中,如果出现错误,相应错误信息可以存放在errmsg变量中。3.执行函数56释放内存函数的格式如下:voidsqlite3_free(char*z);在对数据库操作时,如果需要释放在中间过程中保存在内存的数据,可以通过该函数来清除内存空间。4.释放内存函数57显示错误信息函数的格式如下:constchar*sqlite3_errmsg(sqlite3*)通过API函数实现对数据库操作的过程中,出现的错误信息可以通过该函数给出。5.显示错误信息58获取结果集函数的格式如下:intsqlite3_get_table(sqlite3*,/*打开的数据库名称*/constchar*sql,/*要执行的SQL语句*/char***resultp,/*结果集*/int*nrow,/*结果集的行数*/int*ncolumn,/*结果集的列数*/char**errmsg/*错误信息*/);对数据库进行查询操作时,可以通过该函数来获取结果集。该函数的入口参数为查询的SQL语句,出口参数有二维数据指针,指示查询结果的内容,还有结果集的行数和列数,这里面的行数为纯记录的条数,但是resultp数组里包含一行字段名的值。6.获取结果集59释放结果集函数格式如下:intsqlite3_free_table(char**result);释放sqlite3_get_table()函数所分配的内存空间。7.释放结果集60声明SQL语句的函数格式如下:intsqlite3_prepare(sqlite3*,constchar*,int,sqlite3_stmt**,constchar**);该接口把一条SQL语句编译成字节码留给后面的执行函数,使用该接口访问数据库是当前比较好的一种方法。8.声明SQL语句61销毁一个准备好的SQL声明的函数格式如下:intsqlite3_finalize(sqlite3_stmt*);该函数将销毁一个准备好的SQL声明,在数据库关闭之前,所有准备好的声明都必须被释放销毁。9.销毁SQL声明62重置SQL声明的函数格式如下:intsqlite3_reset(sqlite3_stmt*);函数用来重置一个SQL声明的状态,使得它可以被再次执行。10.重置SQL声明635.2.6SQLite实例分析本节通过一个小例子说明如何在C与C++调用SqliteAPI完成数据库的创建、插入数据与查询数据。本节用的数据库为上节建立的test.db,本文的开发环境为ubuntu,程序的代码如下:645.2.6SQLite实例分析#include<stdio.h> /***sqlite.c*5-2-6**/#include<sqlite3.h>intmain(){ sqlite3*db=NULL; intrc;introw,col; char*Errormsg;

char**Result; inti=0,j=0;

rc=sqlite3_open("test.db",&db)65

if(rc){fprintf(stderr,"cant,topen:%s\n",sqlite3_errmsg(db)); sqlite3_close(db); return1; } elseprintf("opensuccessly!\n"); char*sql="createtablepeople(IDintegerprimarykey,namevarchar(10),ageinteger,numvarchar(18))"; sqlite3_exec(db,sql,0,0,&Errormsg);5.2.6SQLite实例分析66 sql="insertintopeoplevalues(1,'LiMing',20,)"; sqlite3_exec(db,sql,0,0,&Errormsg); sql="insertintopeoplevalues(2,'LiSi',21,)"; sqlite3_exec(db,sql,0,0,&Errormsg); sql="insertintopeoplevalues(3,'WanWu',20,)"; sqlite3_exec(db,sql,0,0,&Errormsg); sql="select*frompeople";5.2.6SQLite实例分析67 sqlite3_get_table(db,sql,&Resu

温馨提示

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

评论

0/150

提交评论