插入Oracle數(shù)據(jù)的實際操作
我們今天主要和大家分享的是高級Oracle數(shù)據(jù)訪問控制,在Java存儲過程中是可以用來控制與限制對Oracle數(shù)據(jù)的相關(guān)訪問,其主要方法是只允許用戶通過存儲過程管理數(shù)據(jù),而存儲過程在其調(diào)用者的權(quán)限內(nèi)執(zhí)行,而不能對表本身進行訪問。
例如,你可以在特定時間內(nèi)禁止更新數(shù)據(jù),或者使管理者只具有查詢工資數(shù)據(jù)的權(quán)利,而不能進行更新,或者記錄所有的訪問并通知某一安全機構(gòu)。
原有應用程序與J2EE應用程序之間的數(shù)據(jù)邏輯共享
因為原有應用程序與J2EE應用程序都通過Call Spec調(diào)用存儲過程,所以J2EE和非J2EE應用程序可以共享相同的Oracle數(shù)據(jù)邏輯。由于有了Call Spec,所以不用考慮所用的是何種實現(xiàn)語言(無論是PL/SQL還是Java),該數(shù)據(jù)邏輯都可以共享。
為BMP實體Bean自動生成主關(guān)鍵字
在對EJB實體bean應用BMP時,一個bean實例可以由自動生成的與新插入的Oracle數(shù)據(jù)相關(guān)聯(lián)的主關(guān)鍵字惟一確定,它是ejbCreate()的返回值。可以利用一個插入相應數(shù)據(jù)的存儲過程在一個數(shù)據(jù)庫操作中檢索ejbCeater()中的該值,并檢索或計算主關(guān)鍵字。
作為另一種方法,也可以利用JDBC3.0的RETURN_GENERATED_KEYS特性,以一個SQL語句插入該數(shù)據(jù)并檢索相應的關(guān)鍵字(或ROWID)。但是,存儲過程方法在各個JDBC驅(qū)動器版本和數(shù)據(jù)庫之間更具可移植性。
可以用以下三個步驟實現(xiàn)這一模式:
創(chuàng)建一個Java存儲過程,在公共GenPk類中定義一個公共靜態(tài)Java方法insertAccount()。此方法將插入Oracle數(shù)據(jù)、計算惟一的關(guān)鍵字(通過發(fā)出一個序列號),并返回計算出的關(guān)鍵字作為主關(guān)鍵字。
定義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()內(nèi)調(diào)用存儲過程
- Public AccountPK ejbCreate(String ownerName, int balance)
throws CreateException { try { CallableStatement call =
conn.prepareCall
{ "{call insertAccount(?, ?, ?)}"}; return new AccountPK(accountID); } }
上述的相關(guān)內(nèi)容就是對高級Oracle數(shù)據(jù)訪問控制的部分內(nèi)容描述,希望會給你帶來一些幫助在此方面。
【編輯推薦】