如何解决Java连接Oracle数据库时Network Adapter无法建立连接错误
Oracle JDBC Network Adapter连接异常排查解决
排查步骤
- 优先检查代码连接参数错误:给出的代码里传入的用户名参数多了前置空格
" system",Oracle会将空格识别为用户名的一部分,大概率导致验证失败,这是代码层面最直接的可见问题。 - 检查Oracle相关服务状态:Windows系统可打开服务列表,确认
OracleServiceXE、OracleXETNSListener两个服务均处于运行状态;Linux/macOS可执行lsnrctl status检查监听运行状态,执行ps -ef | grep oracle确认数据库进程正常存活。 - 检查1521端口连通性:Oracle默认监听端口为1521,可执行
telnet localhost 1521或nc -zv localhost 1521测试端口是否可访问,如果端口不通,大概率是监听未正常启动或者被防火墙拦截。 - 确认Oracle SID/服务名配置正确:连接字符串中使用的SID为
xe,是Oracle Express版的默认SID,如果数据库不是Express版,或者修改过默认SID,需要替换为实际SID;如果使用服务名连接,需要将连接字符串格式调整为jdbc:oracle:thin:@//localhost:1521/实际服务名。 - 检查防火墙/访问规则限制:如果Oracle部署在远程服务器,需要确认服务器防火墙放行1521端口,云服务器还需要检查安全组规则是否放行本地IP的1521端口访问权限。
- 验证Oracle监听配置:可查看Oracle安装目录下
network/admin/listener.ora文件,确认监听绑定的地址、端口、SID配置无误,修改配置后需要重启监听服务生效。
修复后代码示例
package com.karunakar.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class SelectAll { // 连接参数抽为常量方便统一修改 private static final String JDBC_URL = "jdbc:oracle:thin:@localhost:1521:xe"; private static final String DB_USER = "system"; private static final String DB_PWD = "1234"; public static void main(String[] args) throws SQLException { // 低版本JDBC驱动可添加以下语句手动加载驱动,高版本无需手动加载 // Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con = DriverManager.getConnection(JDBC_URL, DB_USER, DB_PWD); Statement st = con.createStatement(); ResultSet rs = st.executeQuery("select * from stu"); while (rs.next()) { System.out.println(rs.getInt(1) + ".." + rs.getString(2)); } // 资源按顺序关闭,生产环境更推荐使用try-with-resources自动关闭资源避免泄漏 rs.close(); st.close(); con.close(); } }
内容的提问来源于stack exchange,提问作者karunakar
相关产品推荐
相关产品推荐

