如何使用数据库链接执行 Java 存储过程
日期:2003 年 3 月 6 日
作者:Stephen Raj A
在阅读此方法文档后,您应该能够:
-
创建数据库链接
-
使用数据库链接执行 Java 存储过程
简介
本文档演示如何使用数据库链接来执行 Java 存储过程。数据库链接是在同一机器或者不同机器上的两个数据库之间的连接。数据库链接用于从一个数据库(即可以是 Oracle 数据库,也可以是非 Oracle 数据库)在远程数据库上查询或进行 DML 操作。
在本方法指南中,我们将创建一个 Java 存储过程,它在第二个数据库的 SCOTT 模式中的 EMP 表中计算并返回雇员工资。然后,我们将创建从第一个数据库到第二个数据库的数据库链接。最后,我们将查看如何使用数据库链接,从第一个数据库执行在第二个数据库中创建的 Java 存储过程。
软件需求
说明
第 1 步:创建 Java 存储过程
创建一个 Java 存储过程,将雇员号码作为输入参数,返回雇员工资。将雇员工资计算为其薪金与佣金的总和。单击此处查看 Java 存储过程的代码。
Java 存储过程
public static float getPay(int empno) {
try {
// Register Oracle JDBC driver DriverManager.registerDriver(new OracleDriver());
// Obtain default connection
Connection conn = new OracleDriver().defaultConnection();
// Create the statement PreparedStatement stmt = conn.prepareStatement( "select sal, comm from emp where empno=?"); stmt.setInt(1,empno);
// Query all columns from the EMP table
ResultSet rset = stmt.executeQuery();
if (rset.next()) {
float totalPay = rset.getFloat(1)+rset.getFloat(2);
return totalPay;
} else
return 0; ..........
}
|
|
使用 loadjava 实用工具将 Java 类加载到第二个数据库的 SCOTT 模式中。loadjava 位于数据库或客户端安装的 bin 目录中。
>loadjava -thin -user scott/tiger@<hostname>:<port>:<SID>
-resolve -verbose EmpData.java
其中:
| <hostname> |
安装数据库的主机名称 |
| <port> |
数据库的 TNS 监听器端口 |
| <SID> |
数据库名称 |
例如:
>loadjava -thin -user scott/tiger@<hostname>:<port>:<SID>
-resolve -verbose EmpData.java
下一步我们为 Java 存储过程创建调用规范。要创建调用规范,需要连接到第二个数据库的 SCOTT/TIGER 用户,并在 SQL 提示符处执行以下代码
create or replace function getemppay(empno number) return number is language java name 'EmpData.getPay(int) return float'; /
|
|
在上面的列表中,调用规范 getemppay 发布 Java 存储过程 getPay()。
第 2 步:创建数据库链接
连接到第一个数据库的 SCOTT/TIGER 用户,并在 SQL 提示符处执行以下代码
|
CREATE DATABASE LINK linkdemo CONNECT TO scott IDENTIFIED BY tiger USING '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = <hostname>)(PORT = <port>)) (CONNECT_DATA = (SID = <SID>)))'
|
|
其中:
| linkdemo |
链接的名称。 |
| <hostname> |
安装数据库的主机名称 |
| <port> |
数据库的 TNS 监听器端口 |
| <SID> |
数据库名称 |
此语句创建一个名为 "linkdemo" 的数据库链接。该链接连接到主机 () 中安装的数据库的 SCOTT 用户
第 3 步:使用链接执行 Java 存储过程
要执行 SQL 查询或 DML 操作,可使用链接名称参考远程数据库中的对象。例如:
Select * from emp@linkdemo
执行 Java 存储过程,
SQL>variable x number SQL>execute :x := getemppay@linkdemo(<empno>); SQL>print x
其中:<empno> 是雇员编号
还可以使用数据库链接从 Java 应用程序执行 Java 存储过程。下面是使用数据库链接执行 Java 存储过程的代码。单击此处查看完整的 java 应用程序。
使用链接 linkdemo 访问 getEmpPay 的 Java 应用程序
public static void main(String[] args){ .......... .......... stmt = conn.prepareCall( "begin ?:= getemppay@linkdemo(?); end;" );
// Register the return type stmt.registerOutParameter(1, Types.FLOAT);
// Set the value for employee number
stmt.setInt(2,7499);
// Execute the Java Stored Procedure stmt.executeUpdate();
// Print pay returned from Java Stored Procedure
System.out.println("Pay :" + stmt.getFloat(1)); ........... ...........
|
|
在上面的 java 应用程序中,获得了对第一个数据库的连接。一个 CallableStatement 准备就绪执行 Java 存储过程,即使用数据库链接 linkdemo 执行数据库 1 中的过程。返回的类型注册为 float。设置 IN 参数并执行 Java 存储过程以获取雇员的工资总和。
资源
总结
本文档简要说明了如何创建数据库链接以及如何使用数据库链接调用 Java 存储过程。
|