You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat连接Oracle 11g报错:网络适配器无法建立连接求解决

解决Java(Tomcat)连接Oracle 11g时的“Network Adapter could not establish the connection”问题

从你的描述来看,SQL Developer能正常连接但Java程序(包括Tomcat中的应用和测试类)都报连接超时,再结合JVM使用IPv6协议的环境信息,这大概率是Java网络协议栈优先使用IPv6,但Oracle数据库监听仅绑定IPv4地址导致的协议冲突。下面是具体的解决步骤:

1. 强制JVM使用IPv4协议

这是最直接有效的解决方案,核心是让Java程序切换到和数据库监听匹配的IPv4协议:

  • 对于Tomcat服务器:
    找到Tomcat安装目录下的catalina.bat(Windows)或catalina.sh(Linux),修改JAVA_OPTS配置,添加IPv4优先参数:

    # Linux/macOS示例
    JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true"
    
    # Windows示例
    set JAVA_OPTS=%JAVA_OPTS% -Djava.net.preferIPv4Stack=true
    

    修改后重启Tomcat,再测试数据库连接。

  • 对于你的测试Java程序:
    在STS IDE中,右键点击测试类 → Run As → Run Configurations,切换到Arguments标签页,在VM arguments输入框中添加:

    -Djava.net.preferIPv4Stack=true
    

    保存后重新运行测试程序,应该就能正常连接了。

2. 验证并调整Oracle监听配置(可选)

如果强制IPv4后仍有问题,可以检查Oracle的监听配置是否支持IPv6:

  1. 找到Oracle安装目录下的$ORACLE_HOME/network/admin/listener.ora文件
  2. 确认LISTENER的ADDRESS配置是否包含IPv6地址,或者设置为允许所有IP的0.0.0.0:
    LISTENER =
      (DESCRIPTION_LIST =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
        )
      )
    
    配置后重启Oracle监听服务(执行lsnrctl stop再lsnrctl start)。

3. 调整JDBC连接字符串格式(可选)

尝试将原来的SID格式连接字符串:

"jdbc:oracle:thin:@9.2.2.2:1521:ORCL"

换成Oracle 11g推荐的服务名格式:

"jdbc:oracle:thin:@//9.2.2.2:1521/ORCL"

这种格式在IPv6环境下的地址解析兼容性更好。

为什么SQL Developer能正常连接?

SQL Developer通常会自动适配IPv4/IPv6环境,或者默认使用IPv4协议,所以不会出现Java程序的协议栈冲突问题。

内容的提问来源于stack exchange,提问作者Joby Wilson Mathews

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:57:37