以下的文章主要涉及到Oracle数据库的开发人员,讲述JAVA的存储过程,以及利用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可伸缩性。
【编辑推荐】
oracle存储过程怎么写?
给你一个例子:/* 存储过程返回数据集 *//* 1.建立带ref cursor定义的包和包体及过程 */create or replace package pkg_testastype myrctype is ref cursor;procedure display(p_empno char,p_rc out myrctype);end;create or replace package body pkg_testas procedure display(p_empno char,p_rc out myrctype) is sqlst varchar2(100); beginif p_empno is null thenopen p_rc for select emp_name from student; elsesqlst := select emp_name from student where emp_no = :w_empno;open p_rc for sqlst Using p_empno; end if; end;end;调用:declarew_rc pkg_; w_empname _name%type;beginpkg_(0001, w_rc);loop fetch w_rc into w_empname; exit when w_rc%notfound; dbms__line(w_empname); end loop;end;
怎么用Java连接oracle数据库?
public class OracleJdbcTest{String driverClass = ;Connection con;public void init(FileInputStream fs) throws Exception{Properties props = new Properties();(fs);String url = ();String userName = ();String password = ();(driverClass);con=(url, userName, password);}public void fetch() throws SQLException, IOException{PreparedStatement ps = (select SYSDATE from dual);ResultSet rs = ();while (()){// do the thing you do}();();}public static void main(String[] args){OracleJdbcTest test = new OracleJdbcTest();();();}}[代码] = jdbc:oracle:thin:@
java如何调用ORACLE存储过程
部分关键代码: Connection conn = (连接STR, USER, PASSWORD); CallableStatement proc = null; proc = ({ call 存储过程NAME });
发表评论