作者:曾巧(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的访问也比较简单,更其它的数据库访问方式类似,如下例:
package com.gelc.db.derby.demo;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
/**
* A derby demo
*
* @author numen
*
*/
public class DerbyDemo {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
String url = "jdbc:derby://localhost:1527/demo;create=true";
String strSql = "select g.term_id, g.term from app.glossary g";
Connection conn = DriverManager.getConnection(url, "admin", "admin");
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery(strSql);
while (rs.next()) {
System.out.print(rs.getString("term_id") + "; "
+ rs.getString("term"));
System.out.println(" ");
}