好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

在Oracle中调用Java.docx

40页
  • 卖家[上传人]:碎****木
  • 文档编号:234649130
  • 上传时间:2022-01-04
  • 文档格式:DOCX
  • 文档大小:91.18KB
  • / 40 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • Oracle 中的 Java 体系结构目前,使用Java 来扩展存储程序是一种很流行的方法在使用Java 类库处理数据的过程中,PL/SQL 是必不可少的一环,这是因为 PL/SQL 封装了 Java 类库的数据访问,即任何 Java 存储对象访问的数据都必须经过 PL/SQL由于本章的所有内容只被最新的数据库版本所支持,因此它独立于本书的其他章节,以下是本章要介绍的内容:● Oracle 中的 Java 体系结构● Oracle JDBC 的连接类型● 客户端驱动器(Client-side driver),即 JDBC 瘦驱动(thin driver)● Oracle 调用接口驱动器,即中间层胖驱动(middle-tier thick driver)● Oracle 服务器端内部驱动器(Oracle Server-Side Internal Driver),即服务器级的胖驱动● 在 Oracle 中创建 Java 类库● 创建内部服务器的 Java 函数● 创建内部服务器的 Java 过程● 创建内部服务器的 Java 对象● 创建、装载、删除、使用 Java 类库时的故障诊断● 映射 Oracle 类型本章将向您展示一张 Oracle 中巨大的 Java 组织结构图,在解释了 Java 的体系结构之后,您还会看到开发和扩展 Java 组件的方法。

      使用 Java 扩展的原因:我们将使用 PL/SQL 作为存储 Java 类库和其他 PL/SQL 存储程序或匿名块程序之间的接口我们还会映射 Oracle 和 Java 之间的本地数据类型和用户自定义数据类型,以便能定义有效接口和支持 JSP (Java Server Page,Java 服务器页面)1 Oracle 中的 Java 体系结构Oracle 9i 和 10g 版本的数据库为开发服务器端或内部Java 程序组件提供了一个健壮的体系结构Java 组件采用 OO (Object-Oriented,面向对象)的结构, 这样的结构非常适合 Oracle 的对象-关系模型(Object-Relational model)组件的体系结构实际上就是一个库栈,它包含:● 操作系统的平台依赖性,例如 UNIX、 LINUX、 Microsoft Windows;● 依赖 Oracle 数据库的文件和库管理;● 独立于平台的 JVM (Java Virtual Machine,Oracle Java 虚拟机);● Java 内核类库,兼容不同的平台;● Oracle 支持的 Java API (Application Programming Interfaces,应用程序接口),如SQLJ、JDBC 和 JNDI;● Oracle 的 PL/SQL 存储对象,为 SQL 和 PL/SQL 程序之间提供接口,就像服务器端 Java 类库一样。

      Oracle 和 Java 库就和普通的文件系统一样来存储和管理应用程序,它们屏蔽了不同操作系统的结构差异和系统限制,从而建立起一个独立于平台的存储、检索和恢复文件的统一处理过程同时,Java 虚拟机为创建有大量文档支持的 O O 程序提供了一个标准环境另外,Oracle PL/SQL 也为其他 PL/SQL 存储对象以及 SQL 访问 Java 库提供了软件包下图 5-1 给出了 Oracle JVM(Java 虚拟机)的体系结构Oracle JVM 使用两种格式的命名空间:长名称和短名称长名称和 Java 中类的命名模式是一样的,我们可以用它本来的命名空间来调用存储 Java 程序然而,本章中 Java 示例的名称都是短名称,并且程序也没有放进程序包中当然,您完全可以将您的Java 程序放进程序包中Java 存储代码的命名空间包括了程序包的整个层次如果命名空间的长度超过 30 个字符,Oracle 在数据字典视图中就使用哈希命名空间使用 DBMS_JAVA 包和 LONGNAME 函数可以获得完整的命名空间,而如果要获取短名称可以使用DBMS_JAVA 程序包和SHORTNAME 函数。

      图 5-1 Oracle JVM 体系结构JVM 具有自动内存管理的功能,这意味着我们不需要手动分配和释放内存空间同时,就像 PL/SQL 一样,Java 也是强类型的语言因此,强类型和垃圾回收器相结合,对内存进行管理,为 Java 提供了一个简单的、富有弹性的环境, 就像 PL/SQL 的运行时引擎一样Java 和 PL/SQL 都是解释语言,因此它们要求 JIT(Just-In-Time,即时)编译Oracle 9i 中可以对 PL/SQL 和 Java 程序进行本地编译,而这实际上是提前编译了本地编译将 PL/SQL 和 Java 程序的字节代码转换成机器可执行的程序代码因为本地编译消除了即时编译的延时,所以提高了执行速度但不幸的是, 它却要花些时间将解释过的程序编译为机器代码权衡之下,如果您并不经常改变代码,本地编译是一个好的选择如下所示,有 3 种方法可将 Oracle 的 Java 文件嵌入到数据库实例中:(1) 处理过程分两步:(a)使用 javac 编译 Java 源文件,产生 Java 字节码程序b)使用 Oracle loadjava 工具将文件放入数据库实例2) 一步处理即可,使用 loadjava 工具编译文件,并将编译后的 Java 类文件放入数据库实例。

      3) 一步处理过程,像处理存储 Java 类一样使用 DDL (Data Definition Language,数据定义语言)创建和编译 Java 源文件Oracle 9i R1 中的语法分析程序有时会出现问题,并且在 Oracle 9i R1 中使用 DDL 命令创建 Java 程序可能会失败在 9i R2 以及以后的版本中这些问题都得到了解决本章所有的示例都将编译并通过使用 loadjava 工具载入数据库实例中小提示:如果选择使用上面的第二种方法,那么在我们试图重写文件时,可能会产生 ORA-2953 3 错误,这是因为在一些数据库版本中并不支持 loadjava 工具的替换(replace)选项要解决这个问题,您只需要使用 dropjava 工具并附带–user 选项删除.class 文件,然后重新运行 loadjava 工具载入文件即可本章假设您对 Java 有一个基本的了解,即能够编译和运行Java 程序本章所有的示例都提供了实例命令行说明在附录 D 中有关于这方面的内容的一个基本指南,并且提供了 Java 环境配置说明Java 的存储程序体和传统的 PL/SQL 程序体很像,由单个会话使用定义者权限或调用者权限访问模式调用它们。

      但 Java 在 Oracle 数据库实例的内部和外部的工作方式有一些不同之处,这些不同之处如下所示:● 首先是执行的控制有明显的不同,Oracle 实例外部的 Java 应用程序包含 main()方法,并通过调用它来运行程序,而在实例内部的 Java 程序则没有包含 main()方法在 Oracle 实例中存储的 Java 程序有两种类型的行为,它们是:● 第 1 种 Java 程序的功能相当于具有函数和过程的包,它是一些不可实例化的类这就要求程序中的所有变量和方法必须是静态的,即将它们作为 类的方法作为具有函数和过程的 PL/SQL 包的镜像,这限制了它们的范围为了更易于访问外部 Java 程序,这种程序代码的语法有所改变● 第 2 种 Java 程序的功能相当于对象类型体的实现,它们是一些可以实例化的类,并且程序中的变量和方法可以是静态的,也可以是非静态的但与外部 Java 类不同的是,它们的构造函数不能被重载,即它们只有一个默认的构造函数JDBC2 API 中的 SQLData 接口用于实例化这种类型的程序,并且实例化还包含了在 PL/SQL 和 Java 间映射数据类型● Java 类以 Java 字节码的形式保存在一个空文本中,并压缩为 Oracle 数据库实例的外部 Java 档案文件。

      Oracle 把它们作为源、类以及 Java 对象资源来管理模式中包含一个J AVA$OPTIONS 表,它可被 DBMS_JAVA 包、SET_COMPILER_OPTION 和 RESET_COMPILE R_OPTION 过程或 GET_COMPILER_OPTION 函数访问和配置● 内部 Java 类文件并不支持用户接口,这意味着它们不能被直接输出到控制台或本地声音设备声音文件可以在 Oracle 内部处理,但它们不能访问本地声音设备与 Oracle 9i 相比,Oracle 10g 稍微有些改变,因为它使用的是 Java SDK 1.4.x,支持 Headless(无头)AWT● Oracle 内部的 Java 类的名称有两种格式一种是支持标准模式数据库对象的短格式, 它最长可以有 30 个字符当一个类的名称超过长度限制时,Oracle 将自动创建一个哈希名称作为类的短名称,并将长名称存放在别处● Oracle 内部 Java 类不支持标准 Java 的 Class.forName()方法但 Oracle 9i 和 Oracle10g 支持使用多个分解器来定位类若使用其中一个来定位类,结果却是运行另一个分解器,我们就会得到意料之外的结果。

      ● 操作资源是受严格限制的,您必须拥有 SYSDBA 用户权限才能变更它们可以使用 D BMS_JAVA 包和 GRANT_PERMISSION 过程像 IO 文件来一样打开操作资源● Java 线程针对 Oracle 内部的 Java 类工作方式与外部类有所不同Oracle JVM 使用的是非抢占的线程模式这意味着所有的线程运行在一个单一的操作系统线程中,Oracle J VM 仅是程之间切换上下文切换上下文的意思是,Oracle JVM 以循环的方式在每一个时间段产生一个线程,直至所有线程结束注意:正在使用Oracle 版本会告诉您应该使用哪个版本的JDK(Java Software DevelopmentKit,Java 软件开发包)为简单起见,本章所有的示例都是使用Oracle 9i 支持的 Java SDK1.3 开发的同时,它们也被 Java SDK 1.4 所支持Oracle Java 开发人员向导列出了两个关键的错误代码,但其实还存在很多其他的错误代码在这我们并不想列出这些错误代码,而是将它们放在在本章后面的“创建、装载、删除、使用 Java 类库时的故障诊断”一节介绍。

      现在我们已经回顾了 Oracle Java 体系结构的一些关键组件,下一节将介绍几种 JDBC 驱动程序上一页 首页 下一页2 Oracle JDBC 连接类型为了满足不同的应用需求,Oracle 有 3 种方法实现 JDBC (Java Database Connection,Java 数据库连接)它们是瘦(thin)连接、胖连接和默认连接,分别对应于客户端驱动、服务器端驱动、调用接口驱动(或中间层驱动)下一节会分析这 3 种连接方式2.1 客户端驱动或 JDBC 瘦驱动Oracle 瘦连接大概是 Java 应用程序、JSP、EJB (Enterp。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.