Derby 是什么
Derby 是一款基于 Java 的,具有全面事务支持能力的,轻量级的关系型数 据库。 2004 年 IBM 在旧金山的 LinuxWorld 宣布正在将 Cloudscape 作为开 放源代码发布给 Apache Software Foundation (ASF),后者为其建立了一个名 为“ Derby ”的孵化器项目。目前最新的版本是 10.4.2.0 。
Derby 是一个轻量级的数据库。它大概 2M 左右,包括基本的数据库引擎和 内嵌的 JDBC 驱动。
它基于 Java, JDBC 和 SQL 标准。
它提供了内嵌的 JDBC 驱动,使得开发人员可以将 Derby 嵌入基于 Java 的 应用解决方案。
它同时拥有 Derby 客户端 JDBC 驱动和 Derby 服务器,以支持传统意义上 数据库的客户机 / 服务器模式。
它易于安装和使用。
Derby 的表功能(Derby-style table functions)
在一些数据库产品中,也有一些表功能的不同实现。比如 Oracle 的表功能 ,它可以使用 PL/SQL 来产生一个结果集。但由于 Derby 本身是基于 Java 实 现,开发人员可以更方便的使用 Java 语言开发表功能,使得其具有一定的灵活 性。
Derby 的表功能可以将外部数据包装成 Derby 中的表。外部数据可以是 XML 文件,文本文件,其它数据库中的表或一个 RSS 的订阅文件。这些信息源都可 以被表示为一个 JDBC 的结果集 (ResultSet) 。
在开发人员实现表功能过程中,大部分的 ResultSet 中的方法都可以不用实 现,但是一个合法的 Derby-style 的表功能必须实现以下方法。
next()
close()
wasNull()
getXXX() -- 当调用一个 Derby 表功能时,Derby 针对相应的列调用 get***() 方法。所谓的 get***() 方法是基于相应列的数据类型。
Derby 表功能的开发
创建表功能
清单 1. 创建表功能
CREATE FUNCTION externalStudents
()
RETURNS TABLE
(
Id INT,
Name VARCHAR( 50 ),
)
LANGUAGE JAVA
PARAMETER STYLE DERBY_JDBC_RESULT_SET
READS SQL DATA
EXTERNAL NAME 'com.test.StudentTable.read'
public static ResultSet read() {...}
使用表功能
为了调用一个表功能,我们需要将一个 Table 的构造器放入一个查询的 From 字句。需要注意的是,这个表的别名 s 是语法中必须的部分。
INTO students SELECT s.*
FROM TABLE (externalStudents() ) s;