如何解决SQL Server JDBC连接超时错误:主机实例连接失败
解决Java连接SQL Server超时及相关错误的步骤
一、排查服务器端配置问题
确保SQL Server Browser服务处于运行状态
命名实例(如SQLEXPRESS)依赖SQL Server Browser服务通过UDP 1434端口返回实例对应的TCP端口。操作步骤:- 按下Win+R,输入
services.msc回车打开「服务」面板 - 找到「SQL Server Browser」服务,将启动类型设为「自动」,并点击「启动」按钮。
- 按下Win+R,输入
验证实例名称正确性
确认SQL Server实例名确实为SQLEXPRESS:
打开「SQL Server配置管理器」,展开「SQL Server服务」,查看服务名称是否为「SQL Server (SQLEXPRESS)」,括号内的内容即为实例名。配置防火墙允许必要端口流量
- 添加防火墙规则,允许UDP 1434端口的入站连接(供SQL Server Browser服务使用)
- 若后续指定实例的静态TCP端口,需同时添加该TCP端口的入站允许规则(可在SQL Server配置管理器中查看实例的TCP端口)
二、优化JDBC连接字符串
直接指定TCP端口(推荐)
避免依赖UDP 1434端口,直接使用实例的TCP端口建立连接:- 在SQL Server配置管理器中,展开「SQL Server网络配置」→「SQL Server (SQLEXPRESS)的协议」→「TCP/IP」→右键选择「属性」
- 切换到「IP地址」标签,找到「TCP端口」(若为动态端口,可设置固定值如14330)
- 修改连接字符串为:
String connectionUrl = "jdbc:sqlserver://DESKTOP-4HE4VKM:14330;DatabaseName=payroll;integratedSecurity=true;encrypt=false;";
检查Windows身份验证依赖
使用integratedSecurity=true时,需确保对应版本的sqljdbc_auth.dll(32位/64位)放置在项目运行路径或系统环境变量PATH包含的目录中。
三、修复代码中的SQL语法错误
你的代码中SQL语句存在语法错误:select from EMPLOYEE缺少要查询的列,需修改为:
ResultSet rs = st.executeQuery("select EmpName from EMPLOYEE");
或查询所有列:
ResultSet rs = st.executeQuery("select * from EMPLOYEE");
内容的提问来源于stack exchange,提问作者User123851
相关产品推荐
相关产品推荐

