全部博文(465)
分类: SQLite/嵌入式数据库
2012-10-31 16:07:47
SQLite权威指南(第二版)
[美]Grant Allen(格兰特·艾伦),Mike Owens(迈克·欧文斯) 著
杨谦,刘义宣,谢志强 译
ISBN 978-7-121-14924-5
2012 年1 月出版
定 价:69.00 元
16开
404页
内 容 简 介
这是一本关于SQLite 起源、特性、简介、使用、深度解析的书。
全书首先从 SQLite 最初起源、特性、设计理念、实际应用讲解开始,逐步深入、全面地介绍了在各个平台如何使用SQLite。接着,介绍SQLite 的一般SQL 和高级功能的SQL,采取举例说明,使得本书内容生动有趣。然后,全面介绍了各种语言如何与SQLite 进行编程交互,重点介绍SQLite 原生语言C 语言中的API,使得使用者可以不管扩展SQLite 的功能。本书还介绍了目前火热的IOS 和Android 开发中如何使用SQLite,并给出实际例子。最后,介绍了SQLite 内部架构设计,使得读者可以深入理解SQLite,高级开发者可以进一步参与SQLite 开发或者开发自己的SQLite。
不管您是 SQLite 的初学者,还是SQLite 资深用户或者是对SQL 语言和程序设计感兴趣的技术爱好者,都可以从本书汲取营养。
译者序
您用过FireFox(火狐)浏览器吗?您用过金山词霸、iPhone、iPad或Android系统吗?如果答案是Yes,说明您已经是SQLite用户或者从SQLite中受益了。SQLite作为一款嵌入式关系数据库,应用十分广泛,已经被大量应用在许多基础的软件中,并成为这些基础软件的组成部分。例如,您手中的iPhone或Android手机,您电脑上的浏览器或者其他软件,您访问的用PHP编写的网站等。
虽然SQLite被越来越广泛地应用,但是一直缺乏一本全面、深入浅出地介绍SQLite的书,本书就是这样一本从零开始不断深入探究SQLite的书。
本书特色鲜明,它不仅为开发人员提供了全新的数据库选择,并且全面介绍了如何应用这种选择。全书第1、2章全面细致且重点突出地介绍了SQLite的起源和特点,并与主流大型关系数据库进行比较,这可作为数据库选型的重要参考。本书也是嵌入式关系数据库研究人员的知音,因为它介绍了嵌入式数据库中最典型的代表SQLite,并对SQLite内核做了简要介绍。最重要的是,本书是SQLite相关开发者的重要帮手。从第3章开始,全面介绍SQLite中的SQL、高级SQL、核心API和扩展API以及各种语言扩展、iPhone和Android开发中如何应用SQLite等。内容翔实,实例丰富,理论与实践并举。
译者在翻译本书时,一边是感到万分的荣幸,一边也是战战兢兢。吉尔伯特·海特(美国教育家)曾经说过:写了一本很糟糕的书只是犯错而已,而把一本好书翻译得很糟糕则是犯罪。但是对于本书这样最佳的SQLite理论与实践之作,即便是冒着犯罪的风险,也值得翻译出来并推荐给大家。
本书承载的内容丰富而深入。在翻译的过程中,译者也常感汗颜,原来自诩对SQLite颇为了解的我深刻感受到自己知识面的浅薄和不完整,于是翻译过程也成为了自己检讨和学习的过程,收获颇丰。本书的作者是SQLite方面的知名研究者与实践者,其中一位是PySQLite的创建者。他们有着丰富的IT从业经验,书中的很多内容都是他们长年实践的经验和心得。因此,希望大家反复阅读,必定受益无穷。
由于本书作者的知识广博,经验丰富,而译者本人知识有限、时间仓促,难免对作品的个别之处无法原汁原味地呈现给读者,在此敬请各位读者多多包涵,不辞吝教,指出纰漏。我也希望能就本书的内容与读者有更多的交流,我的邮箱是yqbjtu@live.com。
最后,我要感谢电子工业出版社博文视点公司的张春雨编辑在译书的过程中给予我们的莫大帮助。我还要感谢我的朋友雷昕、李晓亮、杨艳、刘争涛、吴林、杨建轩、尹相乐、季旻、房华、张晓光和东莞经济贸易学校的谢志强老师等。特别感谢技术总监、Itpub Oracle数据库管理版版主张乐奕(网名kamus),SQLite中文站()站长林轩,原Oracle亚洲研发中心高级DBA,现玛氏信息技术服务有限公司亚太区数据库运营经理叶熙昌,他们的参与使得本书的质量得到了进一步的保证。
杨 谦
2011年8月于北京志新村
推荐序1
SQLite——一个被广泛使用的嵌入式关系数据库,在短短的几年时间里飞速发展。大家对SQLite已经不再陌生,越来越多的人开始学习它、使用它,并且爱上它。记得2005年第一次在项目中使用SQLite时,它还仅仅是一个新兴的开源项目,那一年它获得了Google和O’REILLY的年度开源大奖。虽然那时的SQLite功能还不是很完备,稳定性上也还有些许瑕疵,但是它小巧的身姿、极高的运行效率以及广泛的平台支持,还是深深地吸引了我。之后我便一发而不可收拾,在许多开发的软件项目中都自然而然地用到了它。当然,事实证明我的选择是正确的,如今无数的软件巨头如Google、Apple、Adobe、Mozilla等也都在自己的产品中开始使用SQLite,并且积极地为SQLite开发社区提供技术和资金等方面的支持,从而确保了社区能够拥有持续的活力。我相信,随着以SQLite作为底层存储引擎的Android操作系统的日益流行和其他移动领域开发的增多,今后会有更多的开发人员投入到SQLite的相关开发中来。
然而,一直以来困扰所有开发者的是,缺乏一本深入讲解SQLite的书籍,无论是入门者还是希望更深入了解的人,只能寄托于在网上搜索相关资料,这样无疑会增加学习的成本。为此,我建立了SQLite中文社区,希望能让所有的开发人员更方便地找到所需资料。本书作为SQLite经典著作的第二版,其第一版发表于2006年,书中详细而精辟地讲述了有关SQLite的开发技术,内容可谓深入到各个方面。在新版中,作者特意加入了SQLite在iOS和Android系统中的开发内容,从而为Mobile领域的开发人员学习SQLite提供了帮助。今天,在很多人的辛勤付出之下,本书的中文版终于能够与读者见面,这对于国内的SQLite开发者无疑是一件非常值得庆祝的事。
作为一名普通的SQLite爱好者,能够参加中文版的审阅工作,使我有幸在第一时间看到了本书的中文版。在此,我对译者的翻译功底深表钦佩,其深厚的技术功底跨越了语言障碍,完整而准确地将原书的内容表达无遗。此外,中文版的排版行文风格也与原书做到了高度的统一。因此,在阅读之后,我非常高兴地向大家推荐这本书,希望它能够帮助大家跨入SQLite的世界,领略它轻巧而灵动的美。
SQLite中文社区站长 林轩
推荐序2
“您可能是一名资深的SQLite用户或者开发人员,也可能阅读这本书是您第一次走进SQLite世界。不论您是何种背景,每天都在不知不觉中使用着 SQLite。因为SQLite是一款被广泛应用于移动设备的数据库,从iPhone、iPods到最新的平板电脑、iPad、媒体播放器等。”
这是本书第9章的开篇语,正如您看到的,在智能移动设备被炒得火热并且确实在领导今后科技发展潮流的今天,哪怕本书仅仅只有第9、10章,对于立志于在移动开发领域有所涉猎的您来说,这本书都是值得购买的。
Itpub Oracle数据库管理版与Oracle高可用版版主,
技术总监 张乐奕
推荐序3
其实不用我多说,大家也知道现在移动开发有多火。君不见大街小巷,男男女女,老老少少手上都有一部iPhone、iPad或Android手机,这些移动设备已经如潮水般地涌入我们的日常生活。iOS和Android作为一种移动设备操作系统,自然也有对应的数据库管理数据,而这个数据库就是本书介绍的SQLite。 SQLite作为一种便携式轻量级数据库,非常适合移动开发,有志于从事这个行业的人都应该了解如何使用SQLite开发出健壮的移动应用程序。另外,SQLite是完全开源的数据库,那些对数据库底层引擎有兴趣的朋友们,相信读完此书会有获益匪浅的感受。
Oracle 10g OCM,玛氏信息技术服务有限公司亚太区数据库运营经理 叶熙昌
关于作者
Grant Allen具备20多年的IT工作经验,做过软件开发公司的首席技术官(CTO)和Google的数据架构师。他的工作横跨多个行业,有政府部门和学术部门,大型系统设计、开发、性能、创新以及破坏性改变的咨询。Grant也是学术会议和行业会议的常客,他经常做一些关于数据挖掘、协作技术、关系数据库以及技术业务的报告。Grant在高新技术公司领导破坏性创新理论项目的业余时间取得了他的博士学位。
Mike Owens是德克萨斯州沃斯堡一家大型房地产公司的IT主管,他负责开发和管理公司的核心系统。之前他在橡树岭国家实验室(该实验室是美国能源部所属的一个大型国家实验室)担任流程设计工程师,在Nova信息系统公司当过C++程序员。他是PySQLite的最初创建者,PySQLite是SQLite的Python扩展。Mike毕业于田纳西大学诺克斯维尔分校,获得化学工程学士学位。
Mike喜欢慢跑、弹吉他、滑雪,以及与同伴们一起在德克萨斯州狭长的地带上打猎。他与妻子、两个女儿以及两只小猎狗在德克萨斯州沃斯堡生活。
简 介
《SQLite权威指南》全面介绍了SQLite和SQLite相关的知识,以及多种情况下使用SQLite的经验。不管您是坚定的C开发者、移动设备爱好者,还是想知道最好的嵌入式小型数据库引擎是如何开发的,本书都适合您。
先决条件
本书假设您之前没有SQLite知识,但是不管哪种水平的人都能从中受益。SQLite是用C语言编写的,带有扩展的C API,也支持很多其他语言,例如Python、Tcl、Ruby和Java。作为数据库引擎,它也使用SQL。虽然本书的例子可以使具有各种水平的读者受益,但是限于篇幅,不在这里教授这些语言。
本书组织结构
本书由11章组成,主要包含以下内容:
SQLite介绍、获取和安装。
使用SQLite中的SQL。
SQLite中的C API。
其他语言例如Python、Tcl、Ruby和Java中如何使用SQLite。
移动设备开发中如何使用SQLite。
SQLite内核与新特性。
您可以随便跳到自己喜欢的章节,但是第5~7章都是与C API相关的,最好按顺序阅读。
如何获取示例的源代码
本书示例中的所有源代码都可从Apress网站( 1430232250)中下载。在“Book Resources”框中单击“Source Code”链接即可。
目 录
译者序 IV
推荐序1 VI
推荐序2 VIII
推荐序3 IX
关于作者 XX
关于技术评审 XXI
致谢 XXII
简介 XXIII
第1章 SQLite介绍 1
嵌入式数据库 1
开发者的数据库 2
管理员的数据库 4
SQLite历史 4
谁在使用SQLite 5
体系结构 6
接口 6
编译器 7
虚拟机 7
后端 9
工具和测试代码 9
SQLite的特性和设计理念 10
零配置 10
移植性 10
紧凑性 11
简单性 11
灵活性 12
自由授权 12
可靠性 12
易用性 12
性能和限制 13
本书面向的读者 16
本书的组织结构 17
附加说明 18
总结 19
第2章 入门 21
何处获取SQLite 21
Windows上的SQLite 22
获得命令行程序 22
获取SQLite动态链接库(DLL) 25
在Windows上编译SQLite源代码 26
使用微软Visual C++构建SQLite DLL 29
用Visual C++构建动态链接SQLite的客户端 31
用MinGW构建SQLite 32
Linux、苹果Mac OS X以及其他POSIX系统上的SQLite 34
二进制和包 34
从源代码编译 35
命令行程序 37
Shell模式下的CLP 37
命令行模式的CLP 39
数据库管理 40
创建数据库 40
获得数据库的Schema信息 42
导出数据 43
导入数据 44
格式化 45
导出带分隔符的数据 46
执行无人值守维护 46
备份数据库 47
获得数据库文件的信息 48
其他SQLite工具 50
总结 51
第3章 SQLite中的SQL 53
数据库示例 53
安装 55
运行示例 55
语法 56
命令 58
常量 58
关键字和标识符 59
注释 59
创建数据库 59
创建表 60
修改表 61
数据库查询 62
关系操作 62
select命令与操作管道 63
过滤 66
限定和排序 71
函数(Function)和聚合(Aggregate) 73
分组(Grouping) 74
去掉重复 79
多表连接 80
名称和别名 85
子查询 87
复合查询 89
条件结果 91
处理SQLite中的Null 93
总结 95
第4章 SQLite中的高级SQL 97
修改数据 97
插入记录 97
更新记录 101
删除记录 102
数据完整性 102
实体完整性 103
域完整性 108
存储类 113
视图 116
索引 118
触发器 120
事务 124
事务的范围 124
冲突解决 125
数据库锁 128
死锁 129
事务的类型 130
数据库管理 131
附加数据库 131
数据库清理 133
数据库配置 133
系统目录 137
查看查询计划 137
总结 138
第5章 SQLite设计与概念 139
API 140
主要数据结构 140
连接和语句 141
核心API 142
可操作的控制 150
使用线程 151
扩展API 151
创建用户自定义函数 151
创建用户自定义聚合 152
创建用户自定义排序 153
事务 153
事务生命周期 154
锁状态 154
读事务 156
写事务 157
调整页面缓存 160
过渡到独占状态 161
调整页面缓存 161
等待锁 162
繁忙处理 162
使用恰当的事务 164
代码 165
使用多个连接 165
finalize()函数的重要性 167
共享缓存模式 168
总结 168
第6章 核心C API 171
查询封装 171
连接与断开连接 172
执行查询 174
获取表查询 178
查询准备 179
编译 180
执行 181
完成与重置 182
获取记录 184
获取字段信息 184
获取字段值 186
一个实例 187
查询参数化 189
参数编号 192
参数命名 192
Tcl参数 193
错误与异常 194
错误处理 194
繁忙情况处理 196
模式改变处理 197
操作控制 198
提交钩子 198
回滚钩子 199
更新钩子 199
授权函数 200
线程 210
共享缓存模型 210
线程与内存管理 213
总结 214
第7章 扩展C API 215
API 216
注册函数 217
步骤函数 218
返回值 219
函数 220
返回值 222
数组与内存清理器 223
错误处理 224
返回输入值 224
聚合 225
注册函数 226
实例 226
排序规则 230
排序法定义 231
简单例子 234
按需排序 237
总结 238
第8章 语言扩展 239
选择一种扩展语言 240
Perl 242
安装 242
连接 243
查询处理 243
参数绑定 245
用户自定义函数 246
聚合 247
Python 248
安装 248
连接 249
查询处理 249
参数绑定 251
用户自定义函数 253
聚合 253
APSW(另一种Python接口) 254
Ruby 255
安装 255
连接 256
查询处理 256
参数绑定 257
用户自定义函数 259
Java 260
安装 260
连接 261
查询处理 262
自定义函数和聚合 264
JDBC 266
Tcl 268
安装 268
连接 268
查询处理 269
用户自定义函数 272
PHP 272
安装 273
连接 273
查询 274
用户自定义函数和聚合 276
总结 278
第9章 iOS开发中的SQLite 279
SQLite iOS开发的先决条件 279
注册成为Apple软件开发者 280
下载并安装Xcode和iOS SDK 280
其他开发环境 283
建立iSeinfeld iOS SQLite应用 284
第一步:创建一个新的Xcode工程 285
第二步:将SQLite框架添加到工程 285
第三步:准备Foods数据库 287
第四步:为食品数据创建类 289
第五步:访问和查询SQLite数据库 293
第六步:最后包装和配置iSeinfeld应用程序 297
运行iSeinfeld 297
iOS中处理大型SQLite数据库 299
总结 300
第10章 Android开发中的SQLite 301
SQLite Android开发的先决条件 301
检查先决条件和JDK 302
下载和安装Android SDK Starter包 302
下载和安装Android开发工具 303
添加Android平台和组件 304
Android SQLite类和接口 306
使用基础帮助类:SQLiteOpenHelper 307
SQLiteDatabase类 308
在实际中应用SQLiteOpenHelper和SQLiteDatabase 312
使用SQLiteQueryBuilder类查询SQLite数据库 315
搭建Seinfeld Android SQLite应用程序 317
创建新的Android工程 318
将Seinfeld SQLite数据库添加到工程 319
查询Food数据库表 319
定义用户接口 320
连接数据和用户接口 321
查看完成的Seinfeld应用程序 322
SQLite Android应用程序的注意事项 322
Android数据库的备份 323
Android系统处理大型SQLite数据库 324
总结 324
第11章 SQLite内部机制及新特性 325
B-tree和Pager模块 325
数据库文件格式 325
B-tree API 330
显示类型、存储类以及亲缘性介绍 332
显示类型 333
类型亲缘性 335
亲缘性和存储 336
执行中的亲缘性 336
预写日志 340
WAL工作原理 341
激活和配置WAL 342
WAL的优缺点 343
启用WAL时SQLite数据库的操作问题 343
总结 345
索引 347