【php精品源码栏目提醒】:网学会员php精品源码为您提供sqlite3函数使用说明 - 其它资料参考,解决您在sqlite3函数使用说明 - 其它资料学习中工作中的难题,参考学习。
第 11 章 嵌入式数据库11.1 嵌入式数据库概述1. 嵌入式数据库介绍 随着电子技术的飞速发展,嵌入式系统中的存储器容量和性能也在迅速提高,这为扩大嵌入式的应用领域提供了必要的物理基础。
展望未来,嵌入式系统正在向网络化、智能化等高端应用方向发展。
在这个发展过程中,嵌入式系统内的数据量会急剧膨胀。
因此,嵌入式数据库的作用将会变得越来越重要。
由于嵌入式平台和应用领域的多样化,所以嵌入式数据库的体系结构与运行模式和企业级数据库有很大的区别。
嵌入式数据库的主要特性如下:(1)嵌入性 嵌入性是嵌入式数据库的根本特性。
嵌入式数据库不但可以嵌入到各种软件中,也能嵌入到硬件中。
(2)可移植性 可移植性是嵌入性的基本保证。
嵌入式数据库必须能够支持各种硬件平台。
(3)实时性 在嵌入式领域, 实时性是一个重要的指标。
所以嵌入式数据库也需要具有较高的实时性能。
(4)伸缩性 伸缩性使嵌入式数据库能够满足各种应用需要,提高嵌入式系统的性能。
(5)可移动性 随着嵌入式系统的网络化发展, 可移动性也正变得越来越重要。
所以嵌入式数据库需要满足可移动性的要求。
为了更好的满足嵌入式应用的需求,嵌入式数据库本身需要具有企业级数据库的基本功能(比如一致性、安全性等) 。
此外,嵌入式数据库也必须提供一套完整的 SQL 接口,以满足应用开发的需要。
总而言之,嵌入式数据库的应用环境是非常苛刻的。
嵌入式数据库需要在满足应用要求的前提下保证高效的运行性能。
根据应用方式的不同,嵌入式数据库可以大致分为以下几类:(1)C/S 嵌入式数据库 C/S 嵌入式数据库可以看成是企业级数据库的一个精简版, 一般运用在对实时性要求不高的系统中。
(2)面向软件嵌入式数据库 面向软件嵌入式数据库以组件的形式嵌入到软件中, 一般运用在对运行速度和安全性要求较高的系统中。
(3)面向硬件嵌入式数据库 面向硬件嵌入式数据库直接嵌入到硬件设备中, 一般运用在对实时性和稳定性要求较高的系统中。
(4)内存嵌入式数据库 内存嵌入式数据库直接运行在内存中,所以运行性能非常高。
但数据无法永久保存。
2. SQLite 介绍 SQLite 是一款轻量级的开源嵌入式数据库,由 D.Richard Hipp 在 2000 年发布。
SQLite使用方便,性能出众,广泛应用于消费电子、医疗、工业控制、军事等各种领域。
SQLite主要具有以下特点: 性能:SQLite 对数据库的访问性能很高,其运行速度比 Mysql、PostgreSQL 等开源数据库要快很多。
体积:SQLite 的体积非常小巧,最低只需要几百 K 的内存就可以运行。
可移植性: 也能在 Windows、 SQLite 的能支持各种 32 位和 64 位体系的硬件平台, Linux、BSD、Mac OS、Solaries 等软件平台中运行。
稳定性:SQLite 支持事务的 ACID 特性,既原子性、一致性、隔离性、持久性 SQL 支持:SQLite 支持 ANSI SQL92 中的大多数标准,提供了对子查询、视图、触发器等机制的支持。
接口:SQLite 为 C、Java、
PHP、Python、Tcl 等多种语言提供了 API 接口。
SQLite 总体采用了模块化设计,其结构如图 11-1 所示。
接口 编译器 数据库引擎 后台 数据库 图 11-1 SQLite 结构示意图(1)接口。
接口由 SQLite C API 函数组成。
所有的应用程序都必须通过接口访问 SQLite数据库。
(2)编译器。
编译器由词法分析、语法分析和中间代码生成三个模块组成。
其中,词法分析模块和语法分析模块负责检查 SQL 语句的语法,然后把生成的语法树传递给中间代码生成模块。
中间代码生成模块负责生成 SQLite 引擎可以识别的中间代码。
(3)数据库引擎。
数据库引擎是 SQLite 的核心,负责运行中间代码,指挥数据库的具体操作。
(4)后台。
后台由 B 树、页缓存和系统调用三个模块组成。
其中,B 树负责维护索引,页缓存负责页面数据的传送,系统调用负责和操作系统交互,最终实现数据库的访问。
11.2 SQLite3 的使用11.2.1 SQLite3 的命令 SQLite3 是目前最新的 SQLite 版本。
可以从 http://www.sqlite.org/download.html 网站上 。
下载 SQLite3 的源代码(本书使用的版本是 sqlite-3.6.12.tar.gz) 解压缩后进入 sqlite-3.6.12 的根目录,首先命令“./configure”生成 Makefile 文件,接着运行命令“make”对源代码进行编译,最后运行命令“make install”安装 SQLite3。
安装完毕后,可以运行命令 sqlite3 查看 SQLite3 是否能正常运行,如下所示:rootlocalhost sqlite3SQLite version 3.6.12Enter .help for instructionsEnter SQL statements terminated with a sqlite 可以看到,SQLite3 启动后会停留在提示符 sqlite处,等待用户输入 SQL 语句。
在使用 SQLite3 前需要先了解下 SQLite3 支持的数据类型。
SQLite3 支持的基本数据类型主要有以下几类: NULL NUMERIC INTEGER REAL TEXT SQLite3 会自动把其他数据类型转换成以上 5 类基本数据类型,转换规则如下所示: char、clob、test、varchar— TEXT integer—INTEGER real、double、float— REAL blob—NULL 其余数据类型都转变成 NUMERIC 下面通过一个实例来演示 SQLite3 的使用方法。
(1) 新建一个数据库 新建数据库 test.db(使用.db 后缀是为了标识数据库文件) 。
在 test.db 中新建一个表test_table,该表具有 name、sex、age 三列。
SQLite3 的具体操作如下所示:rootlocalhost home sqlite3 test.dbSQLite version 3.6.12Enter .help for instructionsEnter SQL statements terminated with a sqlite create table test_tablename sex age 如果数据库 test.db 已经存在,则命令“sqlite3 test.db”会在当前目录下打开 test.db。
如果数据库 test.db 不存在,则命令“sqlite3 test.db”会在当前目录下新建数据库 test.db。
为了提高效率,SQLite3 并不会马上创建 test.db,而是等到第一个表创建完成后才会在物理上创建数据库。
由于 SQLite3 能根据插入数据的实际类型动态改变列的类型, 所以在 create 语句中并不要求给出列的类型。
(2) 创建索引 为了加快表的查询速度,往往在主键上添加索引。
如下所示的是在 name 列上添加索引的过程。
sqlite create index test_index on test_tablename(3) 操作数据 如下所示的是在 test_table 中进行数据的插入、更新、删除操作:sqlite insert into test_table values xiaoming male 20sqlite insert into test_table values xiaohong female 18sqlite select from test_tablexiaomingmale20xiaohongfemale18sqlite update test_table set age19 where name xiaohongsqlite select from test_tablexiaomingmale20xiaohongfemale19sqlite delete from test_table where name xiaomingsqlite select from test_tablexiaohongfemale19(4) 批量操作数据库 如下所示的是在 test_table 中连续插入两条记录:sqlite beginsqlite insert into test_table values xiaoxue female 18sqlite insert into test_table values xiaoliu male 20sqlite commitsqlite select from test_tablexiaohongfemale19xiaoxuemale18xiaoliumale20运行命令 commit 后,才会把插入的数据写入数据库中。
(5) 数据库的导入导出 如下所示的是把 test.db 导出到 sql 文件中:rootlocalhost home sqlite3 test.db .dump test.sqltest.sql 文件的内容如下所示:BEGIN TRANSACTIONCREATE TABLE test_tablename sex ageINSERT INTO test_table VALUESxiaohongfemale19CREATE INDEX test_index on test_tablenameCOMMIT 如下所示的是导入 test.sql 文件(导入前删除原有的 test.db) :rootlocalhost home sqlite3 test.db test.sql通过对 test.sql 文件的导入导出,可以实现数据库文件的备份。
11.2.2 SQLite3 的 C 接口 以上介绍的是 SQLite3 数据库的命令操作方式。
在实际使用中,一般都是应用程序需要对数据库进行访问。
为此,SQLite3 提供了各种编程语言的使用接口 (本书介绍 C 语言接口)。
SQLite3 具有几十个 C 接口,下面介绍一些常用的 C 接口。
sqlite_open 作用:打开 SQLite3 数据库 原型:int sqlite3_openconst char dbname sqlite3 db 参数: dbname:数据库的名称; db:数据库的句柄; 返回值:返回值的具体含义如表 11-1 所示: 表 11-1 返回值 标识符 含义 0 SQLITE_OK 操作成功 1 SQLITE_ERROR 操作失败 2 SQLITE_INTERNAL 内部逻辑错误 3 SQLITE_PERM 访问权限错误 4 SQLITE_ABORT 操作异常 5 SQLITE_BUSY 数据库被锁定 6 SQLITE_LOCKED 表被锁定 7 SQLITE_NOMEM 内存申请失败 8 SQLITE_READONLY 写只读数据库 9 SQLITE_INTERRUPT 内部中断 10 SQLITE_IOERR I/O 错误 11 SQLITE_CORRUPT 数据库镜像格式错误 12 SQLITE_NOTFOUND 找不到文件或数据 13 SQLITE_FULL 数据库已满 14 SQLITE_CANTOPEN 无法打开数据库文件 15 SQLITE_PROTOCOL 锁协议出错 16 SQLITE_EMPTY 表为空 17 SQLITE_SCHEMA 数据库体系发生改变 18 SQLITE_TOOBIG 记录数据溢出 19 SQLITE_CONSTRAINT 违反约束产生异常 20 SQLITE_MISMATCH 数据类型不匹配 21 SQLITE_MISUSE 数据库使用不正确 22 SQLITE_NOLFS 系统不支持 23 SQLITE_AUTH 未获授权 100 SQLITE_ROW sqlite_step 101 SQLITE_DONE sqlite_step结束运行 sqlite_colse 作用:关闭 SQLite3 数据库 原型:int sqlite_closesqlite3 db例如: test.c: include include static sqlite3 dbNULL int main int rc rc sqlite3_opentest.db db ifrc printfcant open databasen else printfopen database successn sqlite3_closedb return 0 运行命令“gcc –o test test.c –lsqlite3”进行编译,运行 test 的结果如下所示:rootlocalhost home open database success sqlite_exec 作用:执行 SQL 语句 原型:int sqlite3_execsqlite3 db const char sql int callbackvoidintcharchar void char errmsg 参数: db:数据库; sql:SQL 语句; callback:回滚; errmsg:错误信息例如: test.c: include include static sqlite3 dbNULL static char errmsgNULL int main int rc rc sqlite3_opentest.db db rc sqlite3_execdbinsert into test_table valuesdaobao male 24 0 0 errmsg ifrc printfexec failn else printfexec successn sqlite3_closedb return 0 编译完成后,运行 test 的结果如下所示:rootlocalhost home ./testexec successrootlocalhost home sqlite3 test.dbSQLite version 3.6.11Enter .help for instructionsEnter SQL statements terminated with a sqlite select from test_tabledaobaomale24 sqlite3_get_table 作用:执行 SQL 查询 原型:int sqlite3_get_tablesqlite3 db const char zSql char pazResult int pnRow int pnColumn char pzErrmsg 参数: db:数据库; zSql:SQL 语句; pazResult:查询结果集; pnRow:结果集的行数; pnColumn:结果集的列数; errmsg:错误信息; sqlite3_free_table 作用:注销结果集 原型:void sqlite3_free_tablechar result 参数: result:结果集;例如: test.c: include include static sqlite3 dbNULL static char ResultNULL static char errmsgNULL int main int rc i j int nrow int ncolumn rc sqlite3_opentest.db db rc sqlite3_get_tabledb select from test_table Result nrow ncolumn errmsg ifrc printfquery failn else printfquery successn fori 1 i
上一篇:
.NET_面试题与答案
下一篇:
成长路上,依然坎坷