一种Java存储过程简化数据库操作方法

文档序号:6346193阅读:134来源:国知局

专利名称::一种Java存储过程简化数据库操作方法
技术领域
:本发明涉及一种Java存储过程简化数据库操作方法,此技术主要是利用JAVA及数据库存储过程进行实现。
背景技术
:基于Java的存储过程如何帮助简化商务逻辑、提高其性能,并扩展数据库的功能。Oracle如何在数据库内启用基于Java的存储过程。Java存储过程如何访问数据,以及如何创建基本Java存储过程。选择PL/SQL还是Java在考虑Oracle存储过程时,可能会想到PL/SQL。Oracle已经在数据库中支持Java,从而为存储过程提供了不同于PL/SQL的开放式和可移植的方法。妨碍存储过程广泛采用的一个主要障碍是不同数据库厂商使用各种专有的、且依赖于数据库的实现语言。
发明内容基于上述问题,特此发明一种Java存储过程简化数据库操作方法;对于要求与SQL进行无缝集成的数据库中心来说则逻辑使用PL/SQL,从而完成对数据库对象、类型和特性的访问。出于与数据库的无关性考虑时,可以选择Java作为开放式的语言来取代PL/SQL,同时也为了集成和沟通SQL、XML、J2EE和Web服务等各个领域。任何数据库对话期都可以在第一Java代码调用时启动一个虚拟上专用的JVM,后续的用户可以使用这一已经存在的支持Java的会话期。事实上,所有会话共享同一JVM代码并保持"仅静态"的私有状态,而垃圾则收集在单个对话期空间内,从而为各个Java对话期提供了和SQL操作相同的对话期隔离和数据完整性能力。这里,不需要为了数据完整性而进行单独的Java支持的过程。这一基于对话期的结构提供了较小的内存占用率,并使OracleJVM具有与Oracle数据库一样的线性SMP可伸缩性。创建Java存储过程要将Java方法转换为Java存储过程需要几个步骤,包括:用1adjava实用程序将Java类加载到数据库中,利用调用规范(CallSpec)发布Java方法,将Java方法、参数类型和返回类型映射到其SQL的对应部分。具体实现方法将使用一个简单的Hello类,它有一个方法Hell0.worldO,返回字符串"Helloworld":publicclassHello{publicstaticStringworld(){return&quot;Helloworld";}}Loadjava实用程序,Loadjava是加载Java源文件、Java类文件和Java资源文件的实用程序,它可以用来验证字节码,并将Java类和JAR文件布置到数据库中。它既可以通过命令行调用,也可以通过包含于DBMSJAVA类中的1adjavaO方法调用。为了加载我们的Hello,class不例,输入:loadjava_userscott/tigerHello,class从0racle9i版本2开始,1adjava允许通过为包含在被处理的类中的方法创建相应的CallSpecs来自动将Java类发布为存储过程。Oracle为开发、测试、调试和布置Java存储过程提供了0racle9iJDeveloper。TheResolverSpec基于JDK的JVM在列于CLASSPATH中的目录中查找类引用,并对其进行解析。因为Oracle数据库类存在于数据库模式中,所以OracleJVM利用数据库解析器(resolver)通过列于ResolverSpec中的模式查找并解析类引用。与CLASSPATH不同(CLASSPATH可以应用于所有的类),ResoverSpec根据每类的情况进行应用。缺省解析器首先在加载类的模式中搜寻类,然后在公共同义词(publicsynonyms)中搜索。?loadjava-resolve<myclass>你可能需要指定不同的解析器,也可以在使用1adjava时强制进行解析,从而在布置时确定可能在以后运行时发生的任何问题。loadjava-resolve-resolver"((*SC0TT)(foo/bar/*OTHERS)(*PUBLIC))"CallSpec和存储过程调用为了从SQL中调用Java方法(以及从PL/SQ1和JDBC中调用),必须首先通过CallSpec发布公共静态方法,它为SQL定义方法采用的参数以及返回的SQL类型。在我们的例子中,我们将利用SQL*Plus连接到数据库,并为Hello,worldO定义一个顶级CallSpec:SQL>connectscott/tigerSQL>createorreplacefunctionhelloworldreturnVARCHAR2aslanguagejavaname’Hello,world()returnjava.lang.String’;/Functioncreated.可以像下面这样调用Java存储过程:SQL>variablemyStringvarchar2[20];SQL>callhelloworld()into:myString;Callcompleted.SQL>printmyString;MYSTRING---------------------HelloworldJava存储过程可以通过其CallSpec从以下各项中进行调用:SQLDML语句(INSERT,UPDATE、DELETE、SELECT、CALL、EXPLAINPLAN、LOCKTABLE和MERGE)、PL/SQL块、子程序、程序包以及数据库触发器。CallSpec的美妙之处在于存储过程实现可以从PL/SQL转换为Java,反之亦可,这一点对于请求者是透明的。CallSpec从实现语言中(PL/SQL或Java)中抽象出调用界面,因而使之能够在原有应用程序和新的基于Java/J2EE的应用程序之间共享商务逻辑。但是,在从Java客户程序调用在数据库驻留的Java类时,你可能不希望通过PL/SQL包装器(wrapper)。在以后的版本中,Oracle计划提供一种机制,它可以使开发人员略过CallSpec。高级数据访问控制Java存储过程可用于控制和限制对Oracle数据的访问,其方法是只允许用户通过存储过程管理数据,而存储过程在其调用者的权限内执行,而不能对表本身进行防问。为BMP实体Bean自动生成主关键字在对EJB实体bean应用BMP时,一个bean实例可以由自动生成的与新插入的数据相关联的主关键字惟一确定,它是ejbCreateO的返回值。可以利用一个插入相应数据的存储过程在一个数据库操作中检索ejbCeaterO中的该值,并检索或计算主关键字。作为另一种方法,也可以利用JDBC3.0的RETURN_GENERATED_KEYS特性,以一个SQL语句插入该数据并检索相应的关键字(或R0WID)。但是,存储过程方法在各个JDBC驱动器版本和数据库之间更具可移植性。可以用以下三个步骤实现这一模式;>创建一个Java存储过程,在公共GenPk类中定义一个公共静态Java方法insertAccountO。此方法将插入数据、计算惟一的关键字(通过发出一个序列号),并返回计算出的关键字作为主关键字。定义CallSpecCREATEORREPLACEPROCEDUREinsertAccount(ownerINvarchar,balINnumber,newidOUTnumber)ASLANGUAGEJAVANAME,GenPK.1nsertAccount(java.lang.String[])’;/在ejbCreateO内调用存储过程PublicAccountPKejbCreate(StringownerName,intbalance)throwsCreateException{try{CalIableStatementcall=conn.prepareCall{〃{callinsertAccount(,,)}"};returnnewAccountPK(accountID);}}为CMP实体Bean定制主关键字查找器查找器方法(Findermethods)用于检索已存在的EJB实体bean实例。主关键字查找器使你能够检索惟一标识的EJB实例。对于CMP实体bean,EJB容器根据声明描述,自动生成主关键字查找器findByPrimaryKeyO方法。但是,在某些情况下,可能需要更多的控制,例如可能需要专门的查找器,如findByStoredProcKeyO。在这些情况下,你可以结合使用Java存储过程和对象关系框架(如OracIe9i应用服务器TopLink)来实现定制的主关键字查找器方法。在将EJB查找器定义为REDIRECT或NAMED查找器后,TopLink将生成一个SQL查询用于检索bean实例。数据驱动的EJB调用在数据驱动体系结构中,商务逻辑调用可以作为数据库操作(如插入、更新或删除)的结果来触发。实现该数据逻辑的Java存储过程可以被声明为数据库触发器,用以调用运行于中间层J2EE应用服务器的EJB。EJB的调用既可以采用J2EE1.3兼容的服务器通过InteroperableInter-ORBProtocol(HOP)标准远程方法调用(remotemethodinvocation,RMI)实现,也可以通过销售商特定的传输协议(如0racle9iAS/0c4J的ORMI,或者通过BEAWebLogic的T3)用RMI来实现。每个应用服务器提供商在提供基于IIOP的RMI,以提供互操作性的同时,都有其自己优化的协议。0racle9iAS同时支持基于IIOP的RMI调用和基于ORMI协议的RMI调用。数据驱动的消息传送0racle9i数据库嵌入了AdvancedQueuing(AQ,高级排队),它是一种集成的、稳定、可靠、安全、可扩展和事务处理式的消息排队框架。Oracle通过标准的Java消息传送系统(JavaMessagingSystem,JMS)API为Java开发人员提供AQ功能。Java存储过程可以通过JMS接口调用AQ操作,从而能够实现快速、在会话期内、可扩展的、数据驱动的消息传送。Java存储过程可以利用JMS调用AQ操作。可以用以下4个步骤实现这一模式:创建并启动JMSQueue(为此,可以将以下一些操作嵌入SQL脚本内):executedbms_aqadm.create_queue_table(queue_table=>,queueIJ,queue_payload_type=>’SYS.AQ$_JMS_TEXT_MESSAGE,,comment=&gt;’atestqueue,,multiple_consumers=>false,compatible=>’8.1.0’);executedbms_aqadm.create_queue(queue_name=>’queueIJ,queue_table=>’queueIJ);executedbms_aqadm.start_queue(queue_name=>’queuel,);创建Java存储过程(代码摘录如下):publicstaticvoidrunTest(StringmsgBody){try{//getdatabaseconnectionora_drv=newOracleDriver();db_conn=ora_drv.defaultConnection();//setupsender(cfonlinecodesample)..//createmessages_msg=s_session.createTextMessage(msgBody);//sendmessagesender,send(s_msg);s_session.commit();//receivemessager_msg=(TextMessage)receiver,receive();r_session.commit()-J/outputmessagetextStringbody=r_msg.getText();System.0ut.println("messagewas,〃+body+〃,〃);..}}创建CallSpec:createorreplaceprocedurejmsproc(tlINVARCHAR)aslanguagejavaname,jmsSample.main(java.lang.String[]),;/调用存储过程:calljmsproc(’hello’);数据库辅助的Web发布(缓冲失效)各应用程序结构必须面对的一个共同问题是如果可靠地将数据库信息进行缓存,以提高整个系统的性能。JCACHE是一种即将公布的标准规范(JSR107),它可以解决这一问题。它说明了一种对Java对象临时在内存中进行缓存的方法,包括对象的创建、共享访问、假脱机(spooling)、失效、各JVM的一致性等。它可被用于缓存JSP内.在数据库中直接运行Java代码的一个妙处就在于要实现新的功能,只需要简单地加载代码或库,并利用CallSpec制作可用于SQL、PL/SQL、Java、J2EE和非JavaAPI的进入点(公共静态方法)。0racle9i数据库用户可以很容易地扩展数据库功能。Oracle自己利用这种能力来获得新的应用程序和工具包,如XMLDeveloperKits(XDKs)。沟通SQL、PL/SQL、Java、J2EE、.NET和XMLOracleXDK是用Java编写的,并将其公共方法可用作Java存储过程,从而扩展了数据库的XML可编程能力。SQL、PL/SQL、Java、J2EE和非JavaCNET)商务逻辑都能够访问XML分析器、XSLT处理器、XPath引擎和XMLSQLUtility(XSU)。XML分析器可以通过xmlparser和xmldom包进行访问。XSU是一种Java实用程序,它可以由SQL查询结果或JDBCResultSet生成XML文档,并将XML文档中的数据写入数据库表或视图中。利用XSU,XML输出可以输出为文本、Dom树或DTS。通过dbms_xmlquery和dbms_xmlsave包,XSU即可用于PL/SQL。权利要求1.一种Java存储过程简化数据库操作方法:该方法主要是利用JAVA及Oracle之间的储存过程进行简化操作方法。2.根据权利要求1的Java存储过程简化数据库操作方法,此方法主要对于要求与SQL进行无缝集成的数据库中心来说则逻辑使用PL/SQL,从而完成对数据库对象、类型和特性的访问。全文摘要一种Java存储过程简化数据库操作方法利用Java存储过程沟通SQL、XML、Java、J2EE和Web服务。存储过程(storedprocedure)允许将运行于数据库层中的持久性逻辑与运行于中间层中的商务逻辑有效地分离开来。这种分离可以降低整个应用程序的复杂性,并提供其重用性、安全性、性能和可伸缩性。但是,妨碍存储过程广泛采用的一个主要障碍是不同数据库厂商使用各种专有的、且依赖于数据库的实现语言。使用基于Java的存储过程可以解决这一问题。Oracle已经实现了ANSI标准,这些标准规定了从SQL中将静态Java方法作为过程或函数进行调用的能力。这种实现被简单地称作Java存储过程。文档编号G06F9/44GK103092587SQ20111034495公开日2013年5月8日申请日期2011年11月1日优先权日2011年11月1日发明者杨际荣申请人:镇江华扬信息科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1