技术开发 频道

在JRuby中构建Apache Derby数据库应用程序的两种方法


使用 JDBC 连接至 Derby

此部分将说明如何安装 Derby 以及如何使用 JRuby 和 JDBC 连接至 Derby。

安装 Derby

要安装 Derby,请执行以下步骤:

  1. 从 Derby 主页下载 Derby,然后将其解压缩到目录中。解压缩后,必须创建一个环境变量并更新另一个环境变量。
  2. 创建环境变量 DERBY_INSTALL,并将其设为解压缩后 Derby 所在的目录(例如,set DERBY_INSTALL=c:\java\db-derby-10.1.3.1-bin)。
  3. 接下来,更新 CLASSPATH 以包含两个 JAR 文件:derby.jar 和 derbytools.jar。这两个文件可在 DERBY_INSTALL 中的 lib 文件夹中找到(例如,set CLASSPATH=%DERBY_INSTALL%\lib\derby.jar;%DERBY_INSTALL%\lib\derbytools.jar;%CLASSPATH%)。

现在应当通过尝试使用 Derby 附带的 ij 命令行工具连接到 Derby 来检验 Derby 是否已安装并正确配置。

  1. 回到创建的 JRuby 脚本所在的目录。通过输入以下命令来运行 ij:java org.apache.derby.tools.ij。应当会获得一条显示 ij version 10.1 的消息。
  2. 现在将创建数据库供本教程的其余部分使用。将以下命令输入 ij:ij> connect 'jdbc:derby:JRubyDB;create=true';。此时,创建了一个名为 JRubyDB 的保存数据库的目录。
  3. 现在创建了数据库,可以创建一张表并向其中插入一些数据,从而可以在 JRuby 中检索这张表。为此,请执行清单 2 中所示的代码行(仍在 ij 内)。

清单2:创建一张表在 JRuby 内检索   

            

create table employees (id integer,

name varchar(50),

title varchar(100),

office varchar(20));

insert into employees values (1, 'Fred Smith', 'CEO', '1');

insert into employees values (2, 'John Doe', 'Vice President', '2 West');

insert into employees values (3, 'Jane Jones', 'CFO', '2 East');

insert into employees values (4, 'Sam Smiles', 'Intern', '99');

insert into employees values (5, 'Julie Morgan', 'Sales Associate', '5 West');

insert into employees values (6, 'Wilma Fonda', 'Executive Assistant', '23');

insert into employees values (7, 'Danielle Jamison', 'Director of Marketing', '3 East');

insert into employees values (8, 'Michele Cannon',

'Director of Customer Support', '5 East');

insert into employees values (9, 'Lance Hanniford', 'CIO', '3 West');

insert into employees values (10, 'Eliot Rinaggio', 'Sales Associate', '5 West');

连接至 Derby

由于已创建数据库并用一些数据对其进行了填充,下一个任务是使用 JRuby 连接至该数据库。为此,需要新建一个名为 derby.rb 的文件。在文本编辑器中打开此文件,并输入清单 3 中所示的代码行。

清单3:创建 derby.rb

            

require  'java'

module JavaSql

include_package 'java.sql'

end

include_class("java.lang.Class") { |packagename, classname| "J" + classname}

JClass.forName("org.apache.derby.jdbc.EmbeddedDriver")

connection = JavaSql::DriverManager.getConnection("jdbc:derby:JRubyDB;create=true",

"",

"")

第一行没有新内容,但是其余代码显示了 JRuby 的一些新部分:

module JavaSql 行 —— 模块是可以看作是名称空间的 Ruby 元素。它们允许将方法、类和常量分组到一起。本文中,将创建一个 Ruby 模块,您将向其中放入 java.sql 中的所有类。由于使用的是 java.sql 软件包中的许多类,因此包含整个软件包是有道理的。请记住,包含软件包将降低脚本的运行速度。这样使用模块是访问所有这些类的便利方法。

include_class 代码行 —— 值得注意的下一行是 include_class。这是一个不同版本的 include_class 方法,因为其中使用了 Ruby 的块语法。include_class 方法将接受一个代码块(有关代码块的更多信息,请参阅 参考资料 部分中列出的一个 Ruby 教程),该代码块将用于把 Java 类 Class 重命名为 JClass。这样做是因为 Ruby 也有一个名为 Class 的类;如果不将 Java 类重命名,则会产生冲突。本文的代码块将 J 加在 Java 类名的前面。因而,Class 成为 JClass

JClass.forNameconnection 代码行 —— 上两行代码几乎与在纯 Java 代码中编写的完全相同。首先,惟一的差别是使用 JClass 来引用上一行中包含的 Java 版本的类 Class。最后一行与纯 Java 代码有两个主要差别:

◆首先,无需声明 connection 变量的类型。Ruby 是动态类型的语言;因而在变量声明中无需声明类型。

◆其次,使用上面定义的用于容纳 DriverManager 类的 JavaSql 模块。该类以及 java.sql 软件包中的所有其他内容都被 JavaSql 模块包含了进来。因而,需要在所有对该软件包中的类的引用前面加上 JavaSql::。这是一种作用域机制,与 C++ 中的一样。

只要一切设置正确,脚本应当能够运行。经过授权后,该脚本还没有任何值得注意的表现。运行它后,应当得不到任何输出。如果发生异常,请返回并查看先前的步骤以确保未遗漏任何操作。

0
相关文章