在数据库中运行 Java

在数据库中运行 Java

本教程向您介绍如何在数据库中开发和运行 Java 程序。

大约 30 分钟

主题

本教程包括下列主题:

将鼠标置于此图标上可以加载和查看本教程的所有屏幕截图。 (警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)

注:此外,您还可以在下列步骤中将鼠标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。可以通过单击各个屏幕截图来将其隐藏。

概述

存储过程允许最充分地利用关系数据库管理系统 (RDBMS) 的功能。存储过程简化了数据库编程、提升了性能、提供数据逻辑提的集中管理并且优化了网络传输。

将 Java 用于存储过程

Java 语言被设计为一种面向对象的编程语言,它具有内置的安全性机制和高效的垃圾收集系统。Java 还具有一组非常大的、丰富的标准库,从而可以更快、更低成本地开发应用程序。使用 Java 存储过程,开发人员能够在构建数据库应用程序时利用上述所有功能。

以下 OBE 基于 Kuassi Mensah 撰写的《使用 Java 和 Web 服务进行 Oracle 数据库编程》一书。本书的说明可从 http://db360.blogspot.com/2006/08/oracle-database-programming-using-java_01.html 处获得,代码示例可从 OTN 上的 http://download.oracle.com/technology/tech/java/jsp/pdf/Code_depot.zip 处获得。

返回主题列表

开始本教程之前,您应该:

1.

安装 Oracle 数据库 11g

2.

Sun 下载并安装 JDK 6.0。

4

java.zip 文件下载并解压缩到您的工作目录中(即 wkdir)

返回主题列表

通过以下步骤,使用默认的服务器端连接 (conn = DriverManager.getConnection("jdbc:default:connection:");) 在数据库中加载 TrimLoad.java,然后使用 TrimLobProc 过程执行该文件:

1.

打开一个终端窗口,切换到解压缩文件的目录。执行以下命令:

loadjava -u hr/hr TrimLob.java      

2.

打开一个终端窗口,更改到解压缩文件的目录。执行以下命令:

drop table basic_lob_table;
create table basic_log_table (x varchar2 (30), b blob, c clob);
/ 

3.

使用以下命令执行 TrimLobProc 过程:

set serveroutput on
call dbms_java.set_output(50000);
call TrimLobProc();

返回主题列表

由于 SQL 中的数据类型和 Java 编程语言中的数据类型不同,因此映射在一个使用 Java 类型的应用程序和一个使用 SQL 类型的数据库之间传输数据。使用以下步骤在不同的 SQL 类型和对应的 Java 类型之间进行映射:

1.

oracle.sql.char 映射到 SQL CHAR。执行 TypesTab.sqlorasqlCHAR.sql 脚本:

@TypesTab
@orasqlCHAR

2.

在 CLOB 定位器和 java.sql.Clob 之间进行映射。执行 XobTypesTab.sqlClobMap.sql 脚本:

@XobTypesTab
@ClobMap

3.

将 REF Cursor 映射到 java.sql.ResultSet。执行 ResultSet.sql 脚本:

@ResultSet

4.

VARRAY 映射到标量 SQL 类型 Number。执行 XVARRAY.SQL NumVarray.sql 脚本

@XVARRAY
@NumVarray

返回主题列表

执行以下步骤,使用 ojmjava 或 PL/SQL 包装调用 Java 应用程序:

1.

设置数据库表。执行 Workers.SQL 脚本

@Workers
exit

2.

使用 ojmjava 在数据库中调用 Java,这是一个交互式命令行实用程序,可以从客户端计算机在数据库中运行 Java 类。ojmjava 使用 JDBC 连接创建一个数据库会话,将一个字节数组从 ojmjava 客户端传递到执行用户类的 main 方法的 ojmjava 服务器。ojmjava 服务器然后将输出传递回客户端。从终端窗口中,执行以下命令:

ojvmjava -thin -user hr/hr
Java Workers 621 "Senior VP" 650000  

3.

使用 PL/SQL 包装在数据库中调用 Java。从终端窗口中,执行以下命令:

sqlplus hr/hr
create or replace procedure WorkerSp
  (wid IN varchar2, wpos in varchar2, wsal in varchar2) as
  language Java name 
  'Workers.main(java.lang.String[])';
call WorkerSp('621','Senior VP','650000');  

返回主题列表

对象类型调用规范可以使用 STATIC 关键字发布一个对象类型的 public static 成员方法。然而,与任何其他 PL/SQL 打包的调用规范不同,使用 MEMBER 关键字对象类型调用规范还可以发布非静态实例。使用以下步骤创建并测试一个对象类型调用规范:

1.

使用 PL/SQL 包装在数据库中调用 Java。在终端窗口中,执行 @BasicObjTyp.sql 脚本:

@BasicObjTyp

返回主题列表

使用二进制可执行文件,您可以获得 Java 的最佳执行性能,这些二进制文件是使用 JIT 编译器和/或静态编译器编译 Java 源代码获得的。从 Oracle 数据库 11g 开始,OJVM 使用一个允许动态选择、本地编译和执行大多数常用 Java 方法的 JIT 编译器,因此与 Oracle 数据库 10g 中使用的 NCOMp 相比,可获得更好的性能和可管理性。您可以使用以下步骤显示 JIT 编译与 Java 应用程序的解释相比的优势:

1.

在终端窗口中,执行 @JITDemo.sql 脚本:

@JITDemo

注意解释的和编译的代码之间的计时率

返回主题列表

在 OracleJVM 中,用于特定需求的 Java 对象的状态保留在各种成为“对象内存”的特定内存区域中(如 Newspace、Oldspace、Runspace、Stackspace、Sessionspace)。执行以下步骤显示各种 Java 内存区域

1.

在终端窗口中,执行 @memtest.sql 脚本:

@memtest

返回主题列表

在本教程中,您了解了以下内容:

在数据库中加载和运行 Java 应用程序
将 SQL 类型映射到 Java 类型
在数据库中调用 Java
阐述一个对象类型调用规范
使用 JIT 编译 Java
显示 Java 内存区域

返回主题列表

将鼠标置于该图标上可以隐藏所有的屏幕截图。

寄送此页面
Printer View 打印机视图