无法通过jdbc连接到oracle db

时间:2013-07-10 00:37:01

标签: java oracle jdbc ide intellij-idea

对于那些愿意阅读的人,(跳到最后的简短版本):

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

我尝试安装64位的Oracle Instant Client(包括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

所以旅程继续,我尝试使用32位版本的ojdbc .dylibs和.jars但是当我尝试使用IntelliJ的DataSource视图连接到oracle db时,我遇到了“错误的架构”。

我想通过使用32位来保持一致,因为我的大多数应用都使用需要32位JVM的库。

tl; dr'rs:

- 不能通过IntelliJ Idea 12 DataSource视图连接到oracle db,也不能使用JDBC通过java app连接

-BackGround Info: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文件,这对我来说没有意义,因为数据库服务器在远程服务器上并且我使用/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笔记本电脑上连接。

2 个答案:

答案 0 :(得分:0)

我只能鼓励你使用oracle thin jdbc客户端。必须有一个非常具体的理由不这样做。有了这个,你可能没有任何问题。

答案 1 :(得分:0)

对于通过TNS获得的Intellij / DataGrip 2018 DB连接

const {nativeImage} = require('electron'); // ... let touchBarIcon = new TouchBarButton({ 'backgroundColor': '#000000', 'icon': nativeImage.createFromPath(path.join(__dirname, 'build/18x18@2x.png')).resize({ width: 16, height: 16, }), 'iconPosition': 'center', });

我在Oracle驱动程序版本11.2.0.4中发现了问题

我使用版本 12.1.0.2

获得“测试连接>成功”