0

少し読みたい人のために、(短いバージョンのために最後までスキップしてください):

Java アプリケーションをリモートの Oracle データベースに接続しようとしています。運が悪かったので、IntelliJ Idea 12、Java バージョン「1.6.0_51」64 ビットで Mac 10.7.5 を使用しています。私は一日中この仕事をしようとしてきましたが、成功しませんでした。また、java.library.path に共有 dylib がないため、IntelliJ で「DataSource」ビューを使用できませんでした。2つの問題が関連していると思われます。

Oracle Instant Client 64 ビット (jdbc ファイルを含む) をインストールしてみました。dylib を /usr/lib/java にコピーしました。これにより、別のエラーで「DataSource」ビューの問題を解決することができました。

    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

そのため、旅は続き、ojdbc .dylibs と .jars の 32 ビット バージョンを使用しようとしましたが、IntelliJ の DataSource ビューを使用して oracle db に接続しようとすると、「間違ったアーキテクチャ」に遭遇しました。

私のアプリのほとんどは 32 ビット JVM を必要とするライブラリを使用しているため、32 ビットを使用してすべての一貫性を保ちたいと考えています。

tl;dr 'ers:

- IntelliJ Idea 12 DataSource ビューを介して oracle db に接続することも、JDBC を使用して Java アプリを介して接続することもできません

-背景情報: Mac OSX 10.7.5、Java 1.6.0_51 64 ビット、IntelliJ Idea 12、リモート Oracle 11G DB

- jdbc ファイルを使用して 32 ビットと 64 ビットの両方のバージョンの Oracle Instant Client を試しましたが、うまくいきませんでした

どんな提案でも大歓迎です!ありがとうございました

追記事項: sqlplus 経由でも接続できません。エラー ORA-21561: OID の生成に失敗しました。検索結果は、db サーバーがリモート サーバー上にあり、/etc/tnsnames.ora の TNS エントリを使用して接続しているため、意味をなさない /etc/hosts ファイルの修正のみを示しています。

===UPDATE 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 ラップトップでは接続できません。

4

2 に答える 2

0

オラクルのシン JDBC クライアントを使用することをお勧めします。やらない具体的な理由があるはずです。これで、おそらく問題はありません。

于 2013-07-10T01:23:28.847 に答える
0

TNSを介したIntellij/DataGrip 2018 DB接続の場合、取得しました

[08006][17002] IO Error: Invalid connection string format, a valid format is: "host:port:sid"

問題は Oracle ドライバーのバージョン: 11.2.0.4 にあります。

バージョン12.1.0.2を使用すると、「接続のテスト > 成功」と表示されます

于 2019-01-23T14:29:44.557 に答える