对于那些愿意阅读的人,(短版跳到结尾):
我正在尝试将我的 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笔记本电脑上进行连接。