自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Oracle Java存儲過程訪問異構數(shù)據(jù)庫的方案

數(shù)據(jù)庫 Oracle
下面的文章主要描述的是如何用Oracle Java的存儲過程來訪問異構數(shù)據(jù)庫的實際操作,其中包括硬件及操作系統(tǒng),以及數(shù)據(jù)庫環(huán)境等相關內容的介紹。

以下的文章主要介紹的是如何用Oracle Java的存儲過程來訪問異構數(shù)據(jù)庫的實際操作,我們都知道在通常的企業(yè)實際應用中,Oracle數(shù)據(jù)庫的類型可能會有多種,這些異構數(shù)據(jù)庫之間的互連往往成為某個應用的瓶頸。

解決的辦法有多種,一是透過應用程序作為橋梁,在異構數(shù)據(jù)庫之間牽線搭橋;二是數(shù)據(jù)庫廠商提供的解決方案,比如SQL Server的Link Server, Oracle的Transparent Gateway技術;三是 通過數(shù)據(jù)庫的應用擴展接口,例如Oracle的PL/SQL允許透過Java擴展訪問外部數(shù)據(jù)庫。

本文著眼于第三點,以Oracle連接SQL Server為例,探討如何利用Java編寫PL/SQL訪問SQL Server,這點對于那些需要在非WINDOWS平臺下訪問SQL Server的Oracle應用特別有意義。

本文中系統(tǒng)配置如下。

一、硬件及操作系統(tǒng)

Dell Intel Xeon Server + Windows2000 Server

二、數(shù)據(jù)庫環(huán)境

Oracle 8.1.7

三、安裝

欲使Oracle支持Java,必須在Oracle上安裝Jserver組件。在安裝Oracle軟件的時候,如果選擇典型安裝,Jserver是默認安裝的,如果選擇自定義安裝,記得選擇Jserver組件。還有另一種方法可以手工安裝Jserver.辦法是:

進入Oracle安裝目錄下的\javavm\install目錄,以sys用戶的身份執(zhí)行initjvm.sql,這個腳本會為數(shù)據(jù)庫配置一個Java運行環(huán)境,同時會把基本的java類庫裝載到數(shù)據(jù)庫中去。建議在執(zhí)行此腳本之前,先閱讀\javavm\readme.txt文件,里面包括安裝前對數(shù)據(jù)庫某些配置的必要修改的說明,以及對腳本執(zhí)行出錯的處理描述。

腳本執(zhí)行時間大約10分鐘,如果失敗可以重新執(zhí)行。

在腳本執(zhí)行完畢后,用DBA Studio工具可以看到多了Jserver這個東西。

四、權限賦予

要能在Oracle中執(zhí)行Java存儲過程,需要一個javauserpriv的角色,這個角色在安裝Jserver后會自動創(chuàng)建,將此角色賦給各個Oracle的使用賬號。

五、編寫Oracle Java存儲過程

1、 在本地機器上編寫一個Java類。

 

  1. public class TEST  
  2. {  
  3. public static void main (String args[])   
  4. {  
  5. System.out.println("HELLO THIS iS A JAVA PROCEDURE");  
  6. }  
  7. }  
  8. <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 

2、 用loadjava指令將寫好的java類文件上傳到數(shù)據(jù)庫中。

例如:C:\>loadjava –u test/oracle@mytest -o –v –r d:\TEST.java

當然,除了上載.java文件,也可以上載.class/.jar/.properties文件,上載后的文件在數(shù)據(jù)庫中會以Object的形式存在.

文件若有改動,可以重新上載,會將以前的版本覆蓋掉。

3、 生成聲明接口

上載的java類需要發(fā)布成一個可供調用的接口,這些接口可以是Store Procesure/Trrigger/Function 等。

  1. SQL>create or replace procedure test_java   
  2. as language java   
  3. name 'TEST.main(java.lang.String[])';  

4、 測試

  1. SQL> set serveroutput on size 5000  
  2. SQL> call dbms_java.set_output(5000); 

調用完成。

  1. SQL> execute test_java;  
  2. HELLO THIS iS A JAVA PROCEDURE 

PL/SQL 過程已成功完成。

  1. SQL> call test_java();  
  2. HELLO THIS iS A JAVA PROCEDURE 

調用完成。

5、 以上是一個簡單的java 類,其實如果要在Oracle中訪問到非Oracle的數(shù)據(jù)庫,只

