SQLite(轻量级最佳数据库) 原理分析和开发应用

上传人:枫** 文档编号:433170857 上传时间:2022-12-01 格式:DOCX 页数:10 大小:122.05KB
返回 下载 相关 举报
SQLite(轻量级最佳数据库) 原理分析和开发应用_第1页
第1页 / 共10页
SQLite(轻量级最佳数据库) 原理分析和开发应用_第2页
第2页 / 共10页
SQLite(轻量级最佳数据库) 原理分析和开发应用_第3页
第3页 / 共10页
SQLite(轻量级最佳数据库) 原理分析和开发应用_第4页
第4页 / 共10页
SQLite(轻量级最佳数据库) 原理分析和开发应用_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《SQLite(轻量级最佳数据库) 原理分析和开发应用》由会员分享,可在线阅读,更多相关《SQLite(轻量级最佳数据库) 原理分析和开发应用(10页珍藏版)》请在金锄头文库上搜索。

1、SQLite(轻量级最佳数据库)原理分析和开发应用概述SQLite 介绍 自几十年前出现的商业应用程序以来,数据库就成为软件应用程序的主要组成部分。正与数 据库管理系统非常关键一样,它们也变得非常庞大,并占用了相当多的系统资源,增加了管 理的复杂性。随着软件应用程序逐渐模块模块化,一种新型数据库会比大型复杂的传统数据 库管理系统更适应。嵌入式数据库直接在应用程序进程中运行,提供了零配置(Zer o-c onf igu ratio n)运行模式,并且资源占用非常少。SQLite是一个开源的嵌入式关系数据库,它在2000年由D. Richard Hipp发布,它的 减少应用程序管理数据的开销,SQ

2、Lite可移植性好,很容易使用,很小,高效而且可靠。 SQLite嵌入到使用它的应用程序中,它们共用相同的进程空间,而不是单独的一个进程。 从外部看,它并不像一个RDBMS,但在进程内部,它却是完整的,自包含的数据库引擎。 嵌入式数据库的一大好处就是在你的程序内部不需要网络配置,也不需要管理。因为客户端 和服务器在同一进程空间运行。 SQLite 的数据库权限只依赖于文件系统,没有用户帐户的 概念。 SQLite 有数据库级锁定,没有网络服务器。它需要的内存,其它开销很小,适合用 于嵌入式设备。你需要做的仅仅是把它正确的编译到你的程序。架构(architecture)SQLite采用了模块的设

3、计,它由三个子系统,包括8个独立的模块构成。VDatabaseBrTreeOS HertasBackendInleilaEgCompilerToEnizerParserCodfl GerwratcrWrtuaf Maciilne接口(Inteface)接口由 SQLite C API 组成,也就是说不管是程序、脚本语言还是库文件,最终都是通过 它与SQLite交互的(我们通常用得较多的ODBC/JDBC最后也会转化为相应C API的调 用)。编译器(Compiler)在编译器中,分词器(Tokenizer)和分析器(Parser)对SQL进行语法检查,然后把它转 化为底层能更方便处理的分层的数

4、据结构-语法树,然后把语法树传给代码生成器(code generator)进行处理。而代码生成器根据它生成一种针对SQLite的汇编代码,最后由虚 拟机(Virtual Machine)执行。虚拟机(Virtual Machine)架构中最核心的部分是虚拟机,或者叫做虚拟数据库引擎JVirtual Database Engine,VD BE)。它和Java虚拟机相似,解释执行字节代码。VDBE的字节代码由128个操作码(op codes)构成,它们主要集中在数据库操作。它的每一条指令都用来完成特定的数据库操作 (比如打开一个表的游标)或者为这些操作栈空间的准备(比如压入参数)。总之,所有的这些

5、 指令都是为了满足SQL命令的要求(关于VM,后面会做详细介绍)。后端(Back-End)后端由B-树(B-tree),页缓存(page cache,pager)和操作系统接口(即系统调用)构成。B-tree 和 page cache 共同对数据进行管理。 B-tree 的主要功能就是索引,它维护着各 个页面之间的复杂的关系,便于快速找到所需数据。而pager的主要作用就是通过OS接 口在 B-tree 和 Disk 之间传递页面。SQLite 的特点(SQLites Features and Philosophy)零配置(Ze ro Con figu rati on)可移植(P or tab

6、ility):它是运行在Windows丄inux,BSD,Mac OS X和一些商用Unix系统,比如Sun的Sola ris,IBM的AIX,同样,它也可以工作在许多嵌入式操作系统下,比如QNX,VxWorks,Pa lm OS, Symbin 和 Windows CE。Compactness:SQLite 是被设计成轻量级,自包含的。 one header file, one library, and youre relational, no external database server required简单(Simplicity)灵活(Flexibility)可靠(Reliabili

7、ty):SQLite的核心大约有3万行标准C代码,这些代码都是模块化的,很容易阅读。事务(Transaction)事务的周期(Transaction Lifecycles)程序与事务之间有两件事值得注意:A、哪些对象在事务下运行一一这直接与API有关。B、事务的生命周期,即什么时候开始,什么时候结束以及它在什么时候开始影响别的连接 (这点对于并发性很重要)一一这涉及到SQLite的具体实现。一个连接(connection)可以包含多个(statement),而且每个连接有一个与数据库关联 的B-tree和一个pager。Pager在连接中起着很重要的作用,因为它管理事务、锁、内存 缓存以及负责

