没有合适的资源?快使用搜索试试~ 我知道了~
SQLite入门.doc
5星 · 超过95%的资源 需积分: 10 16 下载量 71 浏览量
2011-09-25
22:56:43
上传
评论
收藏 656KB DOC 举报
温馨提示
试读
39页
SQLite入门 SQLite入门 SQLite入门 SQLite入门 SQLite入门
资源详情
资源评论
资源推荐
SQLite 入门与分析
、 介绍
自几十年前出现的商业应用程序以来,数据库就成为软件应用程序的主要组成部分。正与数据库管理系统非常关键一样,它们也
变得非常庞大,并占用了相当多的系统资源,增加了管理的复杂性。随着软件应用程序逐渐模块模块化,一种新型数据库会比大型复
杂的传统数据库管理系统更适应。嵌入式数据库直接在应用程序进程中运行,提供了零配置( )运行模式,并
且资源占用非常少。
是一个开源的嵌入式关系数据库,它在 年由 发布,它的减少应用程序管理数据的开销,
可移植性好,很容易使用,很小,高效而且可靠。
嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。从外部看,它并不像一个 ,
但在进程内部,它却是完整的,自包含的数据库引擎。
嵌入式数据库的一大好处就是在你的程序内部不需要网络配置,也不需要管理。因为客户端和服务器在同一进程空间运行 。
的数据库权限只依赖于文件系统,没有用户帐户的概念。有数据库级锁定,没有网络服务器。它需要的内存,其它
开销很小,适合用于嵌入式设备。你需要做的仅仅是把它正确的编译到你的程序。源码网整理, !"
、架构"
采用了模块的设计,它由三个子系统,包括 # 个独立的模块构成。
$
$
、接口%&"
接口由 '()% 组成,也就是说不管是程序、脚本语言还是库文件,最终都是通过它与 交互的我们通常用得较多
的 *'+,' 最后也会转化为相应 '()% 的调用"。
、编译器'!-"
在编译器中,分词器(./)和分析器)0"对 进行语法检查,然后把它转化为底层能更方便处理的分层的数据
结构语法树,然后把语法树传给代码生成器"进行处理。而代码生成器根据它生成一种针对 的汇编代码,
最后由虚拟机1-"执行。
2、虚拟机1-"
架构中最核心的部分是虚拟机,或者叫做虚拟数据库引擎 1- 03413"。它和 ,5 虚拟机相似,解释执
行字节代码。13 的字节代码由 # 个操作码0"构成,它们主要集中在数据库操作。它的每一条指令都用来完成特定的
数据库操作比如打开一个表的游标"或者为这些操作栈空间的准备比如压入参数"。总之,所有的这些指令都是为了满足 命令的
要求关于 1,后面会做详细介绍"。
6、后端/3"
后端由 树",页缓存,"和操作系统接口即系统调用"构成。 和 共同对数据进
行管理。 的主要功能就是索引,它维护着各个页面之间的复杂的关系,便于快速找到所需数据。而 的主要作用就是通
过 * 接口在 和 0/ 之间传递页面。
2、 的特点7080)-09"
2、零配置:'"
2、可移植) -9":
它是运行在 ;04<44*= 和一些商用 >< 系统,比如 的 -04% 的 (%=,同样,它也可以工作在
许多嵌入式操作系统下,比如 ?=41<;/04)-!*49! 和 ;0'3。
22、'!00:
是被设计成轻量级,自包含的。 -4- 9497--4<- 0
05@
26、简单!-9"
2A、灵活8-< -9"
2B、可靠- -9":
的核心大约有 2 万行标准 ' 代码,这些代码都是模块化的,很容易阅读。
设计与概念
、()%
由两部分组成C核心 ()%()%"和扩展 ()%(<0()%)
核心 ()% 的函数实现基本的数据库操作:连接数据库,处理 ,遍历结果集。它也包括一些实用函数,比如字符串转换,操
作控制,调试和错误处理。
扩展 ()% 通过创建你自定义的 函数去扩展 。
、102 的一些新特点:
" 的 ()% 全部重新设计,由第二版的 A 个函数增加到 ## 个函数。这些函数包括支持 >.8# 和 >.8B 编码的功能函
数。
"改进并发性能。加锁子系统引进一种锁升级模型-/0-!-",解决了第二版的写进程饿死的问题该问题是任
何一个 必须面对的问题"。这种模型保证写进程按照先来先服务的算法得到排斥锁3<-05/"。甚至,写进程通过把结
果写入临时缓冲区.!9D",可以在得到排斥锁之前就能开始工作。这对于写要求较高的应用,性能可提高 6E(引
自参考文献)。
2"改进的 树。对于表采用 F树,大大提高查询效率。
$$$$6"2 最重要的改变是它的存储模型。由第二版只支持文本模型,扩展到支持 A 种本地数据类型。
总之,102 与 1 有很大的不同,在灵活性,特点和性能方面有很大的改进。
、主要的数据结构.)-0"
由很多部分组成-04/45-! 等等。但是从程序员的角度,最需要知道的是C4
0!04 和 。它们之间的关系如下:
$
$
上图告诉我们在编程需要知道的三个主要方面:()%4事务.0"和锁/0"。从技术上来说, 和 不是
()% 的一部分。但是它们却在事务和锁上起着关键作用(稍后将讨论)。
2、'0 和 !0
' 和 0! 是执行 命令涉及的两个主要数据结构,几乎所有通过 ()% 进行的操作都要用到它们。一个连接
'"代表在一个独立的事务环境下的一个连接 (000- 00
--00-0<"。每一个 0! 都和一个 关联,它通常表示一个编译过的 语句,在
内部,它以 13 字节码表示。! 包括执行一个命令所需要一切,包括保存 13 程序执行状态所需的资源,指向硬盘记
录的 树游标,以及参数等等。
6、 和
一个 可以有多个 0 对象一个主要的数据库以及附加的数据库,每一个数据库对象有一个 对象,
一个 有一个 对象这里的对象不是面向对象的“对象”,只是为了说清楚问题"。
! 最终都是通过 的 和 从数据库读或者写数据,通过 的游标0"遍历存储在页
面"中的记录。游标在访问页面之前要把数所从 0/ 加载到内存,而这就是 的任务。任何时候,如果 需要页面,
它都会请求 从 0/ 读取数据,然后把页面"加载到页面缓冲区",之后, 和与之关联的游标就可以
访问位于 中的记录了。
如果 0 改变了 ,为了防止事务回滚, 必须采取特殊的方式保存原来的 。总的来说, 负责读写数
据库,管理内存缓存和页面(),以及管理事务,锁和崩溃恢复这些在事务一节会详细介绍"。
总之,关于 和 0,你必须知道两件事:
"对数据库的任何操作,一个连接存在于一个事务下。
"一个连接决不会同时存在多个事务下。
509 04-900<-9
04!4-00
A、核心 ()%
核心 ()%主要与执行 命令有关,本质上有两种方法执行 语句:@9和 @9。)
@9 由三个阶段构成:,< 和 -。其实 @9 只是对 @9 的三个过程包
装而已,最终也会转化为 @9 的执行。
A、连接的生命周期.'&9-"
和大多数据库连接相同,由三个过程构成:
()连接数据库' 0":
每一个 数据库都存储在单独的操作系统文件中,连接,打开数据库的 '()% 为:0@-2G",它的实现位于
! 文件中,如下:
0@-2G0H8-!40@-2HH "
I
08-!4 4%.3G*)3?G3(;%.3J
%.3G*)3?G'3(.34"K
L
当连接一个在磁盘上的数据库,如果数据库文件存在, 打开一个文件;如果不存在, 会假定你想创建一个新的数
据库。在这种情况下, 不会立即在磁盘上创建一个文件,只有当你向数据库写入数据时才会创建文件,比如:创建表、视图
或者其它数据库对象。如果你打开一个数据,不做任何事,然后关闭它, 会创建一个文件,只是一个空文件而已。
另外一个不立即创建一个新文件的原因是,一些数据库的参数,比如:编码,页面大小等,只在在数据库创建前设置。默认情况
下,页面大小为 6 字节,但是你可以选择 A2MB# 字节之间为 幂数的数字。有些时候,较大的页面能更有效的处理大量的
数据。
()执行事务)&!00":
--!!0<00。默认情况下,事务自动提交,也就是每一个 语句都在一个独立的事
务下运行。当然也可以通过使用 3N%?'*%. 手动提交事务。
(2)断开连接0&! 0":
主要是关闭数据库的文件。
A、执行 )9
前面提到,预处理查询)9"是 执行所有 命令的方式,包括以下三个过程:
")9:
分析器(0),分词器/"和代码生成器"把 ! 编译成 13 字节码,编译器会
创建一个 0! 句柄0@-2G0!",它包括字节码以及其它执行命令和遍历结果集的所有资源。
相应的 '()% 为 0@-2G",位于 文件中,如下:
$
0@-2G
0@-2H 4
0H@-4
904
0@-2G0!HH!4
0HH.-
"I
K
O0@-2/() 4@-49044!4.-"K
00OO%.3G*PJJ!OOJJH!OO"K
K
L
"3<:
虚拟机执行字节码,执行过程是一个步进00"的过程,每一步0"由 0@-2G0"启动,并由 13 执行一段字节
码。由 0@-2G 编译字节代码,并由 0@-2G0"启动虚拟机执行。在遍历结果集的过程中,它返回 %.3G*;,当
到达结果末尾时,返回 %.3G*?3。
2"8-:
13 关闭 0!,释放资源。相应的 '()% 为 0@-2G-"。
通过下图可以更容易理解该过程:
$
$
最后以一个具体的例子结束本节,下节讨论事务。
Q-
Q-
Q-R0@-2R
Q-
!4HH5"
I
44-0K
0@-2H K
0@-2G0!H0!K
H0@-K
0H-K
++打开数据
O0@-2GR&0 R4S "K
&"I
&&04R'T 0CE0R40@-2G!0 ""K
0@-2G-0 "K
<"K
L
0@-OR0-H&!00RK
++预处理
O0@-2G 40@-4"0-0@-"4S0!4S-"K
&UO%.3G*P"I
&&04RCE0R40@-2G!0 ""K
L
O0@-2G00!"K
-0O0@-2G-!G0!"K
-OO%.3G*;"I
剩余38页未读,继续阅读
xjtdream
- 粉丝: 3
- 资源: 22
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C语言基础-C语言编程基础之Leetcode编程题解之第30题串联所有单词的子串.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第29题两数相除.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第28题找出字符串中第一个匹配项的下标.zip
- 实验报告模板(1).docx
- C语言基础-C语言编程基础之Leetcode编程题解之第26题删除有序数组中的重复项.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第25题K个一组翻转链表.zip
- hnu计算机系统作业-计算机系统基础课程大作业.zip
- 树莓派app.apk
- C++的基于同态加密技术的匿名电子投票系统源码.zip
- SW建模格式图.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论3