JDBC连接Microsoft SQL Server失败求助:TCP/IP错误及Jar包选择
解决JDBC连接SQL Server的TCP/IP错误及Jar包选择问题
Jar包选择方案
根据你使用的Java版本选择对应的驱动Jar包:
- 若项目基于Java 8:添加
mssql-jdbc-12.4.2.jre8.jar到项目依赖 - 若项目基于Java 11:添加
mssql-jdbc-12.4.2.jre11.jar到项目依赖
注:
javadoc和sources结尾的包是文档和源码包,仅用于开发时查阅,无需加入运行依赖。
TCP/IP连接错误的排查与修复
1. 修正连接字符串
你的连接字符串存在参数拼写错误,instance应改为instanceName,针对SQL Server Express命名实例,正确的连接格式示例:
// 使用实例名 String con = "jdbc:sqlserver://<主机名>;instanceName=SQLEXPRESS;databaseName=DB;integratedSecurity=true"; // 或指定端口(需先确认实例监听端口) String con = "jdbc:sqlserver://<主机名>:1433;databaseName=DB;integratedSecurity=true";
2. 检查SQL Server网络配置
- 打开SQL Server配置管理器,定位到
SQL Server网络配置 > SQLEXPRESS的协议,确保TCP/IP协议已启用。 - 双击
TCP/IP进入属性,切换到IP地址选项卡:- 找到
IPAll区域,确认TCP端口设置为1433(默认实例);若为动态端口,需记录端口号并在连接字符串中指定。 - 确保各IP地址的
启用属性设置为是。
- 找到
- 重启SQL Server SQLEXPRESS服务,使配置生效。
3. 验证防火墙设置
- 检查主机防火墙是否允许1433端口(或实例实际监听的端口)的TCP入站连接,必要时添加规则放行。
- 本地测试可临时关闭防火墙,确认是否为防火墙拦截导致的问题。
4. 确认服务状态
打开Windows服务管理器,确保SQL Server (SQLEXPRESS)服务处于运行状态。
附:你的错误信息与代码
错误栈
The TCP/IP connection to the host <Instance name>, port 1433 has failed. Error: "<intance name. 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.". at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:231) at com.microsoft.sqlserver.jdbc.SQLServerException.convertConnectExceptionToSQLServerException(SQLServerException.java:282) at com.microsoft.sqlserver.jdbc.SocketFinder.findSocket(IOBuffer.java:2578) at com.microsoft.sqlserver.jdbc.TDSChannel.open(IOBuffer.java:719) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:3523) at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:3172) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:3014) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:1836) at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1246) at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:681) at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:252) at JDBC.main(JDBC.java:9)
你的代码
import java.sql.*; import java.*; class JDBC { public static void main(String[] args) throws ClassNotFoundException, SQLException { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); String con = "jdbc:sqlserver://<instancename>;instance=SQLEXPRESS;databaseName=DB;integratedSecurity=true"; Connection conn = DriverManager.getConnection(con); Statement stmt = conn.createStatement(); String query = "SELECT *FROM STUDENT"; ResultSet rs = stmt.executeQuery(query); while(rs.next()) { System.out.println("done"); } rs.close(); stmt.close(); conn.close(); } }
内容的提问来源于stack exchange,提问作者Smit Patel
相关产品推荐
相关产品推荐

