【问题标题】:Java : Io exception: The Network Adapter could not establish the connectionJava:Io异常:网络适配器无法建立连接
【发布时间】:2018-06-19 11:56:47
【问题描述】:

目前我正在尝试从 tomcat 服务器连接 Oracle 11g 数据库,但出现以下错误:

Caused by: java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:458)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:546)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:236)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:208)
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:154)
    at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:145)
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:205)
    at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:169)
    at org.flywaydb.core.internal.util.jdbc.JdbcUtils.openConnection(JdbcUtils.java:50)
    ... 34 more
Caused by: oracle.net.ns.NetException: The Network Adapter could not establish the connection
    at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:392)
    at oracle.net.resolver.AddrResolution.resolveAndExecute(AddrResolution.java:434)
    at oracle.net.ns.NSProtocol.establishConnection(NSProtocol.java:687)
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:247)
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1102)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:320)
    ... 45 more
Caused by: java.net.ConnectException: Connection timed out: connect
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.net.Socket.connect(Socket.java:589)
    at oracle.net.nt.TcpNTAdapter.connect(TcpNTAdapter.java:150)
    at oracle.net.nt.ConnOption.connect(ConnOption.java:133)
    at oracle.net.nt.ConnStrategy.execute(ConnStrategy.java:370)
    ... 50 more

我认为这可能是某种防火墙问题或数据库关闭问题。 所以我尝试通过 SQL Developer 连接,它工作正常。

我尝试通过运行以下 java 程序进行连接:

public class RunDB {

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
        Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@9.2.2.2:1521:ORCL", "user", "pwd");  
    }
}

仍然出现同样的错误:

Exception in thread "main" java.sql.SQLException: Io exception: The Network Adapter could not establish the connection
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:113)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:147)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:257)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:389)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:454)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:802)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql.DriverManager.getConnection(Unknown Source)
    at com.mkyong.test.RunDB.main(RunDB.java:13)

我正在使用 java 8 和 Spring Tool Suite ide。

我的 JVM 正在使用 IPv6 协议。

如果没有,有没有办法解决这个问题?

【问题讨论】:

  • 服务器已关闭,您的互联网已关闭,您的路由器阻止连接或您连接到错误的 ip 和/或端口
  • 但是我可以通过 Oracle SQL developer 连接。
  • Tomcat 是否与 SQL Developer 在同一台机器上运行?另外,您确定要 SID 版本或 URL,而不是服务名称版本(即以 /ORCL 而不是 :ORCL 结尾);如果在 IP 地址前加上// 有什么不同吗?
  • 尝试从 google 给出的前三个 URL 解决您的问题:oracle java io exception: The Network Adapter could not建立连接

标签: java oracle jdbc oracle-sqldeveloper


【解决方案1】:

最后我修复了这个问题,这个错误是由使用网络/oracle服务器不支持的IPv6协议的JVM引起的。

因为我在我的应用程序中使用 Tomcat 服务器,所以我在 tomcat 中添加了以下参数

-Djava.net.preferIPv4Stack=true

或者您可以将此参数添加为系统环境变量:

变量名称:_JAVA_OPTIONS

变量值:-Djava.net.preferIPv4Stack=true

【讨论】:

  • 我的情况不成功,无论如何,如何检查“我的 JVM 是否使用 IPv6 协议”?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
相关资源
最近更新 更多