欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種Java存儲(chǔ)過程簡化數(shù)據(jù)庫操作方法

文檔序號(hào):6346193閱讀:151來源:國知局

專利名稱::一種Java存儲(chǔ)過程簡化數(shù)據(jù)庫操作方法
技術(shù)領(lǐng)域
:本發(fā)明涉及一種Java存儲(chǔ)過程簡化數(shù)據(jù)庫操作方法,此技術(shù)主要是利用JAVA及數(shù)據(jù)庫存儲(chǔ)過程進(jìn)行實(shí)現(xiàn)。
背景技術(shù)
:基于Java的存儲(chǔ)過程如何幫助簡化商務(wù)邏輯、提高其性能,并擴(kuò)展數(shù)據(jù)庫的功能。Oracle如何在數(shù)據(jù)庫內(nèi)啟用基于Java的存儲(chǔ)過程。Java存儲(chǔ)過程如何訪問數(shù)據(jù),以及如何創(chuàng)建基本Java存儲(chǔ)過程。選擇PL/SQL還是Java在考慮Oracle存儲(chǔ)過程時(shí),可能會(huì)想到PL/SQL。Oracle已經(jīng)在數(shù)據(jù)庫中支持Java,從而為存儲(chǔ)過程提供了不同于PL/SQL的開放式和可移植的方法。妨礙存儲(chǔ)過程廣泛采用的一個(gè)主要障礙是不同數(shù)據(jù)庫廠商使用各種專有的、且依賴于數(shù)據(jù)庫的實(shí)現(xiàn)語言。
發(fā)明內(nèi)容基于上述問題,特此發(fā)明一種Java存儲(chǔ)過程簡化數(shù)據(jù)庫操作方法;對于要求與SQL進(jìn)行無縫集成的數(shù)據(jù)庫中心來說則邏輯使用PL/SQL,從而完成對數(shù)據(jù)庫對象、類型和特性的訪問。出于與數(shù)據(jù)庫的無關(guān)性考慮時(shí),可以選擇Java作為開放式的語言來取代PL/SQL,同時(shí)也為了集成和溝通SQL、XML、J2EE和Web服務(wù)等各個(gè)領(lǐng)域。任何數(shù)據(jù)庫對話期都可以在第一Java代碼調(diào)用時(shí)啟動(dòng)一個(gè)虛擬上專用的JVM,后續(xù)的用戶可以使用這一已經(jīng)存在的支持Java的會(huì)話期。事實(shí)上,所有會(huì)話共享同一JVM代碼并保持"僅靜態(tài)"的私有狀態(tài),而垃圾則收集在單個(gè)對話期空間內(nèi),從而為各個(gè)Java對話期提供了和SQL操作相同的對話期隔離和數(shù)據(jù)完整性能力。這里,不需要為了數(shù)據(jù)完整性而進(jìn)行單獨(dú)的Java支持的過程。這一基于對話期的結(jié)構(gòu)提供了較小的內(nèi)存占用率,并使OracleJVM具有與Oracle數(shù)據(jù)庫一樣的線性SMP可伸縮性。創(chuàng)建Java存儲(chǔ)過程要將Java方法轉(zhuǎn)換為Java存儲(chǔ)過程需要幾個(gè)步驟,包括:用1adjava實(shí)用程序?qū)ava類加載到數(shù)據(jù)庫中,利用調(diào)用規(guī)范(CallSpec)發(fā)布Java方法,將Java方法、參數(shù)類型和返回類型映射到其SQL的對應(yīng)部分。具體實(shí)現(xiàn)方法將使用一個(gè)簡單的Hello類,它有一個(gè)方法Hell0.worldO,返回字符串"Helloworld":publicclassHello{publicstaticStringworld(){return&quot;Helloworld";}}Loadjava實(shí)用程序,Loadjava是加載Java源文件、Java類文件和Java資源文件的實(shí)用程序,它可以用來驗(yàn)證字節(jié)碼,并將Java類和JAR文件布置到數(shù)據(jù)庫中。它既可以通過命令行調(diào)用,也可以通過包含于DBMSJAVA類中的1adjavaO方法調(diào)用。為了加載我們的Hello,class不例,輸入:loadjava_userscott/tigerHello,class從0racle9i版本2開始,1adjava允許通過為包含在被處理的類中的方法創(chuàng)建相應(yīng)的CallSpecs來自動(dòng)將Java類發(fā)布為存儲(chǔ)過程。Oracle為開發(fā)、測試、調(diào)試和布置Java存儲(chǔ)過程提供了0racle9iJDeveloper。TheResolverSpec基于JDK的JVM在列于CLASSPATH中的目錄中查找類引用,并對其進(jìn)行解析。因?yàn)镺racle數(shù)據(jù)庫類存在于數(shù)據(jù)庫模式中,所以O(shè)racleJVM利用數(shù)據(jù)庫解析器(resolver)通過列于ResolverSpec中的模式查找并解析類引用。與CLASSPATH不同(CLASSPATH可以應(yīng)用于所有的類),ResoverSpec根據(jù)每類的情況進(jìn)行應(yīng)用。缺省解析器首先在加載類的模式中搜尋類,然后在公共同義詞(publicsynonyms)中搜索。?loadjava-resolve<myclass>你可能需要指定不同的解析器,也可以在使用1adjava時(shí)強(qiáng)制進(jìn)行解析,從而在布置時(shí)確定可能在以后運(yùn)行時(shí)發(fā)生的任何問題。loadjava-resolve-resolver"((*SC0TT)(foo/bar/*OTHERS)(*PUBLIC))"CallSpec和存儲(chǔ)過程調(diào)用為了從SQL中調(diào)用Java方法(以及從PL/SQ1和JDBC中調(diào)用),必須首先通過CallSpec發(fā)布公共靜態(tài)方法,它為SQL定義方法采用的參數(shù)以及返回的SQL類型。在我們的例子中,我們將利用SQL*Plus連接到數(shù)據(jù)庫,并為Hello,worldO定義一個(gè)頂級(jí)CallSpec:SQL>connectscott/tigerSQL>createorreplacefunctionhelloworldreturnVARCHAR2aslanguagejavaname’Hello,world()returnjava.lang.String’;/Functioncreated.可以像下面這樣調(diào)用Java存儲(chǔ)過程:SQL>variablemyStringvarchar2[20];SQL>callhelloworld()into:myString;Callcompleted.SQL>printmyString;MYSTRING---------------------HelloworldJava存儲(chǔ)過程可以通過其CallSpec從以下各項(xiàng)中進(jìn)行調(diào)用:SQLDML語句(INSERT,UPDATE、DELETE、SELECT、CALL、EXPLAINPLAN、LOCKTABLE和MERGE)、PL/SQL塊、子程序、程序包以及數(shù)據(jù)庫觸發(fā)器。CallSpec的美妙之處在于存儲(chǔ)過程實(shí)現(xiàn)可以從PL/SQL轉(zhuǎn)換為Java,反之亦可,這一點(diǎn)對于請求者是透明的。CallSpec從實(shí)現(xiàn)語言中(PL/SQL或Java)中抽象出調(diào)用界面,因而使之能夠在原有應(yīng)用程序和新的基于Java/J2EE的應(yīng)用程序之間共享商務(wù)邏輯。但是,在從Java客戶程序調(diào)用在數(shù)據(jù)庫駐留的Java類時(shí),你可能不希望通過PL/SQL包裝器(wrapper)。在以后的版本中,Oracle計(jì)劃提供一種機(jī)制,它可以使開發(fā)人員略過CallSpec。高級(jí)數(shù)據(jù)訪問控制Java存儲(chǔ)過程可用于控制和限制對Oracle數(shù)據(jù)的訪問,其方法是只允許用戶通過存儲(chǔ)過程管理數(shù)據(jù),而存儲(chǔ)過程在其調(diào)用者的權(quán)限內(nèi)執(zhí)行,而不能對表本身進(jìn)行防問。為BMP實(shí)體Bean自動(dòng)生成主關(guān)鍵字在對EJB實(shí)體bean應(yīng)用BMP時(shí),一個(gè)bean實(shí)例可以由自動(dòng)生成的與新插入的數(shù)據(jù)相關(guān)聯(lián)的主關(guān)鍵字惟一確定,它是ejbCreateO的返回值??梢岳靡粋€(gè)插入相應(yīng)數(shù)據(jù)的存儲(chǔ)過程在一個(gè)數(shù)據(jù)庫操作中檢索ejbCeaterO中的該值,并檢索或計(jì)算主關(guān)鍵字。作為另一種方法,也可以利用JDBC3.0的RETURN_GENERATED_KEYS特性,以一個(gè)SQL語句插入該數(shù)據(jù)并檢索相應(yīng)的關(guān)鍵字(或R0WID)。但是,存儲(chǔ)過程方法在各個(gè)JDBC驅(qū)動(dòng)器版本和數(shù)據(jù)庫之間更具可移植性??梢杂靡韵氯齻€(gè)步驟實(shí)現(xiàn)這一模式;>創(chuàng)建一個(gè)Java存儲(chǔ)過程,在公共GenPk類中定義一個(gè)公共靜態(tài)Java方法insertAccountO。此方法將插入數(shù)據(jù)、計(jì)算惟一的關(guān)鍵字(通過發(fā)出一個(gè)序列號(hào)),并返回計(jì)算出的關(guān)鍵字作為主關(guān)鍵字。定義CallSpecCREATEORREPLACEPROCEDUREinsertAccount(ownerINvarchar,balINnumber,newidOUTnumber)ASLANGUAGEJAVANAME,GenPK.1nsertAccount(java.lang.String[])’;/在ejbCreateO內(nèi)調(diào)用存儲(chǔ)過程PublicAccountPKejbCreate(StringownerName,intbalance)throwsCreateException{try{CalIableStatementcall=conn.prepareCall{〃{callinsertAccount(,,)}"};returnnewAccountPK(accountID);}}為CMP實(shí)體Bean定制主關(guān)鍵字查找器查找器方法(Findermethods)用于檢索已存在的EJB實(shí)體bean實(shí)例。主關(guān)鍵字查找器使你能夠檢索惟一標(biāo)識(shí)的EJB實(shí)例。對于CMP實(shí)體bean,EJB容器根據(jù)聲明描述,自動(dòng)生成主關(guān)鍵字查找器findByPrimaryKeyO方法。但是,在某些情況下,可能需要更多的控制,例如可能需要專門的查找器,如findByStoredProcKeyO。在這些情況下,你可以結(jié)合使用Java存儲(chǔ)過程和對象關(guān)系框架(如OracIe9i應(yīng)用服務(wù)器TopLink)來實(shí)現(xiàn)定制的主關(guān)鍵字查找器方法。在將EJB查找器定義為REDIRECT或NAMED查找器后,TopLink將生成一個(gè)SQL查詢用于檢索bean實(shí)例。數(shù)據(jù)驅(qū)動(dòng)的EJB調(diào)用在數(shù)據(jù)驅(qū)動(dòng)體系結(jié)構(gòu)中,商務(wù)邏輯調(diào)用可以作為數(shù)據(jù)庫操作(如插入、更新或刪除)的結(jié)果來觸發(fā)。實(shí)現(xiàn)該數(shù)據(jù)邏輯的Java存儲(chǔ)過程可以被聲明為數(shù)據(jù)庫觸發(fā)器,用以調(diào)用運(yùn)行于中間層J2EE應(yīng)用服務(wù)器的EJB。EJB的調(diào)用既可以采用J2EE1.3兼容的服務(wù)器通過InteroperableInter-ORBProtocol(HOP)標(biāo)準(zhǔn)遠(yuǎn)程方法調(diào)用(remotemethodinvocation,RMI)實(shí)現(xiàn),也可以通過銷售商特定的傳輸協(xié)議(如0racle9iAS/0c4J的ORMI,或者通過BEAWebLogic的T3)用RMI來實(shí)現(xiàn)。每個(gè)應(yīng)用服務(wù)器提供商在提供基于IIOP的RMI,以提供互操作性的同時(shí),都有其自己優(yōu)化的協(xié)議。0racle9iAS同時(shí)支持基于IIOP的RMI調(diào)用和基于ORMI協(xié)議的RMI調(diào)用。數(shù)據(jù)驅(qū)動(dòng)的消息傳送0racle9i數(shù)據(jù)庫嵌入了AdvancedQueuing(AQ,高級(jí)排隊(duì)),它是一種集成的、穩(wěn)定、可靠、安全、可擴(kuò)展和事務(wù)處理式的消息排隊(duì)框架。Oracle通過標(biāo)準(zhǔn)的Java消息傳送系統(tǒng)(JavaMessagingSystem,JMS)API為Java開發(fā)人員提供AQ功能。Java存儲(chǔ)過程可以通過JMS接口調(diào)用AQ操作,從而能夠?qū)崿F(xiàn)快速、在會(huì)話期內(nèi)、可擴(kuò)展的、數(shù)據(jù)驅(qū)動(dòng)的消息傳送。Java存儲(chǔ)過程可以利用JMS調(diào)用AQ操作??梢杂靡韵?個(gè)步驟實(shí)現(xiàn)這一模式:創(chuàng)建并啟動(dòng)JMSQueue(為此,可以將以下一些操作嵌入SQL腳本內(nèi)):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,);創(chuàng)建Java存儲(chǔ)過程(代碼摘錄如下):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+〃,〃);..}}創(chuàng)建CallSpec:createorreplaceprocedurejmsproc(tlINVARCHAR)aslanguagejavaname,jmsSample.main(java.lang.String[]),;/調(diào)用存儲(chǔ)過程:calljmsproc(’hello’);數(shù)據(jù)庫輔助的Web發(fā)布(緩沖失效)各應(yīng)用程序結(jié)構(gòu)必須面對的一個(gè)共同問題是如果可靠地將數(shù)據(jù)庫信息進(jìn)行緩存,以提高整個(gè)系統(tǒng)的性能。JCACHE是一種即將公布的標(biāo)準(zhǔn)規(guī)范(JSR107),它可以解決這一問題。它說明了一種對Java對象臨時(shí)在內(nèi)存中進(jìn)行緩存的方法,包括對象的創(chuàng)建、共享訪問、假脫機(jī)(spooling)、失效、各JVM的一致性等。它可被用于緩存JSP內(nèi).在數(shù)據(jù)庫中直接運(yùn)行Java代碼的一個(gè)妙處就在于要實(shí)現(xiàn)新的功能,只需要簡單地加載代碼或庫,并利用CallSpec制作可用于SQL、PL/SQL、Java、J2EE和非JavaAPI的進(jìn)入點(diǎn)(公共靜態(tài)方法)。0racle9i數(shù)據(jù)庫用戶可以很容易地?cái)U(kuò)展數(shù)據(jù)庫功能。Oracle自己利用這種能力來獲得新的應(yīng)用程序和工具包,如XMLDeveloperKits(XDKs)。溝通SQL、PL/SQL、Java、J2EE、.NET和XMLOracleXDK是用Java編寫的,并將其公共方法可用作Java存儲(chǔ)過程,從而擴(kuò)展了數(shù)據(jù)庫的XML可編程能力。SQL、PL/SQL、Java、J2EE和非JavaCNET)商務(wù)邏輯都能夠訪問XML分析器、XSLT處理器、XPath引擎和XMLSQLUtility(XSU)。XML分析器可以通過xmlparser和xmldom包進(jìn)行訪問。XSU是一種Java實(shí)用程序,它可以由SQL查詢結(jié)果或JDBCResultSet生成XML文檔,并將XML文檔中的數(shù)據(jù)寫入數(shù)據(jù)庫表或視圖中。利用XSU,XML輸出可以輸出為文本、Dom樹或DTS。通過dbms_xmlquery和dbms_xmlsave包,XSU即可用于PL/SQL。權(quán)利要求1.一種Java存儲(chǔ)過程簡化數(shù)據(jù)庫操作方法:該方法主要是利用JAVA及Oracle之間的儲(chǔ)存過程進(jìn)行簡化操作方法。2.根據(jù)權(quán)利要求1的Java存儲(chǔ)過程簡化數(shù)據(jù)庫操作方法,此方法主要對于要求與SQL進(jìn)行無縫集成的數(shù)據(jù)庫中心來說則邏輯使用PL/SQL,從而完成對數(shù)據(jù)庫對象、類型和特性的訪問。全文摘要一種Java存儲(chǔ)過程簡化數(shù)據(jù)庫操作方法利用Java存儲(chǔ)過程溝通SQL、XML、Java、J2EE和Web服務(wù)。存儲(chǔ)過程(storedprocedure)允許將運(yùn)行于數(shù)據(jù)庫層中的持久性邏輯與運(yùn)行于中間層中的商務(wù)邏輯有效地分離開來。這種分離可以降低整個(gè)應(yīng)用程序的復(fù)雜性,并提供其重用性、安全性、性能和可伸縮性。但是,妨礙存儲(chǔ)過程廣泛采用的一個(gè)主要障礙是不同數(shù)據(jù)庫廠商使用各種專有的、且依賴于數(shù)據(jù)庫的實(shí)現(xiàn)語言。使用基于Java的存儲(chǔ)過程可以解決這一問題。Oracle已經(jīng)實(shí)現(xiàn)了ANSI標(biāo)準(zhǔn),這些標(biāo)準(zhǔn)規(guī)定了從SQL中將靜態(tài)Java方法作為過程或函數(shù)進(jìn)行調(diào)用的能力。這種實(shí)現(xiàn)被簡單地稱作Java存儲(chǔ)過程。文檔編號(hào)G06F9/44GK103092587SQ20111034495公開日2013年5月8日申請日期2011年11月1日優(yōu)先權(quán)日2011年11月1日發(fā)明者楊際榮申請人:鎮(zhèn)江華揚(yáng)信息科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
休宁县| 呼和浩特市| 多伦县| 册亨县| 宜宾县| 宁安市| 怀远县| 闻喜县| 中牟县| 宝丰县| 宁津县| 凉山| 山东省| 永顺县| 明光市| 葵青区| 奈曼旗| 神池县| 肃宁县| 河西区| 灌云县| 盘山县| 三门县| 宁津县| 方山县| 黑水县| 阿拉善左旗| 永胜县| 格尔木市| 麟游县| 汶川县| 三台县| 师宗县| 威信县| 武山县| 田阳县| 丰原市| 都兰县| 上蔡县| 富民县| 三原县|