知识大全 利用 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 invocation RMI) cha138/Article/program/Java/hx/201311/25942

相关参考

知识大全 如何通过hibernate调用存储过程

用hibernate操作数据库可以通过获取的session值调用connection()方法获取connection从而调用存储过程java调用存储过程什么是存储过程?存储过程是指保存在数据库并在数据

知识大全 Java数据库程序中的存储过程设计

Java数据库程序中的存储过程设计  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文阐述了怎么

知识大全 如何在Oracle数据库中使用Java存储过程

如何在Oracle数据库中使用Java存储过程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本

知识大全 使用存储过程都有哪些益处

  通过把处理封装在容易适应的单元中简化复杂的操作  由于不要求反复建立一系列处理步骤保证了数据的一致性如果所有开发人员和应用程序都使用同一存储过程则所使用的代码都是相同的  这一点的延伸就是防止错误

知识大全 在存储过程中连接远程数据库并进行操作

  我们有时候需要在本地数据库的存储过程中或者在其他SQL语句中要访问一个远程数据库我们可以这样做  在存储过程中连接远程数据库并进行操作  查看远程数据库的相关数据  SERVICE_NAME  两

知识大全 JSP数据库存储过程操作JDBC-ODBC-MSSQL

JSP数据库存储过程操作JDBC-ODBC-MSSQL  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 使用 Java 存储过程将更加简便

使用Java存储过程将更加简便  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  利用Java存储过

知识大全 存储过程编写经验和优化措施[1]

    一介绍  在数据库的开发过程中经常会遇到复杂的业务逻辑和对数据库的操作这个时候就会用SP来封装数据库操作如果项目的SP较多书写又没有一定的规范将会影响以

知识大全 利用Ruby简化你的Java测试(进阶篇)

利用Ruby简化你的Java测试(进阶篇)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文是

知识大全 动态创建MSSQL数据库表存储过程

动态创建MSSQL数据库表存储过程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  下面是利用SQ