如何通过 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";

存在两个关键隐患:

  1. 未指定端口:默认命名实例(如 MSSQLSERVER)通常监听 TCP 端口 1433,但 JDBC 驱动在未显式指定端口时,会尝试通过 UDP 1434 端口向 SQL Server Browser 服务查询动态端口——这正是报错中 port 1434 和 SQL Server Browser is not running 的根源;
  2. 主机名可靠性低: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-jdbc
    12.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";
        String 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监控插件【步骤】