下载 JDBC 驱动程序
你需要从 Microsoft 官网下载适用于 SQL Server 的 JDBC 驱动。

-
访问官网下载页面: Microsoft JDBC Drivers for SQL Server
-
选择版本:
- 驱动版本: 建议下载最新的稳定版,"8.x" 或 "12.x" 系列,新版本通常支持最新的 Java 和 SQL Server 特性,并修复了旧版本的 bug。
- 操作系统: 选择你的操作系统(Windows, Linux, macOS)。
- 文件类型: 下载 "ZIP" 或 "TAR.GZ" 压缩包即可。
-
找到 JAR 文件: 下载并解压后,你会看到一个文件夹,你需要关注的文件是
mssql-jdbc-<version>.jar。mssql-jdbc-12.4.2.jre11.jar。- 文件名中的
jre8,jre11,jre17等后缀表示该 JAR 文件是为哪个 Java 运行时环境编译的。请选择与你项目使用的 JDK 版本相匹配的 JAR 文件,如果你使用 JDK 11,就选择jre11结尾的那个。
- 文件名中的
配置 JAR 文件到项目中
你需要将下载的 JAR 文件添加到你的 Java 项目的类路径(Classpath)中,根据你使用的开发工具,方法不同。

使用 IDE (如 IntelliJ IDEA 或 Eclipse)
这是最推荐、最简单的方式。
-
在项目中创建一个库:
-
IntelliJ IDEA:
- 打开你的项目。
File->Project Structure->Modules。- 在左侧选择你的模块,然后点击
Dependencies选项卡。 - 点击 号,选择
JARs or directories...。 - 浏览并选择你下载的
mssql-jdbc-<version>.jar文件。 - 点击
OK,IDE 会自动将其添加到类路径中。
-
Eclipse:
(图片来源网络,侵删)- 右键点击你的项目 ->
Build Path->Configure Build Path...。 - 在
Libraries选项卡中,点击Add External JARs...。 - 浏览并选择你下载的
mssql-jdbc-<version>.jar文件。 - 点击
Apply and Close。
- 右键点击你的项目 ->
-
-
Maven 项目 (强烈推荐): 如果你使用 Maven,无需手动下载 JAR 文件,只需在
pom.xml文件中添加以下依赖即可,Maven 会自动帮你下载和管理。<dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <!-- 请根据你的JDK版本选择合适的版本。 使用JDK 11, 17, 21等 LTS 版本,可以使用以下版本。 最新版本请去 Maven 中央仓库查询: https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc --> <version>12.6.1.jre11</version> </dependency>
使用命令行编译和运行
如果你不使用 IDE,需要通过 javac 和 java 命令手动编译和运行,则需要使用 -cp (classpath) 参数来指定 JAR 文件路径。
假设你的 JAR 文件在 C:\drivers\ 目录下,你的 Java 源文件是 src\com\example\TestDB.java。
-
编译:
# 注意路径分隔符,Windows用分号;,Linux/macOS用冒号: javac -cp "C:\drivers\mssql-jdbc-12.6.1.jre11.jar" src\com\example\TestDB.java
-
运行:
java -cp ".;C:\drivers\mssql-jdbc-12.6.1.jre11.jar" com.example.TestDB
- 表示包含当前目录,因为编译后的
.class文件在那里。 - 是 Windows 的类路径分隔符,Linux/macOS 上应使用 。
- 表示包含当前目录,因为编译后的
Java 连接代码示例
下面是一个完整的 Java 代码示例,展示了如何连接到 SQL Server 数据库、执行查询、处理结果集,并最后关闭所有资源。
前提条件
- 你有一个正在运行的 SQL Server 实例。
- 你知道数据库的连接信息:
- 服务器地址:
localhost或168.1.100。 - 端口: 默认是
1433。 - 数据库名称:
my_test_db。 - 用户名:
sa。 - 密码: 你的密码。
- 服务器地址:
示例代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SqlServerConnectionExample {
// --- 请在这里修改你的数据库连接信息 ---
private static final String DB_URL = "jdbc:sqlserver://localhost:1433;databaseName=my_test_db;encrypt=false;trustServerCertificate=true;";
private static final String USER = "sa";
private static final String PASS = "your_password";
// ------------------------------------
public static void main(String[] args) {
// 使用 try-with-resources 语句,确保 Connection, Statement, ResultSet 自动关闭
try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT id, name, email FROM users")) {
// 检查连接是否成功
if (conn != null) {
System.out.println("连接成功!");
}
// 遍历结果集
System.out.println("ID\tName\tEmail");
System.out.println("--------------------");
while (rs.next()) {
// 通过列名获取数据,更安全且不易出错
int id = rs.getInt("id");
String name = rs.getString("name");
String email = rs.getString("email");
System.out.println(id + "\t" + name + "\t" + email);
}
} catch (SQLException e) {
// 处理 JDBC 错误
System.err.println("数据库连接或查询失败!");
e.printStackTrace();
}
}
}
代码解析
-
加载驱动 (可选): 在较新版本的 JDBC 驱动(4.0+)中,你不需要再手动调用
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"),驱动程序管理器会自动为你加载,如果你使用的是非常旧的版本(4.0 之前),才需要这一行。 -
连接字符串 (
DB_URL):jdbc:sqlserver://: 协议头,表示使用 SQL Server JDBC 驱动。localhost:1433: 服务器地址和端口,如果你的 SQL Server 在远程,请替换为实际 IP 地址。databaseName=my_test_db: 你要连接的数据库名称。encrypt=false;trustServerCertificate=true;: 这是在本地开发或测试时非常重要的参数。encrypt=false: 禁用加密。trustServerCertificate=true: 信任服务器证书,即使它是自签名的,这可以避免 SSL/TLS 握手时的证书验证错误。
- 注意: 在生产环境中,你应该配置正确的 SSL 加密和受信任的证书,而不是简单地禁用它们。
-
DriverManager.getConnection(): 此方法使用 URL、用户名和密码建立数据库连接,返回一个Connection对象。 -
try-with-resources: 这是一个非常实用的 Java 7+ 特性,它确保了在try语句块结束时,Connection,Statement, 和ResultSet等资源会自动被关闭,即使发生异常也是如此,这可以有效防止资源泄漏。 -
执行查询:
conn.createStatement(): 创建一个Statement对象,用于执行 SQL 语句。stmt.executeQuery("SELECT ..."): 执行一个查询语句,返回一个ResultSet对象,它包含了查询结果。
-
处理结果集:
rs.next(): 将光标移动到下一行,如果存在下一行,则返回true,否则返回 `
