Java 连接 SQL Server 主要使用由微软官方提供的 JDBC 驱动程序,这个驱动程序是一个 .jar 文件,你需要在你的 Java 项目中引入它,然后使用标准的 JDBC API 来建立连接和执行操作。

驱动程序类型
微软提供了两种类型的 JDBC 驱动程序,但目前官方推荐和广泛使用的是 Type 4 (纯 Java 驱动)。
| 类型 | 描述 | 优点 | 缺点 | 状态 |
|---|---|---|---|---|
| Type 4 (纯 Java 驱动) | 纯 Java 实现,通过标准的套接字直接与 SQL Server 通信。 | 性能最好、无需客户端库、跨平台、易于部署。 | 无明显缺点。 | 强烈推荐,当前标准 |
| Type 2 (本地 API 驱动) | 使用本地方法调用(JNI)来访问 SQL Server 的 ODBC 驱动。 | 早期可能利用了某些 ODBC 特性。 | 依赖本地客户端库(如 ntwdblib.dll)、部署复杂、性能较差、有平台兼容性问题。 |
已过时,不推荐使用 |
请直接选择并使用 Type 4 JDBC Driver。
如何获取驱动程序
你需要从微软官方网站下载最新的 JDBC 驱动,下载页面会提供不同版本的驱动,以兼容不同版本的 Java 和 SQL Server。
官方下载地址: Microsoft JDBC Driver for SQL Server

下载时需要注意:
- 版本选择:页面会提供多个版本,
mssql-jdbc-12.4.0.jre11.jar、mssql-jdbc-12.4.0.jre8.jar等。mssql-jdbc-...是驱动名称。4.0是驱动版本号。jre11或jre8表示该驱动是为哪个 Java 运行时环境编译的。你应该选择与你项目使用的 JDK/JRE 版本最匹配的驱动,以确保兼容性。
- 下载文件:下载的是一个
.zip压缩包,解压后你会找到一个或多个.jar文件,这个.jar文件就是你需要引入到项目中的驱动库。
如何在项目中使用驱动
获取到 .jar 文件后,你需要将其添加到你的 Java 项目的类路径中,具体方法取决于你使用的开发环境或构建工具。
a) 在 IDE 中添加 (如 IntelliJ IDEA, Eclipse)
这是最常见和简单的方式。
- 打开项目设置:在 IDE 中,打开项目或模块的设置/属性。
- 找到 Libraries:导航到 "Libraries" 或 "Dependencies" 部分。
- 添加 JARs:点击 "Add" 或 "Attach",然后选择你下载并解压后的
.jar文件。 - 应用:确认并应用更改。
示例 (IntelliJ IDEA):
File -> Project Structure -> Modules -> Dependencies -> -> JARs or directories... -> 选择你的 mssql-jdbc-xx.jar。

