如何通过 JDBC 在 Java 中正确连接 SQL Server 数据库
发布时间 - 2025-12-30 00:00:00 点击率:次本文详解 java 应用通过 microsoft jdbc driver 连接本地 sql server 的完整流程,涵盖连接字符串构造、实例名验证、sql server browser 服务配置、防火墙设置及常见超时错误的排查方法。
在 Java 中连接 SQL Server 数据库,核心依赖于官方提供的 Microsoft JDBC Driver for SQL Server(需显式添加 JAR 或通过 Maven 引入),但仅引入驱动远远不够——连接失败(如 SocketTimeoutException: Receive timed out)往往源于底层网络与 SQL Server 实例配置问题,而非代码逻辑错误。
✅ 正确的连接字符串格式
您当前使用的 URL:
String url = "jdbc:sqlserver://LAPTOP-0CSKUFIE\\MSSQLSERVER;databaseName=datatreck";
存在两个关键隐患:
- 未指定端口:默认命名实例(如 MSSQLSERVER)通常监听 TCP 端口 1433,但 JDBC 驱动在未显式指定端口时,会尝试通过 UDP 1434 端口向 SQL Server Browser 服务查询动态端口——这正是报错中 port 1434 和 SQL Server Browser is not running 的根源;
- 主机名可靠性低:LAPTOP-0CSKUFIE 是 NetBIOS 名称,可能受 DNS/LMHOSTS 解析影响;本地开发推荐统一使用 localhost 或 127.0.0.1。
✅ 推荐写法(显式端口 + 可靠主机):
String url = "jdbc:sqlserver://localhost:1433;databaseName=datatreck;encrypt=false;trustServerCertificate=true;"; // 注意:SQL Server 2019+ 默认启用加密,若未配置证书,必须添加 encrypt=false & trustServerCertificate=true
? 如何确认 SQL Server 实例是否真正在监听 1433? 打开 SQL Server 配置管理器 → 展开 SQL Server 网络配置 → 选择您的实例(如 MSSQLSERVER 的协议)→ 右键 TCP/IP → 属性 → 切换到 IP 地址 选项卡 → 检查 IPAll 下的 TCP 端口 是否为 1433(若为空,则需手动填入并重启 SQL Server 服务)。
⚙️ 必须检查的 SQL Server 服务状态
- ✅ SQL Server (MSSQLSERVER):主数据库引擎服务(必须“正在运行”)
- ⚠️ SQL Server Browser:仅当使用命名实例(如 \\SQLEXPRESS)且未指定端口时才需要;对于默认实例 MSSQLSERVER,可禁用该服务,只要连接字符串中明确指定 :1433 即可规避对它的依赖。
? 小技巧:在 Windows 搜索栏输入 services.msc → 查找以上两项服务 → 右键“启动”并设为“自动(延迟启动)”。
?️ 防火墙与网络策略
即使服务已启动,Windows 防火墙仍可能拦截:
- 允许 入站规则:TCP 端口 1433(非 UDP 1434!)
- 若使用命名实例且坚持不指定端口,则还需放行 UDP 端口 1434 并确保 SQL Server Browser 运行。
可通过命令快速验证端口连通性:
telnet localhost 1433 # 若提示“无法打开到主机的连接”,说明端口未开放或 SQL Server 未监听
? JDBC 驱动依赖(Maven 示例)
确保项目中已引入最新稳定版驱动(推荐 12.6.1.jre11 或适配 JDK 版本):
com.microsoft.sqlserver mssql-jdbc12.6.1.jre11 runtime
✅ 完整可运行示例(含异常增强提示)
import java.sql.*;
public class JvaConnect2SQL {
public static void main(String[] args) {
String url = "jdbc:sqlserver://localhost:1433;databaseName=datatreck;encrypt=false;trustServerCertificate=true;";
String username = "sa";
S
tring password = "hello";
try (Connection conn = DriverManager.getConnection(url, username, password)) {
System.out.println("✅ 成功连接到 SQL Server!当前数据库:" + conn.getCatalog());
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT @@VERSION AS version")) {
if (rs.next()) {
System.out.println("SQL Server 版本:" + rs.getString("version"));
}
}
} catch (SQLException e) {
System.err.println("❌ 连接失败:" + e.getMessage());
// 关键诊断信息
System.err.println("SQLState: " + e.getSQLState());
System.err.println("Error Code: " + e.getErrorCode());
e.printStackTrace();
}
}
}? 总结:5 步快速排障清单
| 步骤 | 检查项 | 工具/方法 |
|---|---|---|
| 1️⃣ | SQL Server 实例是否运行? | services.msc → 查看 SQL Server (MSSQLSERVER) 状态 |
| 2️⃣ | TCP 1433 端口是否启用并监听? | SQL Server 配置管理器 → TCP/IP 属性 → IPAll → TCP 端口 = 1433 |
| 3️⃣ | 本地能否 telnet 通? | telnet localhost 1433(若失败,检查防火墙或实例配置) |
| 4️⃣ | 连接字符串是否显式指定 :1433? | 避免依赖 SQL Server Browser,禁用其亦无妨 |
| 5️⃣ | JDBC 驱动版本与 JDK 兼容? | 使用 mssql-jdbc 官方最新版,匹配 JDK 主版本 |
遵循以上步骤,95% 的“连接超时”问题可立即定位并解决。记住:JDBC 连接失败,80% 是 SQL Server 侧配置问题,而非 Java 代码缺陷。
# word
# java
# windows
# 防火墙
# 端口
# 工具
# ai
# ios
# bios
# win
# microsoft
# dns
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
Laravel如何实现用户密码重置功能?(完整流程代码)
独立制作一个网站多少钱,建立网站需要花多少钱?
微信小程序 闭包写法详细介绍
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
三星、SK海力士获美批准:可向中国出口芯片制造设备
个人摄影网站制作流程,摄影爱好者都去什么网站?
如何用5美元大硬盘VPS安全高效搭建个人网站?
简单实现Android验证码
如何在Ubuntu系统下快速搭建WordPress个人网站?
如何在局域网内绑定自建网站域名?
活动邀请函制作网站有哪些,活动邀请函文案?
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
详解vue.js组件化开发实践
微信小程序 scroll-view组件实现列表页实例代码
小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
如何撰写建站申请书?关键要点有哪些?
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
敲碗10年!Mac系列传将迎来「触控与联网」双革新
开心动漫网站制作软件下载,十分开心动画为何停播?
网页设计与网站制作内容,怎样注册网站?
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
Laravel如何处理异常和错误?(Handler示例)
Bootstrap整体框架之CSS12栅格系统
详解jQuery中基本的动画方法
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
Laravel如何处理表单验证?(Requests代码示例)
Laravel如何为API生成Swagger或OpenAPI文档
实例解析angularjs的filter过滤器
香港服务器WordPress建站指南:SEO优化与高效部署策略
如何在Windows虚拟主机上快速搭建网站?
装修招标网站设计制作流程,装修招标流程?
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
JavaScript如何实现倒计时_时间函数如何精确控制
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
如何续费美橙建站之星域名及服务?
黑客入侵网站服务器的常见手法有哪些?
UC浏览器如何设置启动页 UC浏览器启动页设置方法
如何用AWS免费套餐快速搭建高效网站?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
如何在云主机快速搭建网站站点?
如何正确选择百度移动适配建站域名?
bootstrap日历插件datetimepicker使用方法
Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践
Python图片处理进阶教程_Pillow滤镜与图像增强
Laravel如何创建自定义中间件?(Middleware代码示例)
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】


tring password = "hello";
try (Connection conn = DriverManager.getConnection(url, username, password)) {
System.out.println("✅ 成功连接到 SQL Server!当前数据库:" + conn.getCatalog());
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT @@VERSION AS version")) {
if (rs.next()) {
System.out.println("SQL Server 版本:" + rs.getString("version"));
}
}
} catch (SQLException e) {
System.err.println("❌ 连接失败:" + e.getMessage());
// 关键诊断信息
System.err.println("SQLState: " + e.getSQLState());
System.err.println("Error Code: " + e.getErrorCode());
e.printStackTrace();
}
}
}