8、崩溃恢复(crash recovery)。当你进行数据库写操作时,记住最重要的一件 事:在任何时候,只在一个事务下执行一个连接。这些回答了第一个问题。一般来说,一个事务的生命和stateme nt差不多,你也可以手动结束它。默认情况下,事 务自动提交,当然你也可以通过BEGIN.COMMIT手动提交。接下来就是锁的问题。Commit?BEGINBEG HUMMED!ATfiEGIN EXCLUSIVERESEftVtOPENDINGEXCLUSIVERnad/CTieGkPfNDlHGSHAPEDJ CammHPENDINGUHLOCKEDRollback.关于这个图有以下几点值得注意:A、一

9、个事务可以在UNLOCKED, RESERVED或EXCLUSIVE三种状态下开始。默认情 况下在UNLOCKED时开始。B、白色框中的UNLOCKED, PENDING, SHARED和RESERVED可以在一个数据库的 同一时存在。C、从灰色的PENDING开始,事情就变得严格起来,意味着事务想得到排斥锁(EXCLUSI VE)(注意与白色框中的区别)。虽然锁有这么多状态,但是从体质上来说,只有两种情况:读事务和写事务。读者可以从 http:/www.sqlite.org/下载 SQLite 3.3.4 的版本 Cmd进入命令行创建数据库文件:SQLite3 d:test.db 回车就生成

10、了一个test.db在d盘。这样同时也SQLite3挂上了这个test.db用.help可以看看有什么命令.help 回车即可看看有创建了多少表.tables看表结构.schema 表名看看目前挂的数据库.database如果要把查询输出到文件.output 文件名 查询语句;把查询结果用屏幕输出.output stdout把表结构输出,同时索引也会输出 .dump 表名 退出.exit 或者.quit从 http:/sqlite phxsoftware com/下载 Ado net 驱动。下载了安装,在安装目录中存在System.Data.SQLite.dll我们只需要拷贝这个文件到引用目录

11、,并添加引用即可对SQLite数据库操作了 所有的A对象都是以SQLite开头的,比如SQLiteConnection 连接串只需要如下方式Data Source=d:test.db 或者 DataSource=test.db-应用在和应用程序或者.net 能够自动找到的目录剩下的就很简单了SQL语法由于以前用SQLServer或者ISeries,所以DDL的语法很汗颜创建一个单个Primary Key的tableCREATE TABLE Admin (UserName nvarchar (20) PRIMARY KEY NOT NULL , Password nvarchar (50) NO

12、T NULL ,Rank smallint NOT NULL ,MailServer nvarchar (50) NOT NULL ,MailUser nvarchar (50) NOT NULL ,MailPassword nvarchar (50) NOT NULL ,Mail nvarchar (50) NOT NULL);创建一个多个Primary Key的tableCREATE TABLE CodeDetail ( CdType nvarchar (10) NOT NULL , CdCode nvarchar (20) NOT NULL , CdString1 ntext NOT N

13、ULL , CdString2 ntext NOT NULL , CdString3 ntext NOT NULL,PRIMARY KEY (CdType,CdCode);创建索引CREATE INDEX IX_Account ON Account(IsCheck, UserName); 还可以视图等等。SQLite 分页查询写法 1:SELECT * FROM TABLE1 LIMIT 20 OFFSET 20 ; 写法 2:SELECT * FROM TABLE1 LIMIT 20 , 20;SQLite 文件的压缩 在多次删除数据、插入数据、更新数据后,数据库体积增大,但实际有效数据量很

14、小,则需 要对数据库进行压缩、整理,把已经删除的数据从物理文件中移除。调用一下SQL命令即 可:VACUUMVACUUM 的实现创il I善|时数据吟vacuum db开始个爭务崔vacuum db中碰強强数ft;库的所有鞍.索引和视 图*并将側祐口中的所有表*索引和视图的数据樹入 SJvacuunrjdb* 即在aciiiin_曲建立main的镜象将vacunim前数据库对应的数据文件的数据拷 処到nun薮据库对应的数据文件.一个塡血一个 贾血的拷処提交咄务数据插入与更新使用REPLACE替代INSERT、UPDATE命令。在无满足条件记录,则执行Insert,有满 足条件记录,则执行UPD

15、ATE。REPLACE INTO TABLE1(col1, col2, col3) VALUES(val1, val2,val3);Insert or Replace Into 和 Replace Into 的效果是一样的上面这句话也可以这样写Insert or Replace INTO TABLE1(col1, col2, col3) VALUES(val1, val2,val 3);字符编码转换sqlite3 的源码中,提供了 utf8ToUnicode()、 unicodeToUtf8()、 mbcsToUnicode()、 unicodeToMbcs()、 sqlite3_win32_mbcs_to_utf8 ()、 utf8ToMbcs ()等 8个函数进行字符在不同编码间的转换,但未在sqlite3.def、sqlite3.h文件中列出,即未对外公开。 这些函数中,都使用了 MultiByteToWideChar()、WideCharToMul

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 机械/制造/汽车 > 电气技术

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号