2013-07-10 117 views
0

對於那些誰願意讀一些連接到Oracle數據庫,(跳到結束對短版):麻煩通過ojdbc

我想我的Java應用程序連接到遠程Oracle數據庫。沒有運氣我正在使用IntelliJ Idea 12的Mac 10.7.5,Java版本「1.6.0_51」64位。我一直試圖整天沒有成功地完成這項工作。我也無法使用IntelliJ中的'DataSource'視圖,因爲缺少java.library.path中的共享dylib。我懷疑這兩個問題是相關的。

我嘗試安裝Oracle即時客戶端64位(包括JDBC文件),複製dylibs到/ usr/lib目錄/ java和這個讓我接近與一個不同的錯誤解決「數據源」的觀點的問題:

java.lang.RuntimeException: java.rmi.UnmarshalException: Error unmarshaling return header; nested exception is: 
    java.io.EOFException 
    in RemoteUtil$RemoteInvocationHandler.invoke(RemoteUtil.java:219) 
    at com.sun.proxy.$Proxy115.connect(Unknown Source) 
    in LocalDataSource.getConnection(LocalDataSource.java:158) 
Caused by: java.rmi.UnmarshalException: Error unmarshaling return header; nested exception is: 
    java.io.EOFException 
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:209) 
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142) 
    at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:178) 
    at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132) 
    at com.sun.proxy.$Proxy114.connect(Unknown Source) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    in RemoteUtil$RemoteInvocationHandler.invoke(RemoteUtil.java:211) 
    ... 21 more 
Caused by: java.io.EOFException 
    at java.io.DataInputStream.readByte(DataInputStream.java:250) 
    at sun.rmi.transport.StreamRemoteCall.executeCal 

因此,繼續旅程,我嘗試使用32位版本的ojdbc .dylibs和.jars,但後來嘗試使用IntelliJ的DataSource視圖連接到Oracle數據庫時遇到了「錯誤的體系結構」。

我想通過使用32位保持一致性,因爲我的大多數應用程序都使用需要32位JVM的庫。

TL;博士的ERS:

-Cannot通過IntelliJ IDEA的12數據源視圖連接Oracle分貝也不通過Java應用程序中使用JDBC

連接-Background信息:Mac OSX上10.7.5,爪哇1.6。 0_51 64位,IntelliJ IDEA的12,遠程Oracle 11G數據庫

-Tried Oracle即時客戶端與JDBC文件32位和64位版本,沒有運氣

任何建議,將不勝感激! 謝謝

附加說明:我無法通過sqlplus連接;我得到錯誤ORA-21561:OID生成失敗。搜索結果只指向修復/ etc/hosts文件,這對我來說沒有任何意義,因爲db服務器位於遠程服務器上,而我使用/etc/tnsnames.ora中的TNS條目進行連接

===更新1 === 我通過java代碼連接取得了一些進展。使用此代碼:

Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); 
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@hostname:port/service_name", "user", "password"); 

,但收到的錯誤:

java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection 

我可以連接通過Eclipse IDE中卻沒有關於我的Mac筆記本電腦使用這個代碼確切一塊我的工作機器。

+0

您發佈的錯誤似乎與Oracle沒有任何關係。它看起來像你的Oralce部分工作,並在代碼的另一部分發生了完全不同的錯誤。 –

+0

我發佈的錯誤似乎與不穩定的64位ojdbc .dylib文件有關。我想堅持使用32位,但是當我嘗試使用32位ojdbc庫和罐子時,出現錯誤'mach-o,但是錯誤的體系結構' –

+0

嘗試使用jdbc:oracle:thin:@hostname:port:sid或jdbc :oracle:thin:@ // host:port/serviceName並且記得在你的類路徑中只有瘦驅動程序 –

回答

-1

除非您有充分理由不使用oracle瘦客戶機,否則您最好使用它。這樣你就沒有問題了。

+0

使用瘦驅動程序沒有什麼區別,因爲我在DriverManager.getConnection(...獲得nullpointerexception ... )當相同的代碼在我的桌面上工作 –

+0

它可以有所作爲,顯示代碼,你在哪裏得到連接 –

+0

嘿@大衛,看到我的更新文章 –