日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
OracleJava存儲(chǔ)過程訪問異構(gòu)數(shù)據(jù)庫的方案

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

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

本文著眼于第三點(diǎn),以O(shè)racle連接SQL Server為例,探討如何利用Java編寫PL/SQL訪問SQL Server,這點(diǎn)對(duì)于那些需要在非WINDOWS平臺(tái)下訪問SQL Server的Oracle應(yīng)用特別有意義。

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

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

Dell Intel Xeon Server + Windows2000 Server

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

Oracle 8.1.7

三、安裝

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

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

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

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

四、權(quán)限賦予

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

五、編寫Oracle Java存儲(chǔ)過程

1、 在本地機(jī)器上編寫一個(gè)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.  

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

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

當(dāng)然,除了上載.java文件,也可以上載.class/.jar/.properties文件,上載后的文件在數(shù)據(jù)庫中會(huì)以O(shè)bject的形式存在.

文件若有改動(dòng),可以重新上載,會(huì)將以前的版本覆蓋掉。

3、 生成聲明接口

上載的java類需要發(fā)布成一個(gè)可供調(diào)用的接口,這些接口可以是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); 

調(diào)用完成。

 
 
 
  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 

調(diào)用完成。

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

要在java 類中實(shí)現(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. conn= DriverManager.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. }  

 

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

六、外部程序調(diào)用Oracle java存儲(chǔ)過程

調(diào)用java存儲(chǔ)過程的方法跟調(diào)用一般的Oracle Java存儲(chǔ)過程的方法是一樣的.


文章題目:OracleJava存儲(chǔ)過程訪問異構(gòu)數(shù)據(jù)庫的方案
網(wǎng)站網(wǎng)址:http://www.5511xx.com/article/cdhodie.html