Java连接SQL Server异常:同配置电脑连接结果不一致求代码排查
嘿,先帮你检查了提供的代码,逻辑上完全没问题——这是标准的JPA连接SQL Server的写法,属性配置、连接创建、异常处理以及UI状态控制都没有明显错误,所以代码本身不是导致连接失败的原因,问题出在无法连接的那台电脑的环境配置上。
先看你给出的报错核心信息:
org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host 192.168.x.x, port x has failed. Error: "Connection refused: connect. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall."
这是典型的网络或数据库服务配置问题,按以下步骤排查即可:
具体排查步骤
检查SQL Server实例的TCP/IP协议是否启用
- 在无法连接的电脑上打开「SQL Server配置管理器」
- 依次展开「SQL Server网络配置」→ 对应数据库实例的「协议」
- 确保「TCP/IP」的状态为启用
- 双击「TCP/IP」进入设置,在「IP地址」标签页找到目标IP(192.168.x.x),确认「已启用」为是,且端口号和代码中使用的完全一致
排查防火墙拦截问题
- 检查无法连接的电脑的Windows防火墙,确认是否允许SQL Server的目标端口(默认是1433,如果你用了自定义端口就选对应端口)通过
- 同时检查SQL Server所在主机的防火墙,是否开放了该端口允许这台电脑的IP访问
验证网络连通性
在无法连接的电脑上打开命令提示符或PowerShell,执行以下命令测试网络连通性:# 命令提示符用telnet(如果没开启telnet功能,先在控制面板启用) telnet 192.168.x.x 你的端口号 # PowerShell用这个更直观 Test-NetConnection 192.168.x.x -Port 你的端口号如果连接失败,说明网络层面不通,重点排查防火墙或局域网路由问题
确认SQL Server服务状态
登录SQL Server所在主机,检查「SQL Server (你的实例名)」服务是否处于正在运行状态,如果服务停了肯定连不上核对JDBC驱动版本
虽然你说两台电脑Java版本相同,但还是建议检查一下两台电脑的SQL Server JDBC驱动版本是否一致,驱动版本和SQL Server版本不匹配也可能导致连接失败,确保驱动版本和目标SQL Server版本兼容
额外建议
- 先在无法连接的电脑上用SQL Server Management Studio直接连接目标数据库,如果SSMS也连不上,那100%是环境配置问题,和代码无关
- 再核对一遍代码里填写的数据库URL格式是否正确,如果是命名实例,URL格式应该是
jdbc:sqlserver://192.168.x.x:端口号;instanceName=你的实例名,别漏了实例名参数
内容的提问来源于stack exchange,提问作者Miguel Boavida