要在java 類中實現(xiàn)訪問非Oracle數(shù)據(jù)庫就可以了。

 

  1. public static String getStringFomSql(){  
  2. String strResult ="";  
  3. Connection conn = null;  
  4. Statement stmt = null;  
  5. ResultSet rs = null;  
  6. try {  
  7. Class.forName("com.inet.tds.TdsDriver").newInstance();   
  8. String url="jdbc:inetdae7:10.24.09.192:1433?database=pubs";   

 

pubs為你的數(shù)據(jù)庫的

 

  1. String user="sa";   
  2. String password="123";   
  3. connDriverManager.getConnection(url,user,password);   
  4. String sql="select top 1 dtype,dname from test";   
  5. stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);   
  6. rs=stmt.executeQuery(sql);   
  7. if( rs.next()){  
  8. strResult = "The result from sql server is:dtype->" + rs.getString("dtype") + " dname->" + rs.getString("dname");  
  9. }  
  10. } catch (InstantiationException e) {  
  11. TODO Auto-generated catch block  
  12. e.printStackTrace();  
  13. strResult = "operator fail in InstantiationException";  
  14. } catch (IllegalAccessException e) {  
  15. TODO Auto-generated catch block  
  16. e.printStackTrace();  
  17. strResult = "operator fail in IllegalAccessException";  
  18. } catch (ClassNotFoundException e) {  
  19. TODO Auto-generated catch block  
  20. e.printStackTrace();  
  21. strResult = "operator fail in ClassNotFoundException";  
  22. } catch (SQLException e) {  
  23. TODO Auto-generated catch block  
  24. e.printStackTrace();  
  25. strResult = "operator fail in SQLException";  
  26. }  
  27. finally{  
  28. try {  
  29. rs.close();  
  30. conn.close();  
  31. } catch (SQLException e1) {  
  32. e1.printStackTrace();  
  33. }  
  34. }  
  35. return strResult;  
  36. }  

 


值得注意的一點是,通過java存儲訪問SQL Server,如果返回一個結果集,在9i以下的Oracle版本是沒有對應的數(shù)據(jù)類型可以轉換的,一個可以變通的辦法是要么返回一個字符串,要么將返回的結果集存放到Oracle中的表里。這樣做是為了方便那些非Windows平臺下無法直接訪問SQL Server的程序。

六、外部程序調用Oracle java存儲過程

調用java存儲過程的方法跟調用一般的Oracle Java存儲過程的方法是一樣的.

【編輯推薦】

  1. Oracle11g認證考試的3個主要途徑
  2. Oracle數(shù)據(jù)庫中3種常用的關閉方式
  3. Oracle數(shù)據(jù)庫中經(jīng)常使用的啟動方式介紹
  4. 用觸發(fā)器實現(xiàn)Oracle操作日志
  5. Oracle數(shù)據(jù)庫堪稱是重量級的緣由
     
責任編輯:佚名 來源: 博客園
相關推薦

2011-08-12 13:18:30

Oracle數(shù)據(jù)庫存儲過程

2010-10-26 14:40:31

oracle存儲過程

2011-05-17 15:30:27

Oracle數(shù)據(jù)庫ADO

2010-04-16 14:10:56

Oracle數(shù)據(jù)庫

2011-08-23 10:02:26

Oracle數(shù)據(jù)庫存儲過程掛死

2010-04-14 10:56:07

Oracle數(shù)據(jù)庫

2010-04-16 16:09:41

Oracle數(shù)據(jù)庫

2010-04-16 13:53:23

Oracle數(shù)據(jù)庫

2010-04-19 09:26:04

Oracle數(shù)據(jù)庫

2010-04-22 12:56:48

Oracle數(shù)據(jù)庫

2010-04-19 10:00:02

Oracle SQL

2010-04-14 15:45:49

Oracle 數(shù)據(jù)庫

2011-04-13 14:07:17

OracleSybase數(shù)據(jù)庫

2011-07-19 17:06:33

Oracle數(shù)據(jù)庫自動增長列

2009-03-09 17:46:16

ASP.NETSQLOracle

2011-06-03 10:50:27

Java

2010-10-26 14:19:04

oracle存儲過程

2010-10-26 14:27:30

oracle存儲過程

2010-04-16 13:46:47

Oracle數(shù)據(jù)庫

2010-11-19 10:38:26

Oracle XE自帶
點贊
收藏

51CTO技術棧公眾號