作者:曾巧(numen)
摘要
Apache Derby是一个完美的,并且开源的,100% Java编写的,容易管理的关系数据库管理系统,它可以和一些商业产品的特性进行交付。
正文
Apache Derby 是一个与平台无关的数据库引擎,它以 Java 类库的形式对外提供服务。与其他难以部署的数据库不同,安装 Derby 非常简单,只需要将其 .jar 文件复制到系统中并为您的项目添加该 .jar 文件即可。
尽管 Derby 很容易安装,但是它的特性却非常丰富。它可以支持关系数据库中的所有企业级的特性,包括崩溃恢复、事务回滚和提交、行/表级锁、视图、主键/外键约束、触发器、子查询表达式,等等。
另外,Derby提供了Eclipse的插件供开发人员使用,本文主要介绍插件的安装及使用。
内容
l Derby下载
l 安装插件
l 使用插件
l 运行模式
l 例子
l 访问和查看数据
l 使用IJ工具
l sysinfo工具
l dblook工具
l 概要
Derby下载
撰写本文时,Derby的最新版本为 10.2.2 .0,你可以在Derby的官方网站下载,同时也可以下载Derby的两个Eclipse插件:derby_core_plugin和derby_ui_plugin;在下面使用前,请安装好JVM 1.4.x或更高版本;以及Eclipse 3.x。
安装插件
Derby插件的安装与其他Eclipse插件安装类似,只需要将之前下载的两个插件解压到Eclipse plugins目录下,然后重新启动Eclipse即可。你可以通过Plugin Details窗口来查看该插件是否安装成功:选择菜单[Help]->[About Eclipse SDK],然后点击[Plugin Details],如下图:
使用插件
在使用该插件前,我们先创建一个Java项目,取名为DerbyDemo,然后在Package Explorer视图选择该项目,单击右键选择菜单[Apache Derby]->[Add Apache Derby Nature],如图:
接下来是配置Derby相关属性,在Package Explorer视图选择项目单击[Properties]在左边的属性列表中选择Apache Derby;并将 Derby 的主目录设为不同于项目根目录的某个目录,例如D:/derbyDB,如图:
配置完毕后,我们就可以启动Derby服务器了,在Package Explorer视图选择项目单击[Apache Derby]->[Start Derby Network Server];控制台将输出Derby的启动信息,如图:
同样的,Derby 服务器的关闭也是类似的,在Package Explorer视图选择项目单击[Apache Derby]->[Stop Derby Network Server]。
另外,我们在[Apache Derby]菜单下看到的ij(Interactive SQL)和sysinfo(Derby System Information)工具将在后面进行介绍。
运行模式
您可以采用两种模式来部署和运行Derby:
l 在嵌入式模式(embedded mode)中,Derby只处理来自与应用程序使用的JVM相同的JVM的请求。在采用嵌入式模式来使用Derby时,应用程序会在启动和关闭时分别自动启动或停止关系引擎。Derby包的derby.jar文件(2MB)包含了Derby 数据库引擎和嵌入式JDBC驱动程序。
l 在网络服务器模式(network server mode)中,Derby会处理来自不同JVM的应用程序请求。或者,如果您喜欢使用Perl、PHP、Python或C来编写程序,那么您也可以部署一个Derby网络服务器,并通过各种语言特有的模块连接到这个服务器上,例如Perl的DBI(Database Interface)和PHP的ODBC(Open Database Connectivity)。Derby的derbynet.jar文件(0.2MB)包含了Derby Network Server。
例子
本例子将创建一个术语表,然后插入一些数据,并通过eclipse和程序对该表进行操作,关于Derby的高级例程将在其他文档中进行介绍。在开始介绍该例子前,请先阅读《项目组织的最佳实践.doc》文档,本例的文档结构也将与之相同。下面开始我们的例程吧。
1、 按照之前所讲的,启动Derby数据库服务;
2、 选择菜单[Window]->[Show View]->[Other],然后在Show View窗口选择Database Explorer;如图:
3、 从Database Explorer视图,右击[Connections],然后选择[New Connection];如图:
4、 配置数据库连接信息,用户名和密码设置成为admin,另外可以根据JDBC driver的不同,而设置不同的运行模式,相应的Class location也需要修改,为方便起见,我们使用的是Derby网络服务器模式;在生产环境中,我们将切换到Derby嵌入式模式中,以避免在网络操作过程中运行DDL脚本;如图:
5、 然后在选择Database Explorer视图下选择刚才创建的数据库demo的APP schema下,右击[Tables]选择[New]->[With SQL Editor],新建创建表的脚本;代码及图片如下:
CREATE TABLE APP.GLOSSARY
(TERM_ID INT NOT NULL GENERATED ALWAYS AS IDENTITY
(start WITH 1, INCREMENT BY 1),
TERM VARCHAR(80) NOT NULL,
DEFINITION VARCHAR(500) NOT NULL);
6、 用类似的方法为该表创建插入数据脚本;代码如下:
INSERT INTO APP.GLOSSARY VALUES (DEFAULT,'Velocity','Rapidity or speed of motion; specifically, the distance traveled per unit time.');
INSERT INTO APP.GLOSSARY VALUES (DEFAULT,'Value','Monetary or material worth.');
INSERT INTO APP.GLOSSARY VALUES (DEFAULT,'Speed','The magnitude of a velocity.');
INSERT INTO APP.GLOSSARY VALUES (DEFAULT,'Agile','Characterized by quickness, lightness, and ease of movement; nimble.');
7、 运行脚本前,一定要保证选择正确的数据库连接,在脚本编辑框单击右键,然后选择[Use Database connection],如图:
8、 运行脚本有多种方法,你可以通过Ant来运行脚本,也可以直接在之前的脚本编辑框单击右键,选择[Run SQL],为了简便,我们直接通过[Run SQL]运行脚本了,运行结果将在Data Output视图显示。如图:
9、 刷新Database Explorer视图,就能看见刚才创建的Glossary表及数据,并能对其进行修改,如图:
10、 用Java代码实现对Derby的访问也比较简单,更其它的数据库访问方式类似,如下例:































