b) 使用 Maven (推荐)
如果你使用 Maven 管理项目,无需手动下载 .jar 文件,只需在 pom.xml 文件中添加以下依赖即可。
<!-- 推荐使用较新的版本,并选择与你 JDK 匹配的 classifier -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<!--
请根据你的 JDK 版本选择合适的版本号和 classifier
使用 JDK 11:
-->
<version>12.4.0.jre11</version>
</dependency>
Maven 会自动从中央仓库下载并管理这个依赖。
c) 使用 Gradle
如果你使用 Gradle,在 build.gradle (或 build.gradle.kts) 文件中添加依赖:
// build.gradle
dependencies {
// 推荐使用较新的版本,并选择与你 JDK 匹配的 classifier
implementation 'com.microsoft.sqlserver:mssql-jdbc:12.4.0.jre11'
}
如何编写连接代码
驱动添加到项目后,就可以使用标准的 JDBC 流程来连接数据库了。
加载驱动类
虽然对于 JDBC 4.0 (Java 6+) 及以上版本,这一步通常是可选的(驱动会自动注册),但显式加载是一个好习惯。
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
建立连接
使用 DriverManager.getConnection() 方法,并提供数据库的 URL、用户名和密码。
连接字符串 格式:
jdbc:sqlserver://[server_name][:port];[database_name];[user];[password];[property=value];...
参数说明:
server_name: SQL Server 实例的地址,可以是主机名、IP 地址,如果连接的是默认实例,可以省略实例名;如果连接的是命名实例(如localhost\SQLEXPRESS),则需要写上。port: 端口号,默认为1433,如果不是默认端口,必须指定。database_name: 要连接的数据库名称。user: 数据库用户名。password: 数据库密码。encrypt=true: 强烈建议在生产环境中启用加密,以确保数据传输安全。
完整代码示例
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SqlServerConnectionExample {
public static void main(String[] args) {
// 1. 数据库连接信息
// 请根据你的实际情况修改以下值
String dbUrl = "jdbc:sqlserver://localhost:1433;databaseName=master;encrypt=true;trustServerCertificate=true;";
String dbUser = "sa";
String dbPassword = "your_password";
// 2. 声明 Connection 和 Statement 对象
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 3. 加载 JDBC 驱动 (对于 JDBC 4.0+ 可省略,但推荐保留)
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// 4. 建立连接
System.out.println("正在连接到数据库...");
conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
System.out.println("连接成功!");
// 5. 创建 Statement 对象
stmt = conn.createStatement();
// 6. 执行 SQL 查询
String sql = "SELECT 'Hello, SQL Server!' as message";
rs = stmt.executeQuery(sql);
// 7. 处理结果集
while (rs.next()) {
// 通过列名获取数据
String message = rs.getString("message");
System.out.println("查询结果: " + message);
}
} catch (ClassNotFoundException e) {
System.err.println("找不到 JDBC 驱动类,请确保已将驱动 JAR 添加到类路径中。");
e.printStackTrace();
} catch (SQLException e) {
System.err.println("数据库连接或查询出错!");
e.printStackTrace();
} finally {
// 8. 关闭资源 (非常重要!)
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
System.out.println("数据库连接已关闭。");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
注意:
encrypt=true;trustServerCertificate=true;这两个参数在本地开发或测试时非常有用,可以简化 SSL/TLS 证书的验证过程,但在生产环境中,你应该使用有效的证书并进行正确的配置,而不是简单地信任所有证书。- 密码等敏感信息不要硬编码在代码中,应该从配置文件或环境变量中读取。
常见问题与解决方案
Q1: No suitable driver found for jdbc:sqlserver://...
原因:
- JDBC 驱动
.jar文件没有正确添加到项目的类路径中。 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");这行代码被遗漏了(虽然在新版本中可能不是必须的,但缺少它可能导致此问题)。- 连接字符串中的协议写错了,例如写成了
jdbc:mysql://。
解决方案:检查你的项目配置,确保 .jar 文件在类路径中,并检查连接字符串。
Q2: The TCP/IP connection to the host localhost, port 1433 has failed
原因:
- SQL Server 服务未启动:检查 Windows 服务中 "SQL Server" 相关的服务是否正在运行。
- 端口错误:SQL Server 可能没有在默认的
1433端口上监听,检查 SQL Server 配置管理器中的 TCP/IP 协议,确认端口号。 - 防火墙阻止:Windows 防火墙或网络防火墙可能阻止了
1433端口的连接。 - 连接实例名错误:如果你在连接命名实例(如
SQLEXPRESS),确保连接字符串中写对了实例名,并且该实例正在运行。
解决方案:逐一排查上述原因,最简单的方法是使用 SQL Server Management Studio (SSMS) 能否成功连接,SSMS 能连,说明服务正常,问题可能出在 Java 端的配置或防火墙上。
Q3: Login failed for user 'sa'.
原因:
- 用户名或密码错误。
- 'sa' 账户可能被禁用了,在 SSMS 中,可以右键点击服务器 -> "属性" -> "安全性",检查 "服务器身份验证" 和 "登录"。
解决方案:验证用户名密码,并确保 'sa' 账户已启用。
- 驱动选择:使用微软官方的 Type 4 JDBC Driver。
- 获取驱动:从官网下载
.zip文件,解压得到.jar文件。 - 引入项目:通过 IDE、Maven 或 Gradle 将
.jar文件/依赖添加到项目中。 - 编写代码:使用标准的 JDBC API,注意连接字符串的格式和资源关闭。
- 排查问题:连接失败时,优先检查服务状态、端口、防火墙和用户凭证。
