您的代码与 Java 代码之间还有另一个区别尚未提及:尚未执行任何操作来处理异常。Class.forName
和 DriverManager.getConnection
都抛出已检查异常。在 Java 代码中,等效代码将不会编译,直至对那些异常做出一些处理。Ruby 没有已检查异常,因此您不用处理它们。但是,编写应用程序时,通常希望执行一些处理异常的操作(如果可以)。执行代码可能产生两个已检查异常:ClassNotFoundException
和 SQLException
。要了解如何处理这两个异常,请修改 .rb 文件以匹配清单 4 中所示的代码。
清单4:处理异常
|
第一个更改是为 ClassNotFoundException
添加了 include_class
。由于将处理该异常,因此脚本需要知道异常类的存在。无需为 SQLException
单独使用一个 include,因为已通过 include_package 'java.sql'
包含该异常。Ruby 中的异常是按照类似于 Java 的方法来处理的。您有一个开头为 begin
而不是 try
、结尾为 end
而不是 }
的块。使用 rescue
,而不是使用 catch
。那些更改就是与第一个版本的代码的其余差别。代码的流程应当看起来仍然熟悉。rescue
块中做的全部操作就是打印异常类型。很明显,在现实世界中您将对那些异常做一些更有用的操作,但是这将引领您入门。
使用 JDBC 与数据进行交互
在此部分中,将了解如何用 Derby 和 JDBC 检索和插入数据,以及如何通过 JRuby 使用 JDBC 事务。
既然可连接至 Derby,下一步是使用 JDBC 提取数据。在 JRuby 中执行此操作的代码类似于纯 Java 代码 —— 仍要编写 JDBC 代码,只是通过另一种语言来调用它。必要的步骤包括:创建一条语句,执行查询,并迭代 ResultSet
。创建连接后,需要将清单 5 中所示的五行代码添加到代码中。像以前一样,无需声明变量的类型。这段代码几乎与纯 Java 代码完全相同。惟一的差别在于略微更改循环语法以及使用 puts
而不使用 System.out.println
。
清单5:使用 JDBC 从 Derby 中检索数据
|
使用 PreparedStatement 也很简单。用清单 6 中所示的代码行替代上面几行代码中的前两行。
清单6:使用 PreparedStatement
|
应当会得到以下输出:
应当会得到以下输出:John Doe
Jane Jones
Julie Morgan
使用 JRuby 将数据插入 Derby
插入数据同样简单。使用 JDBC,先检索连接,然后添加清单 7 中所示的两行。
清单7:插入数据
|
运行代码后,应当会打印以下结果:
运行代码后,应当会打印以下结果:John Doe
Jane Jones
Julie Morgan
James Cotton
更新和删除都遵循相同的范式,使用 Statement 或 PreparedStatement。