您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第 9 章 嵌入式数据库程序设计
第9章嵌入式数据库程序设计目录嵌入式数据库概述1常用的嵌入式数据库2SQLite在Linux主机上的安装3SQLiteshell命令4sqlite数据库应用程序设计5SQLite的API接口6嵌入式数据库SQLite的移植7嵌入式数据库SQLite与Qt的连接8嵌入式数据库概述1.嵌入式数据库的内涵嵌入式数据库是一种具备了基本数据库特性的数据文件,它与传统数据库的区别是:嵌入式数据库采用程序方式直接驱动,而传统数据库则采用引擎响应方式驱动。嵌入式数据库的体积通常都很小,这使得嵌入式数据库常常应用在移动设备上。由于性能卓越,所以在高性能的应用上也经常见到嵌入式数据库的身影嵌入式数据库概述2.嵌入式数据库的特征嵌入性实时性可靠性可定制性跨平台嵌入式数据库概述3.嵌入式数据库的应用领域及未来趋势消费电子及网络设备军工和航空航天工业控制常用的嵌入式数据库1.BerkeleyDB嵌入式轻便灵活可伸缩BerkeleyDB是由美国SleepycatSoftware公司开发的一套开放源码的嵌入式数据库的程序库(databaselibrary),它为应用程序提供可伸缩的、高性能的、有事务保护功能的数据管理服务。BerkeleyDB为数据的存取和管理提供了一组简洁的函数调用API接口。它是一个经典的C-library模式的toolkit,为程序员提供广泛丰富的函数集,是为应用程序开发者提供工业级强度的数据库服务而设计的。常用的嵌入式数据库2.SQLite支持ACID事务。零配置而无需安装和管理配置;储存在单一磁盘文件中的一个完整的数据库;数据库文件可以在不同字节顺序的机器间自由共享;支持数据库大小至2TB;足够小,全部源码大致3万行c代码,250KB;比目前流行的大多数数据库对数据的操作要快;独立,没有额外依赖;SQL语言很大程度上实现了ANSISQL92标准。SQLite属于轻量级别数据库,它的源代码是C,其源代码完全开放。SQLite第一个Alpha版本诞生于2000年5月。目前的最新版本是SQLite3.5。SQLite有以下特性:常用的嵌入式数据库3.eXtremeDB内存数据库混合数据库嵌入式数据库由应用定制的API可预测的数据管理eXtremeDB是美国McObject公司的产品。主要特点:常用的嵌入式数据库4.Firebird嵌入式数据库Firebird的嵌入版有如下特色:数据库文件与Firebird网络版本完全兼容,差别仅在于连接方式不同,可以实现零成本迁移。数据库文件仅受操作系统的限制,且支持将一个数据库分割成不同文件,突破了操作系统最大文件的限制,提高了IO吞吐量。完全支持SQL92标准,支持大部分SQL-99标准功能。丰富的开发工具支持,绝大部分基于Interbase的组件,可以直接使用于Firebird。支持事务、存储过程、触发器等关系数据库的所有特性。可自己编写扩展函数(UDF)。常用的嵌入式数据库5.mSQL嵌入式数据库mSQL(miniSQL)是一个单用户数据库管理系统,个人使用免费,商业使用收费。由于它的短小精悍,使其开发的应用系统特别受到互联网用户青睐。mSQL(miniSQL)是一种小型的关系数据库,性能不是太好,对SQL语言的支持也不够完全,但在一些网络数据库应用中是足够了。mSQL的技术特点:安全性方面,mSQL通过ACL文件设定各主机上各用户的访问权限,缺省是全部可读/写。mSQL缺乏ANSISQL的大多数特征,它仅仅实现了一个最最少的API,没有事务和参考完整性。mSQL与Lite(一种类似C的脚本语言,与分发一起发行)紧密结合,可以得到一个称为W3-mSQL的一个网站集成包,它是JDBC、ODBC、Perl和PHPAPI。SQLite在Linux主机上的安装①先准备好SQLite源码:sqlite-amalgamation-3.5.9.tar.gz②解压缩:tarzxvfsqlite-amalgamation-3.5.9.tar.gz–C/root/sqlite/for_pc③进入sqlite目录:cd/root/sqlite/for_pc/sqlite-amalgamation-3.5.9④配置:./configure⑤编译:make⑥安装:makeinstall主要安装了如下文件:/usr/local/include/sqlite3.h/usr/local/include/sqlite3ex.h/usr/local/lib/libsqlite3*/usr/local/bin/sqlite3SQLiteshell命令SQLite库包含一个名字叫做sqlite3的命令行,它可以让用户手工输入并执行面向SQLite数据库的SQL命令。命令分为两种:•用来管理当前数据库的SQL命令,以分号结束。•Shell本身的命令,以点开头,主要用来控制数据的显示模式、设置Shell读取和显示数据的方式及其他系统控制。1sqlite3启动打开名字为“ex1”的SQLite数据库,在终端输入以下命令:sqlite3ex1SQLiteshell命令2数据库管理命令在sqlite提示符下可以输入SQL语句对数据库进行操作和管理。sqlitecreatetabletbl1(onevarchar(10),twosmallint);sqliteinsertintotbl1values('hello!',10);sqliteinsertintotbl1values('goodbye',20);sqliteselect*fromtbl1;hello!|10goodbye|20sqliteSQLiteshell命令3Shell本身的命令(1)常用的显示模式控制命令:.headerON|OFF:设置是否显示数据表格的列名.indicesTABLE:显示表格的所有列名.modeMODE:设置数据表格的显示模式。默认是list,用.separator命令设置的字符串分隔字符(默认是|)。我们比较习惯的是column格式.nullvalueSTRING:当数据为空时,用STRING来填充。默认是空字符串,也就是什么也不显示。.tablesPATTERN:使用PATTERN模式来显示表格.widthNUMNUM...:设置当以column模式显示时,数据显示的宽度.outputFILENAME|stdout:设置数据输出的形式:文件或屏幕的标准输出。.readFILENAME:从文件读取SQL语句(2)其他系统控制命令:.databases:显示目前已经匹配的数据库名称.table:显示当前数据库中的所有表.help:显示shell的帮助信息.show:显示shell目前的设置参数.quit和.exit:退出shellsqlite数据库应用程序设计intmain(intargc,char**argv){sqlite3*db;char*zErrMsg=0;intrc;if(argc!=3){fprintf(stderr,Usage:%sDATABASESQL-STATEMENT\n,argv[0]);exit(1);}rc=sqlite3_open(argv[1],&db);if(rc){fprintf(stderr,Can'topendatabase:%s\n,sqlite3_errmsg(db));sqlite3_close(db);exit(1);}rc=sqlite3_exec(db,argv[2],callback,0,&zErrMsg);if(rc!=SQLITE_OK){fprintf(stderr,SQLerror:%s\n,zErrMsg);sqlite3_free(zErrMsg);}sqlite3_close(db);return0;}#includestdio.h#includesqlite3.hstaticintcallback(void*NotUsed,intargc,char**argv,char**azColName){inti;for(i=0;iargc;i++){printf(%s=%s\n,azColName[i],argv[i]?argv[i]:NULL);}printf(\n);return0;}sqlite数据库应用程序设计注意:1.编译:gcc-I/usr/local/include-L/usr/local/lib-osqlite_testsqlite_test.c-lsqlite32.运行时需要libsqlite3.so.0共享库cp/usr/local/lib/libsqlite3.so.0/usr/lib/SQLite的API接口sqlite提供了一些C函数接口,可以用这些函数操作数据库。通过使用这些接口,传递一些标准SQL语句(以char*类型)给sqlite函数,sqlite就会为你操作数据库。sqlite跟MS的access一样是文件型数据库,就是说,一个数据库就是一个文件,此数据库里可以建立很多的表,可以建立索引、触发器等等,但是,它实际上得到的就是一个文件。备份这个文件就备份了整个数据库。sqlite不需要任何数据库引擎,这意味着如果你需要sqlite来保存一些用户数据,甚至都不需要安装数据库。SQLite的API接口1.关键数据结构sqlite里最常用到的是sqlite3*类型。从数据库打开开始,sqlite就要为这个类型准备好内存,直到数据库关闭,整个过程都需要用到这个类型。当数据库打开时,这个类型的变量就代表了你要操作的数据库。2.打开数据库intsqlite3_open(文件名,sqlite3**);用这个函数开始数据库操作。需要传入两个参数,一是数据库文件名。文件名不需要一定存在,如果此文件不存在,sqlite会自动建立它。如果它存在,就尝试把它当数据库文件来打开;sqlite3**参数即前面提到的关键数据结构。函数返回值表示操作是否正确,如果是SQLITE_OK则表示操作正常。相关的返回值sqlite定义了一些宏。具体这些宏的含义可以参考sqlite3.h文件,里面有详细定义。顺便说一下,sqlite3的代码注释率是非常高的。3.关闭数据intsqlite3_close(sqlite3*);前面如果用sqlite3_open开启了一个数据库,结尾时不要忘了用这个函数关闭数据库。基本流程API:SQLite的API接口1.执行sql语句intsqlite3_exec(sqlite3*,constchar*sql,sqlite3_callback,void*,char**errmsg);第1个参数就是前面open函数得到的指针。第2个参数constchar*sql是一条sql语句,以\0结尾。第3个参数sqlite3_callback是回调,当这条语句执行之后,sqlite3会去调用这个函数。第4个参数void*是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL。后面再介绍回调函数的写法,以及这个参数的使用。第5个参数char**errmsg是错误信息。说明:通常,sqlite3_callback和它后面的void*这两个位置都可以填NULL。填NULL表示你不需要回调。比如做insert操作,做delete操作,就没有必要使用回调。而当做select时,就要使用回调,因为sqlite3把数据查出来,得通过回调说明查出了什么数据。SQL语句操作API:SQLite的API接口2.exec的回调int(*sqlite3_callback)(void*,int,char**,char**);SQL语句操作API:intLoadMyInfo(void*para,intn_column,char**column_value,char**column_name)para是在sqlite3_exec里
本文标题:第 9 章 嵌入式数据库程序设计
链接地址:https://www.777doc.com/doc-5836457 .html