使用IJ工具
IJ是Derby的交互式JDBC脚本工具。它让您可以通过脚本来访问JDBC的特性。与Java命令行的语法不同,输入控制台的IJ命令必须以分号结束。在创建数据库和加载数据时所看到的显示结果中,IJ执行的和在控制台结果上显示的每一行都有一个结束分号。
使用IJ运行脚本的方法有:
l 指定输入文件。
l 从文件中重定向标准输入。
l 在IJ命令行中运行脚本。
在通过Java命令行来指定输入文件或在IJ命令行中运行脚本时,输出结果会被重定向到控制台。当您将IJ的输入重定向为从一个文件中获得时,那么输出结果就不会发送到控制台。您可以通过将输出结果重定向到一个文件中或者指定ij.outfileproperty
来保存输出结果,如下面的代码所示:
java -Djdbc.drivers=org.apache.derby.jdbc.EmbeddedDriver /
org.apache.derby.tools.ij < ourscript.sql > ouroutput.txt
IJ的某些属性特性被默认设置为true
,这样可以有效地利用这个工具。例如,ij.URLCheck
属性会检查URL属性,并根据数据库连接URL的该属性的预定值来验证它们的有效性。IJ的其他属性特性被默认设置为false
,在某些情况中您需要对这些值进行修改。例如,ij.showErrorCode
属性,它会显示SQL异常错误,通常被设置为false
。如果您正在体验SQL查询和命令的功能,可能会希望将其设置为true
,这样就可以看到SQL异常错误代码的反馈了。IJ中被默认设置为false
的另外一个属性特性是ij.unicodeEscape
。如果您正在使用一种需要Unicode转义序列的语言来使用IJ,那就要打开这个属性,并将IJ设置成这种语言,如下所示。
java -Dderby.ui.territory=ja_JP /
-Dderby.ui.codeset=GB2312 /
-Dij.unicodeEscape=on -Dij.protocol=jdbc:derby: /
org.apache.derby.tools.ij
另外一个有用的IJ属性是ij.connection.connectionName
。当您运行脚本来创建和部署数据库时,有时需要创建多个连接来连接和创建多个数据库。下面就是一个例子:
java -Dij.connection.tours1=jdbc:derby:ourDB /
-Dij.connection.anotherConn=jdbc:derby:moreDB/;create=true /
org.apache.derby.tools.ij
关于IJ最后还有一点需要注意:Derby IJ的一个嵌入式实现在自己退出或碰到脚本结束时就会关闭Derby(一个例外是运行Derby的J2EE服务器,这种情况不会关闭Derby)。
在Eclipse里,启动Derby服务器,在Package Explorer视图选择项目单击[Apache Derby]->[ij(Interactive SQL)],就能进入ij视图,连接正确的数据库后,就可以执行预计了,如图:
sysinfo 工具(在 derbytools.jar 中)显示了有关 Java 环境和 Derby 的信息,包括版本信息、Derby 的类路径、其他 Java JVM 环境信息。启动Derby服务器,在Package Explorer视图选择项目单击[Apache Derby]->[sysinfo(Derby System Information)],在控制台就会显示这些信息,如图:
当然,你也可以执行下面的命令来查看系统信息:
java -cp $DERBY_CLASSPATH org.apache.derby.tools.sysinfo
dblook工具
dblook工具让您可以查看数据库的所有或部分数据定义语言(DDL)。DDL对数据库中的数据进行了描述。当然,您也可以使用create index
DDL SQL命令来创建索引。在使用dblook tool工具时,它会列出这些关系。您已经启动了嵌入式 Derby;如果您打开了一个新的命令行,并试图使用dblook,那么您希望引导到嵌入式Derby JVM中吗?不会。您必须在 jdbc:derby:
后面指定一个完整的路径。这部分JDBC URL协议称为子子协议(subsubprotocol)。您还必须要输入数据库用户名(APP
)和密码(APPdbpw
)。用来访问DDL和将DDL转储到文件中的典型命令如下所示。
java -cp $DERBY_CLASSPATH /
org.apache.derby.tools.dblook -d /
'jdbc:derby:/home/mstreicher/java/geronimo/var/derby/Databases/JPetStoreDB: /
user=APP;password=APPdbpw;' -o ourDB_DDL.sql
执行这个命令之后,会在执行该命令的目录中创建一个ourDB_DDL.sql文件。
概要
以Cloudscape为基础构建的Derby,已经发展成为嵌入式数据库的强者;本文主要介绍了在Eclipse里如何与Derby集成开发,并加以例子说明。
更多信息
·Apache Derby
http://db.apache.org/derby/index.html
·Apache Derby 资源中心
http://www.ibm.com/developerworks/cn/opensource/top-projects/derby.html
·项目组织的最佳实践.doc