版权归原作者所有,如有侵权,请联系我们

[科普中国]-嵌入式数据库语言

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

嵌入式数据库介绍

嵌入式系统在国内的研发也是近年来才起步的然而发展极为迅速。 嵌入式系统早期涉及到的数据量很少,用简单的文本式数据管理模式足以适应它的需要,采用文件作为数据存取的逻辑载体。文件作为数据存储载体主要有以下的缺点:一是增加了应用开发的难度与代价,所有的应用都独立重复对数据的管理;二是数据共享性差,而数据交互在网络时代是必需的;三是独立性、语义性、移植性差,造成了软件的可重用性差,系统成本高。随着应用领域的不断扩展,面临需要处理的数据量也在不断增加,文本式的数据管理模式渐渐呈现出局限性,成为了系统研发的瓶颈。 对数据的整合管理需求上升到数据库层面,嵌入式系统迫切需要数据库技术支持。

嵌入式数据库无须独立运行的数据库引擎,它是由程序直接调用相应的API去实现对数据的存取操作。更直白的讲,嵌入式数据库是一种具备了基本数据库特性的数据文件,嵌入式数据库与其它数据库产品的区别是,前者是程序驱动式,而后者是引擎响应式。嵌入式数据库的一个很重要的特点是它们的体积非常小,编译后的产品也不过几十K。这不但对桌面程序的数据存储方案是一个很好的选择,也使得它们可以应用到一些移动设备上。同时,很多嵌入式数据库在性能上也优于其它数据库,所以在高性能的应用上也常见嵌入式数据库的身影1。

SQL ite嵌入式数据库嵌入式数据库技术已经成为一个热点研究新领域,各大数据库厂商也都推出了自己各具特色的产品,用户需要根据应用平台确立一个平衡点加以选择。
SQL ite是 D. R ichard Hipp开发的开源性嵌入式数据库引擎 ,全部源代码在 3万行左右,编译后的程序大小在 250kb,甚至可缩小至 125kb左右,最多可以管理 2TB的数据,支持 SQL 语句,是个极端轻量级的关系数据库,提供 B - tree存储数据的模式,以Base 64机制将二进制数据转换成ASCII编码形成存储,无数据类型,却保留了数据库的大部分特征,提供了对 SQL92 标准的大多数支持,支持多表、索引、事务、视图、触发和一系列的用户接口及驱动。
SQL ite由于小、快、简单、可靠、安全、稳定,性价比极高,深受欢迎。SQL ite有一种优雅、标准化的层次结构设计。顶层接口层 ( Interface)是一个 C语言库,即使使用的是不同语言的 API,在底层执行的都是 C语言库。
SQL ite库的公用接口函数是在 main. c,legacy. c 和vdbeap i. c源代码文件中实现的,SQL ite库中所有的外部符号都以 sqlite3为前缀,以 sqlite3 开始的符号形成了 SQL ite的 API。接着是标记处理器 ( Tokenize) 、分析器 ( Parser)和代码生成器 (Code generator) 。 从接口接收到命令后,传到标记处理器,从命令字符串中解析 SQL 语句,再送给代码分析器,代码生成器将代码分析器成果生成完整 SQL 语句送入虚拟机 (V irtual Machine)
执行 SQL语句。
在下部是基于 Knkuth经过优化的 B 树,运行在可调整的页面缓冲 ( Pager Cache)上,有助于将对磁盘的查找减到最小,B 树的请求得到快速、安全、有效的处理。 操作系统接口 (OS Interface)提供一个抽象的操作系统接口层,保证其不同系统之间的兼容性2。

使用C语应用SQL iteC语言利用 SQL ite提供的 API函数来完成与数据库的交互:

Sqlite3 3 db = sqlite3 open ( " mydb " , 0777,&errm sg) ; ∥打开数据库文件ret = sqlite3 exec ( db, qry, null, null,&errm sg) ; ∥SQL语句的执行程序Sqlite3 close ( db) ; ∥关闭数据库将应用程序通过交叉编译器编译:

arm - 1 inux - gee - I/ root/ sqlite - L / root/ sqlite—o mydb mydb. c - lsqlite3其 中,- I/ root/ sqlite 指明包含的头文件“sqlite3. h”所在的位置;- L / root/ sqlite指明编译要链接的库文件所在的位置;- lsqlite3指明编译要连接的库文件。
此外,如果想取回 SQL 语句访问数据库的结果,就要对每一个记录执行回调函数 call - back ( ) 2。

使用JAVA应用SQL ite为了应用 Java接口,要采用第三方的接口驱动程序。接口提供了两种连接 SQL ite的方式 :一是直接用 JN I技术调用 SQL ite的 C语言接口,二是接口程序实现了 Java标准规范的 JDBC接口。
第三方接口库中的 Java代码包含 JN I接口和多个版本的 JDBC接口程序。可根据 JRE的版本选择相应的 JDBC程序。Java类包加上 Sqlite jni. dll文件,组成了 SQL ite的 Java接口库,在应用 Java语言调用 JDBC或 JN I接口时,都是通过应用 Java的本地化技术调用 Sqlite jni. dll文件,完成对 SQL ite数据库的操作。
用户一定要保证在类路径 class path 中 有“sqlite. jar”,并且保证在你的 JAVA 库路径 JAVA li2 brary path中有本地库 native library。用 " SQL ite. JD2BCD river"作为 JDBC的驱动程序类名。连接 JDBC的 URL格式为:jdbc: sqlite: /path。
下面给出应用 JDBC连接 SQL ite关键代码:

Class clz = Class. forName ( " SQL ite. JDBCD riv2er" ) ; ∥申明 DBC驱动程序Connection conn = D riverManager. getConnection( " jdbc: sqlite: /host/mydb. db" ) ; ∥连接库Statement stm t = conn. createStatement( ) ; /stm t. execute ( " create table tb ( name varchar(1OO) , age int) " ) ; /生成 tb表stm t. execute ( " insert into person values(‘aaa’ ’ ,21) " ) ; ∥插入数据result = stm t. executeQuery ( " select from per2son" ) ; ∥用 SQL语句读出数据while ( resuh. next( ) ) {System. out. p rintln ( resuh. getString(1) ) ;System. out. p rintln ( resuh. getlnt(2) ) ;} 运行程序时要在 Java. exe命令行加入选项 ja2va. 1 ibrary. path指定到 sqlite jni. dll所在的路径。JAVA程序又具有简单易学、面向对象、平台无关性、稳定安全等特点。 两者结合起来开发的应用程序必然兼具两方面的优势2。