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

无法连接Oracle自治数据库:Java代码连接故障排查及解决

问题:NetBeans中Java连接Oracle自治数据库(19c)报错Connection reset

问题详情

尝试在NetBeans中通过Java代码连接Oracle自治数据库,已配置数据库参数、将自身IP加入访问控制列表,且无需双向TLS认证(使用钱包可通过VS Code SQL扩展成功连接,但不想依赖钱包),但建立连接时仍报错。

原连接代码

try{  
    Class.forName("oracle.jdbc.driver.OracleDriver");
    Connection con=DriverManager.getConnection(  
    "jdbc:oracle:thin:@my_hostname:my_port/service_name","admin","my_admin_password");  

}catch (SQLException e) {
    System.out.println(e.getMessage());
    e.printStackTrace();
} catch (ClassNotFoundException e) {
    System.out.println(e.getMessage());
    e.printStackTrace();
} catch (Exception e) {
    System.out.println(e.getMessage());
    e.printStackTrace();
}

环境与数据库信息

  • 数据库版本:19c
  • 实例类型:免费版
  • 访问类型:允许指定IP和VCN的安全访问
  • 访问控制列表:已启用
  • 双向TLS(mTLS)认证:无需
  • 项目依赖:已添加ojdbc10.jar,使用SDK17

报错信息

Error de SQL: Error de E/S: Connection reset, Authentication lapse 0 ms.
java.sql.SQLRecoverableException: Error de E/S: Connection reset, Authentication lapse 0 ms.
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:927)
    at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:820)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:80)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:820)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:624)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:681)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:229)
    at example_ant.exampleClass.main(exampleClass.java:37)
Caused by: java.io.IOException: Connection reset, Authentication lapse 0 ms.
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:923)
    ... 7 more
Caused by: java.net.SocketException: Connection reset
    at java.base/sun.nio.ch.SocketChannelImpl.throwConnectionReset(SocketChannelImpl.java:394)
    at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:426)
    at oracle.net.nt.TimeoutSocketChannel.read(TimeoutSocketChannel.java:187)
    at oracle.net.ns.NSProtocolNIO.doSocketRead(NSProtocolNIO.java:676)
    at oracle.net.ns.NIOPacket.readNIOPacket(NIOPacket.java:408)
    at oracle.net.ns.NSProtocolNIO.negotiateConnection(NSProtocolNIO.java:143)
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:353)
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1706)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:631)
    ... 7 more

解决方案(更新)

问题根源在于JDBC URL的构造方式错误——之前使用的是host:port/service_name的简化格式,而非完整的TNS描述字符串。

修正后的连接代码:

Connection con=DriverManager.getConnection(
"jdbc:oracle:thin:@(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=my_port)(host=my_host))(connect_data=(service_name=my_service_name))(security=(ssl_server_dn_match=yes)))","user","password");

内容的提问来源于stack exchange,提问作者Earth Affairs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 17:34:55