0

对于那些愿意阅读的人,(短版跳到结尾):

我正在尝试将我的 java 应用程序连接到远程 oracle 数据库。没有运气,我正在使用 Mac 10.7.5 和 IntelliJ Idea 12,java 版本“1.6.0_51”64 位。我整天都在努力完成这项工作,但没有成功。由于 java.library.path 中缺少共享 dylib,我也无法在 IntelliJ 中使用“DataSource”视图。我怀疑这两个问题是相关的。

我尝试安装 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 位来保持一切一致,因为我的大多数应用程序都使用需要 32 位 JVM 的库。

tl;博士:

- 无法通过 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 生成失败。搜索结果仅指向修复 /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笔记本电脑上进行连接。

4

2 回答 2

0

我只能鼓励您使用 oracle 瘦 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 回答