Oracle数据库如何利用Java的存储过程沟通SQL

今天我们要介绍的是Oracle数据库如何利用Java的存储过程来沟通SQL,XML、以及Java、J2EE与Web的相关服务。如果你对其相关的实际操作有兴趣了解的话,以下的文章将会给你提供相关的知识。

存储过程(stored procedure)允许将运行于数据库层中的持久性逻辑与运行于中间层中的商务逻辑有效地分离开来。这种分离可以降低整个应用程序的复杂性,并提供其重用性、安全性、性能和可伸缩性。

但是,妨碍存储过程广泛采用的一个主要障碍是不同数据库厂商使用各种专有的、且依赖于数据库的实现语言。使用基于Java的存储过程可以解决这一问题。Oracle已经实现了ANSI标准,这些标准规定了从SQL中将静态Java方法作为过程或函数进行调用的能力。这种实现被简单地称作”Java存储过程”。

在本文中,你将了解基于Java的存储过程如何帮助简化商务逻辑、提高其性能,并扩展数据库的功能。本文将介绍Oracle数据库如何在数据库内启用基于Java的存储过程。还会介绍Java存储过程如何访问数据,以及如何创建基本Java存储过程。

选择PL/SQL还是Java

在考虑Oracle存储过程时,你可能会想到PL/SQL。不过,从Oracle8i开始,Oracle已经在数据库中支持Java,从而为存储过程提供了不同于PL/SQL的开放式和可移植的方法。我可以听到”$64 000问题”:”我如何在PL/SQL和Java之间做出选择?我是否应当忘记已经学习的所有PL/SQL相关知识,而变为一个Java天地的新手?”

两种语言都适用于数据库编程,都有自己的优点和弱点。在决定选择哪一种语言时,可以参考下面根据经验得出的通用规则:

对于要求与SQL进行无缝集成的数据库中心来说则逻辑使用PL/SQL,从而完成对数据库对象、类型和特性的访问。

出于与数据库的无关性考虑时,可以选择Java作为开放式的语言来取代PL/SQL,同时也为了集成和沟通SQL、XML、J2EE和Web服务等各个领域。

OralceJVM使得Java可以运行在数据库中

 

从Oracle8i版本1(Oralce8.1.5)开始,Oracle便提供紧密集成的Java虚拟机(JVM),JVM支持Oralce的数据库会话期结构。任何数据库对话期都可以在第一Java代码调用时启动一个虚拟上专用的JVM,后续的用户可以使用这一已经存在的支持Java的会话期。

事实上,所有会话共享同一JVM代码并保持”仅静态”的私有状态,而垃圾则收集在单个对话期空间内,从而为各个Java对话期提供了和SQL操作相同的对话期隔离和数据完整性能力。这里,不需要为了数据完整性而进行单独的Java支持的过程。这一基于对话期的结构提供了较小的内存占用率,并使OracleJVM具有与Oracle数据库一样的线性SMP可伸缩性。

创建Java存储过程

要将Java方法转换为Java存储过程需要几个步骤,包括:用loadjava实用程序将Java类加载到数据库中,利用调用规范(Call Spec)发布Java方法,将Java方法、参数类型和返回类型映射到其SQL的对应部分。下面部分说明如何完成这些步骤。

我将使用一个简单的Hello类,它有一个方法Hello.world(),返回字符串”Hello world”:

 

  1. public class Hello { public static String world () { return "Hello world"; } }  

Loadjava 实用程序

 

Loadjava是加载Java源文件、Java类文件和Java资源文件的实用程序,它可以用来验证字节码,并将Java类和JAR文件布置到数据库中。它既可以通过命令行调用,也可以通过包含于DBMS_JAVA类中的loadjava()方法调用。为了加载我们的Hello.class示例,输入:

 

  1. loadjava -user scott/tiger Hello.class 

从Oracle9i版本2开始,loadjava允许通过为包含在被处理的类中的方法创建相应的Call Specs来自动将Java类发布为存储过程。Oracle为开发、测试、调试和布置Java存储过程提供了Oracle9i JDeveloper。

 

  1. The Resolver Spec 

基于JDK的JVM在列于CLASSPATH中的目录中查找类引用,并对其进行解析。因为Oracle数据库类存在于数据库模式中,所以OracleJVM利用数据库解析器(resolver)通过列于Resolver Spec中的模式查找并解析类引用。

与CLASSPATH不同(CLASSPATH可以应用于所有的类),Resover Spec根据每类的情况进行应用。缺省解析器首先在加载类的模式中搜寻类,然后在公共同义词(public synonyms)中搜索。

 

  1. loadjava -resolve  

你可能需要指定不同的解析器,也可以在使用loadjava时强制进行解析,从而在布置时确定可能在以后运行时发生的任何问题。

 

 

  1. loadjava -resolve -resolver "((* SCOTT) (foo/bar/* OTHERS) (* PUBLIC))"  

Call Spec和存储过程调用

 

为了从SQL中调用Java方法(以及从PL/SQl和JDBC中调用),必须首先通过Call Spec发布公共静态方法,它为SQL定义方法采用的参数以及返回的SQL类型。

【编辑推荐】

  1. Oracle11g认证考试的3个主要途径
  2. Oracle数据库中3种常用的关闭方式
  3. Oracle数据库中经常使用的启动方式介绍
  4. 用触发器实现Oracle操作日志
  5. Oracle数据库堪称是重量级的缘由

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/231227.html<

(0)
管理的头像管理
上一篇2025-04-19 14:39
下一篇 2025-04-19 14:41

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注