Java 与Oracle DB连接时,网络适配器无法建立连接

Java 与Oracle DB连接时,网络适配器无法建立连接,java,oracle,exception,jdbc,Java,Oracle,Exception,Jdbc,尝试通过JDBC连接远程Oracle数据库时,我收到以下异常: java.sql.SQLRecoverableException: IO-fout: The Network Adapter could not establish the connection at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:419) at oracle.jdbc.driver.PhysicalConnection.<init>(

尝试通过JDBC连接远程Oracle数据库时,我收到以下异常:

java.sql.SQLRecoverableException: IO-fout: The Network Adapter could not establish the connection
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:419)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:536)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:228)
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:322)
at java.sql.DriverManager.getConnection(DriverManager.java:358)
这个问题的奇怪之处在于,当我下班时,连接工作正常。然而,当我试图通过AT&T VPN连接从家连接时,它不起作用

我已经确认我可以到达IP地址,并且已经在端口1521上远程登录了IP,工作正常。从本地WebLogic应用服务器连接到数据源也可以正常工作。此外,当尝试通过sqldeveloper连接到数据库时,我也可以访问数据库

但是,我需要从独立应用程序访问数据库(用于测试目的)。有人知道为什么会出现这个问题吗?是否有连接到远程Oracle数据库的替代方案,sqldeveloper和weblogic可能会使用这些替代方案

以下是试图连接数据库的代码摘录:

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

请看Java Ranch上的这篇文章:


“我的”Io异常:网络适配器无法建立连接“异常的解决方案是将数据库服务器的IP替换为DNS名称。”

当客户端连接到Oracle服务器时,它首先连接到Oracle侦听器服务。它通常会将客户端重定向到另一个端口。因此,客户端必须在另一个端口上打开另一个连接,该端口被防火墙阻止


因此,由于Oracle端口重定向,您实际上可能遇到了防火墙问题。应该可以使用客户端计算机上的网络监视器或防火墙上的防火墙管理软件对其进行诊断。

如果它位于Linux设备上,我建议您将数据库IP名称和IP解析添加到
/etc/hosts


我有同样的错误,当我们执行上述操作时,它工作正常。

我以前也有类似的问题。但当我开始在连接字符串中使用主机名而不是IP地址时,这个问题就解决了。

“从数据库服务器到DNS名称的IP”,你能解释一下吗。我不明白,我也有同样的问题。提前谢谢。
public static void main(String args[]) throws ClassNotFoundException, SQLException {
    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@9.2.2.2:1521:ORCL", "user", "pwd");
}