在 IBM Bluemix 云平台上开发并部署您的下一个应用。
开始您的试用
Apache Derby 项目
本文是新的 “用 Apache Derby 进行开发 —— 取得节节胜利” 系列的第一篇,这个系列专门研究由 Apache Derby 项目开发的软件技术。Apache Derby 项目发布的软件是基于 IBM 赠给 Apache 软件基金会的技术基础上的开放源码数据库。Apache Derby 数据库软件是用 Java™ 编程语言编写的,所以是高度可移植的,但是在一个小小的包中仍然提供了可观的性能。
Derby 数据库也实现了许多数据库标准,所以如果有过数据库经验要开始使用 Derby,或者在需要的时候要把现有 Derby 数据库应用程序移动到其他符合标准的数据库系统,都会很容易。因为 Derby 正式发布还不到一年,所以有用的信息比较缺乏。IBM developerWorks 正在用大量 文章和教程 来填补这个空白。本系列针对的是数据库系统经验不多的用户。developerWorks Web 站点上的其他文章对 Apache Derby 数据库软件提供了更高级的介绍以及有关如何把它集成到 Java 企业软件栈中的信息。
为了符合本系列的精神,本文在详细讨论 Apache Derby 之前,首先简要介绍一下数据库系统。
回页首
数据库系统简要介绍
不论您是否意识得到,在 Internet 上冲浪时,其实是在与各种数据库支持(database-backed)的 Web 应用程序进行交互。这种说法可能还比较陌生,但它只是表示所访问的 Web 站点是用保存在数据库中的数据动态生成的。为了演示,请考虑以下可能访问的 Web 站点类型:
- 信息门户,例如 图 1 所示的 developerWorks 开放源码项目区
- 追踪本地新闻或体育事件的报纸 Web 站点
- 财经 Web 站点,例如银行或投资机构的站点,您用于监视自己的金融投资组合
- 地图 Web 站点,用于查找驾车路线
- 搜索引擎,可以找到有兴趣的 Web 站点,获得某个主题的更详细信息
图 1. developerWorks 开放源码项目区
点击查看大图
这些示例,每个都使用数据库动态地保存、查找和检索信息。在这些应用程序中,Web 站点从用户收集必要的信息(例如街道地址),查询应用程序数据库,并把请求的数据集合到一个合适的可视结果中。
许多这样的数据库系统都是又大又复杂 —— 试想一下要容纳用图片提供正确驾车路线所需要的全部地图信息!显然,保存数据,并让应用程序可以使用数据,是一项巨大的任务,这项任务已经被许多厂商解决了,其中 IBM 使用 IBM DB2®,Microsoft® 使用 Microsoft SQL Server。这些商业数据库系统提供了完整的、企业级的能力。所以,它们可以容纳海量数据,可以并发地与大量用户交互,能够在多个大型计算系统之间伸缩。
数据库角色
与您预期的一样,处理这些系统并不简单,而且它们运作起来也会很昂贵。从历史上看,操作这些数据库所需要的任务分成三类。虽然角色之间有时会有重叠,但它们各自的职责理解起来很容易:
- 数据库管理员(DBA) —— 负责数据库系统的整体操作,其中包括:底层硬件的选择和布置,数据库服务器的安装和优化(特别是在使用硬件的情况下),数据库服务器的日常操作,例如数据备份和恢复。
- 数据库开发人员 —— 负责实际运行的数据库,包括设计数据库、模式、表、表关系、索引,以及对查询进行优化。
- 数据库应用程序开发人员 —— 负责通过用数据库应用程序编程接口(API),例如 Java 数据库连接(JDBC)或开放数据库连接(ODBC),根据需要保存和检索数据,从而把应用程序代码与底层数据库集成在一起。
如果前面的讨论让您觉得有点害怕,那就对了 —— 操作数据库历史上来说一直都很难。为了理解为什么,我们详细地来看一个具体示例:在线银行。在连接到银行的 Web 站点时,要提供凭证(最常见是用户名和口令),然后获得对财务帐户的访问。可以查看数据、支付帐户、转移资金。银行使用的数据库必须迅速地找到相关信息,安全地管理交易、安全地与用户交互,而最重要的是不能丢失任何数据!并且银行必须要同时为大量用户做这件事。
但并不是所有的应用程序都这么严格要求,特别是刚开始设计的应用程序。如果只是学习使用数据库,或者只想快速地实现数据库应用程序的原型,那么大多数商业数据库系统可能过于笨重。幸运的是,用 Apache Derby 数据库开发支持数据库的应用程序要比想像的简单。本文其余部分,将提供对 Apache Derby 项目的基本介绍。未来的专栏文章会演示如何用 Apache Derby 数据库构建数据库应用程序。
回页首
什么是 Apache Derby 项目?
Apache Derby 项目的目标是构建一个完全用 Java 编程语言编写的、易于使用却适合大多数应用程序的开放源码数据库。可以想像,开发一个数据库并不简单,Apache Derby 数据库也不例外(因为它是个开放源码软件,所以您可以自行查看它)。但是 Derby 项目并不是从零开始的。回到 1996 年,一个叫做 Cloudscape, Inc 的新公司成立了,公司的目标是构建一个用 Java 语言编写的数据库服务器。公司的第一个发行版在一年之后推出,后来产品的名称变成 Cloudscape。1999 年,Cloudscape, Inc. 被大型数据库厂商 Informix Software, Inc. 收购。Informix Software 在 2001 年又被 IBM 收购,然后 IBM Cloudscape™ 数据库系统在许多 IBM 的产品中被用作内嵌的数据库引擎。2004 年 4 月,IBM 把 Cloudscape 数据库软件赠送给 Apache 软件基金会,从此 Apache Derby 项目诞生了(参见 图 2)。
图 2. Apache Derby 项目的 Web 站点
这时,Cloudscape 数据库几乎已经有了 50 万行 Java 代码,所以花了一些时间才正确地把它转换成 Apache Derby 项目。经过孵化期之后,Derby 于 2005 年 7 月正式发布。所以虽然看起来像是新事物,但是 Derby 背后已经开发了几乎十年了。
IBM 继续管理 Cloudscape 数据库,该数据库是从 Apache Derby 源代码构建的。IBM 把 Cloudscape 数据库作为免费下载提供,而且为需要增强信心的客户提供收费的咨询服务。另外,Sun Microsystems 已经宣布它将包含一个修补过的 Apache Derby 版本作为它的 Java 数据库产品。来自 IBM 和 Sun 的强大投入,强化了 Apache Derby 数据库的光明前景。Derby 数据库也符合许多数据库标准,例如 SQL-92 和 JDBC 3.0 版本,所以开始用 Derby 数据库系统开发的应用程序可以容易地移植到其他数据库系统,例如 IBM DB2 通用数据库™。
Apache Derby 数据库概述
Apache Derby 是用 Java 语言编写的,所以可以在任何存在合适的 Java 虚拟机(JVM)的地方运行。这意味着 Derby 实际上可以在任何操作系统上运行,包括 Microsoft Windows®、Macintosh、Linux® 和 UNIX® 平台。Derby 也可以在三个 Java 平台的任何一个上运行:Java 2 Platform, Micro Edition (J2ME)、Java 2 Platform, Standard Edition (J2SE) 和 Java 2 Platform, Enterprise Edition (J2EE)。Derby 软件绑定在 Java 档案(JAR)文件中,只有 2 MB 大小。由于内存占用这么小,所以 Derby 数据库可以容易地与应用程序绑定在一起。
可以用两种方式使用 Derby 数据库:
- 作为内嵌的数据库,用户并不知道数据库的存在。应用程序使用数据库,二者在同一个 JVM 中运行,而数据库把数据保存在本地文件系统中。在内嵌模型中,数据库只与运行在同一 JVM 中的应用程序通信。
- 作为客户机-服务器连接,是许多商业厂商使用的更传统的模型。在这种模型中,应用程序通过网络连接与数据库通信,应用程序和数据库分别在各自的 JVM 中运行。数据库服务器可以与多个客户机应用程序通信。
下载 Apache Derby
为了体会使用 Apache Derby 的简单性,最好的方式就是亲自试用它。本节其余部分提供了下载和验证 Apache Derby 版本的通用说明(请参阅参考资料 获得 Apache Derby 官方 Web 站点的链接,获得针对具体操作系统的说明)。这些说明假设已经在系统上安装了合适的 Java 运行时环境(JRE)。任何高于 1.3 版本的 JRE 都可以,但是本系列文章使用 Java 1.4.2 及以上版本。
这些准备条件就绪后,第一步是下载 Apache Derby。如 图 3 所示,可以下载三个不同版本:源代码、库和二进制。源代码版本就是源代码。要使用这个版本,必须编写源代码并构建自己的 .jar 文件。库版本只包含 Derby 数据库必要的 .jar 文件。二进制版本包含 .jar 文件和 Derby 文档。
为了简单起见,请下载二进制版本。请确保验证下载的完整性;包括验证 PGP(Pretty Good Privacy)签名,它可以保证下载的是正式版本,还要验证 MD5(消息摘要算法 5)签名,它可以保证下载的文件没有破坏。
图 3. 下载 Apache Derby 数据库
安装 Apache Derby
在成功下载并验证了包含 Derby 数据库文档的档案之后,安装非常简单(虽然有轻微的平台依赖性):
- 选择合适的位置,例如在 Windows 系统上的 C:\Apache 或在基于 Unix 的系统上 的 /opt/Apache。
- 打开终端窗口(在 Windows 上是命令提示符),转换到这个新目录,展开包含 Derby 数据库的档案。这么做之后,会创建一个新目录,目录名与安装的 Derby 数据库版本对应,例如 db-derby-10.1.2.1-bin。
- 把 Derby .jar 文件添加到
CLASSPATH
环境变量。如果习惯使用命令提示符,也可以直接把 derby.jar(位于 db-derby-10.1.2.1-bin/lib 子目录)添加到 CLASSPATH
变量。另外,也可以运行 db-derby-10.1.2.1-bin\frameworks\embedded\bin 子目录中提供的 setEmbeddedCP
脚本。在运行这个脚本之前,或者应当设置 DERBY_INSTALL
环境变量,或者修改脚本,以便 DERBY_INSTALL
指向安装 Derby 数据库的目录。 - 用
sysinfo
工具验证安装,如 清单 1 所示。
清单 1. 用 sysinfo 测试 Derby 安装
rb$ java org.apache.derby.tools.sysinfo
------------------ Java Information ------------------
Java Version: 1.4.2_09
Java Vendor: Apple Computer, Inc.
Java home: /System/Library/Frameworks/JavaVM.framework/Versions/1.4.2/Home
Java classpath: /opt/Apache/db-derby-10.1.2.1-bin/lib/derby.jar:/opt/Apache/db-derby-10.1.2.1-bin/lib/derbytools.jar:.
OS name: Mac OS X
OS architecture: ppc
OS version: 10.4.3
Java user name: rb
Java user home: /Users/rb
Java user dir: /opt/Apache/db-derby-10.1.2.1-bin
java.specification.name: Java Platform API Specification
java.specification.version: 1.4
--------- Derby Information --------
JRE - JDBC: J2SE 1.4.2 - JDBC 3.0
[/opt/Apache/db-derby-10.1.2.1-bin/lib/derby.jar] 10.1.2.1 - (330608)
[/opt/Apache/db-derby-10.1.2.1-bin/lib/derbytools.jar] 10.1.2.1 - (330608)
[/opt/Apache/db-derby-10.1.2.1-bin/lib/derby.jar] 10.1.2.1 - (330608)
[/opt/Apache/db-derby-10.1.2.1-bin/lib/derbytools.jar] 10.1.2.1 - (330608)
------------------------------------------------------
----------------- Locale Information -----------------
------------------------------------------------------
这时,就有了一个可工作的数据库系统,既可以作为独立的网络服务器运行,也可以作为内嵌的数据库在自己的应用程序中运行。未来的专栏文章会介绍如何在这两种模型下运行 Derby,并提供附加的数据库深入介绍。
使用 Apache Derby
使用数据库系统并不很难。使用 Apache Derby,可以迅速地开始使用特性齐全的数据库系统。而且因为 Apache Derby 是符合标准的数据库,所以在情况许可的时候,用它开发的应用程序可以容易地迁移到更强大的数据库系统上。