知识大全 使用 Java 存储过程将更加简便
Posted 数据库
篇首语:少成若天性,习惯如自然。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 使用 Java 存储过程将更加简便相关的知识,希望对你有一定的参考价值。
使用 Java 存储过程将更加简便 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
利用Java存储过程沟通SQL XML Java J EE和Web服务 存储过程(stored procedure)允许将运行于数据库层中的持久性逻辑与运行于中间层中的商务逻辑有效地分离开来 这种分离可以降低整个应用程序的复杂性 并提供其重用性 安全性 性能和可伸缩性 但是 妨碍存储过程广泛采用的一个主要障碍是不同数据库厂商使用各种专有的 且依赖于数据库的实现语言 使用基于Java的存储过程可以解决这一问题 Oracle已经实现了ANSI标准 这些标准规定了从SQL中将静态Java方法作为过程或函数进行调用的能力 这种实现被简单地称作 Java存储过程 在本文中 你将了解基于Java的存储过程如何帮助简化商务逻辑 提高其性能 并扩展数据库的功能 本文将介绍Oracle如何在数据库内启用基于Java的存储过程 还会介绍Java存储过程如何访问数据 以及如何创建基本Java存储过程 选择PL/SQL还是Java 在考虑Oracle存储过程时 你可能会想到PL/SQL 不过 从Oracle i开始 Oracle已经在数据库中支持Java 从而为存储过程提供了不同于PL/SQL的开放式和可移植的方法 我可以听到 $ 问题 我如何在PL/SQL和Java之间做出选择?我是否应当忘记已经学习的所有PL/SQL相关知识 而变为一个Java天地的新手? 两种语言都适用于数据库编程 都有自己的优点和弱点 在决定选择哪一种语言时 可以参考下面根据经验得出的通用规则 对于要求与SQL进行无缝集成的数据库中心来说则逻辑使用PL/SQL 从而完成对数据库对象 类型和特性的访问 出于与数据库的无关性考虑时 可以选择Java作为开放式的语言来取代PL/SQL 同时也为了集成和沟通SQL XML J EE和Web服务等各个领域 OralceJVM使得Java可以运行在数据库中 从Oracle i版本 (Oralce )开始 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 public class Hello public static String world () return Hello world ; Loadjava 实用程序 Loadjava是加载Java源文件 Java类文件和Java资源文件的实用程序 它可以用来验证字节码 并将Java类和JAR文件布置到数据库中 它既可以通过命令行调用 也可以通过包含于DBMS_JAVA类中的loadjava()方法调用 为了加载我们的Hello class示例 输入 loadjava user scott/tiger Hello class 从Oracle i版本 开始 loadjava允许通过为包含在被处理的类中的方法创建相应的Call Specs来自动将Java类发布为存储过程 Oracle为开发 测试 调试和布置Java存储过程提供了Oracle i JDeveloper The Resolver Spec 基于JDK的JVM在列于CLASSPATH中的目录中查找类引用 并对其进行解析 因为Oracle数据库类存在于数据库模式中 所以OracleJVM利用数据库解析器(resolver)通过列于Resolver Spec中的模式查找并解析类引用 与CLASSPATH不同(CLASSPATH可以应用于所有的类) Resover Spec根据每类的情况进行应用 缺省解析器首先在加载类的模式中搜寻类 然后在公共同义词(public synonyms)中搜索 loadjava resolve <myclass> 你可能需要指定不同的解析器 也可以在使用loadjava时强制进行解析 从而在布置时确定可能在以后运行时发生的任何问题 loadjava resolve resolver ((* SCOTT) (foo/bar/* OTHERS) (* PUBLIC)) Call Spec和存储过程调用 为了从SQL中调用Java方法(以及从PL/SQl和JDBC中调用) 必须首先通过Call Spec发布公共静态方法 它为SQL定义方法采用的参数以及返回的SQL类型 在我们的例子中 我们将利用SQL*Plus连接到数据库 并为Hello world()定义一个顶级Call Spec SQL> connect scott/tiger SQL> create or replace function helloworld return VARCHAR as language java name Hello world () return java lang String ; / Function created 可以像下面这样调用Java存储过程 SQL> variable myString varchar [ ]; SQL> call helloworld() into :myString; Call pleted SQL> print myString; MYSTRING Hello world Java存储过程可以通过其Call Spec从以下各项中进行调用 SQL DML语句(INSERT UPDATE DELETE SELECT CALL EXPLAIN PLAN LOCK TABLE和MERGE) PL/SQL块 子程序 程序包以及数据库触发器 Call Spec的美妙之处在于存储过程实现可以从PL/SQL转换为Java 反之亦可 这一点对于请求者是透明的 Call Spec从实现语言中(PL/SQL或Java)中抽象出调用界面 因而使之能够在原有应用程序和新的基于Java/J EE的应用程序之间共享商务逻辑 但是 在从Java客户程序调用在数据库驻留的Java类时 你可能不希望通过PL/SQL包装器(wrapper) 在以后的版本中 Oracle计划提供一种机制 它可以使开发人员略过Call Spec 高级数据访问控制 Java存储过程可用于控制和限制对Oracle数据的访问 其方法是只允许用户通过存储过程管理数据 而存储过程在其调用者的权限内执行 而不能对表本身进行访问 例如 你可以在特定时间内禁止更新数据 或者使管理者只具有查询工资数据的权利 而不能进行更新 或者记录所有的访问并通知某一安全机构 原有应用程序与J EE应用程序之间的数据逻辑共享 因为原有应用程序与J EE应用程序都通过Call Spec调用存储过程 所以J EE和非J EE应用程序可以共享相同的数据逻辑 由于有了Call Spec 所以不用考虑所用的是何种实现语言(无论是PL/SQL还是Java) 该数据逻辑都可以共享 为BMP实体Bean自动生成主关键字 在对EJB实体bean应用BMP时 一个bean实例可以由自动生成的与新插入的数据相关联的主关键字惟一确定 它是ejbCreate()的返回值 可以利用一个插入相应数据的存储过程在一个数据库操作中检索ejbCeater()中的该值 并检索或计算主关键字 作为另一种方法 也可以利用JDBC 的RETURN_GENERATED_KEYS特性 以一个SQL语句插入该数据并检索相应的关键字(或ROWID) 但是 存储过程方法在各个JDBC驱动器版本和数据库之间更具可移植性 可以用以下三个步骤实现这一模式 创建一个Java存储过程 在公共GenPk类中定义一个公共静态Java方法insertAccount() 此方法将插入数据 计算惟一的关键字(通过发出一个序列号) 并返回计算出的关键字作为主关键字 定义Call Spec CREATE OR REPLACE PROCEDURE insertAccount(owner IN varchar bal IN number newid OUT number) AS LANGUAGE JAVA NAME GenPK insertAccount( java lang String []) ; / 在ejbCreate()内调用存储过程 Public AccountPK ejbCreate(String ownerName int balance) throws CreateException try CallableStatement call = conn prepareCall call insertAccount(? ? ?) ; return new AccountPK(accountID); 为CMP实体Bean定制主关键字查找器 查找器方法(Finder methods)用于检索已存在的EJB实体bean实例 主关键字查找器使你能够检索惟一标识的EJB实例 对于CMP实体bean EJB容器根据声明描述 自动生成主关键字查找器findByPrimaryKey()方法 但是 在某些情况下 可能需要更多的控制 例如可能需要专门的查找器 如findByStoredProcKey() 在这些情况下 你可以结合使用Java存储过程和对象关系框架(如Oracle i应用服务器[Oracle iAS] TopLink)来实现定制的主关键字查找器方法 在将EJB查找器定义为REDIRECT或NAMED查找器后 TopLink将生成一个SQL查询用于检索bean实例 数据驱动的EJB调用 在数据驱动体系结构中 商务逻辑调用可以作为数据库操作(如插入 更新或删除)的结果来触发 实现该数据逻辑的Java存储过程可以被声明为数据库触发器 用以调用运行于中间层J EE应用服务器的EJB EJB的调用既可以采用J EE 兼容的服务器通过Interoperable Inter ORB Protocol(IIOP)标准远程方法调用(remote method invocati cha138/Article/program/Java/JSP/201311/19304相关参考
在Oracle中使用Java存储过程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java存储
利用Java存储过程简化数据库操作 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 利用Java存
在Oracle中用java编写存储过程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Oracl
Java数据库程序中的存储过程设计 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文阐述了怎么
如何在Oracle数据库中使用Java存储过程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本
知识大全 Java/JSP中调用SQL Server存储过程完整示例
Java/JSP中调用SQLServer存储过程完整示例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
用hibernate操作数据库可以通过获取的session值调用connection()方法获取connection从而调用存储过程java调用存储过程什么是存储过程?存储过程是指保存在数据库并在数据
用存储过程创建数据表:创建时注意必须添加authidcurrent_user如果创建的表已存在存储过程继续执行但如不不加此关键语句存储过程将出现异常这个语句相当于赋权限例创建语句如下 复制代码代
如何用Java平台访问开源云存储? 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 尽管云计算这一
一介绍 在数据库的开发过程中经常会遇到复杂的业务逻辑和对数据库的操作这个时候就会用SP来封装数据库操作如果项目的SP较多书写又没有一定的规范将会影响以