JDBC
Java 通过 JDBC (Java Database Connectivity) 来连接和操作数据库,JDBC 是一套 Java API,允许 Java 程序执行 SQL 语句,它本身只是一个规范(接口),具体的实现由各个数据库厂商提供,我们称之为 JDBC Driver (驱动)。

连接 SQL Server 的步骤通常如下:
- 获取 JDBC Driver:下载 Microsoft 提供的 SQL Server JDBC Driver。
- 配置项目:将驱动 JAR 包添加到您的项目中。
- 加载驱动:在代码中加载驱动类。
- 建立连接:使用
DriverManager获取数据库连接对象。 - 创建执行对象:通过连接对象创建
Statement或PreparedStatement。 - 执行 SQL:执行查询或更新操作。
- 处理结果:如果是查询,遍历
ResultSet获取数据。 - 关闭资源:按顺序关闭
ResultSet,Statement,Connection。
使用 Maven (推荐)
这是目前最主流、最便捷的项目管理方式,Maven 会自动帮您下载和管理依赖。
添加 Maven 依赖
在您的 pom.xml 文件中,添加 Microsoft 提供的官方 JDBC Driver 依赖。推荐使用最新版本。
<dependencies>
<!-- Microsoft JDBC Driver for SQL Server -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<!-- 请访问 Maven Central 查找最新版本 -->
<version>11.2.1.jre8</version>
<!-- 根据你的JDK版本选择,jre11, jre17 -->
</dependency>
</dependencies>
Java 连接代码示例
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SqlServerMavenExample {
// 数据库连接信息 - 请根据您的实际情况修改
private static final String DB_URL = "jdbc:sqlserver://localhost:1433;databaseName=YourDatabase;encrypt=true;trustServerCertificate=true;";
private static final String USER = "your_username";
private static final String PASS = "your_password";
public static void main(String[] args) {
// try-with-resources 语句,可以自动关闭资源
try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT 'Hello, SQL Server!' AS message")) {
// 检查连接是否成功
if (conn != null) {
System.out.println("连接成功!");
}
// 处理结果集
while (rs.next()) {
// 通过列名获取数据,更安全
String message = rs.getString("message");
System.out.println("从数据库获取到的消息: " + message);
}
} catch (SQLException e) {
System.err.println("数据库连接或查询失败!");
e.printStackTrace();
}
}
}
手动下载 JAR 包
如果您不使用 Maven,也可以手动管理依赖。

下载 JDBC Driver
访问 Microsoft 官方下载页面:Microsoft JDBC Driver for SQL Server
选择与您的 Java Development Kit (JDK) 版本匹配的驱动下载,下载后会得到一个 .jar 文件(mssql-jdbc-11.2.1.jre8.jar)。
配置项目
您需要将下载的 .jar 文件添加到项目的类路径中。
-
在 IDE (如 IntelliJ IDEA 或 Eclipse) 中:
(图片来源网络,侵删)- 右键点击您的项目。
- 选择
Open Module Settings(IntelliJ) 或Build Path->Configure Build Path(Eclipse)。 - 找到
Libraries或Dependencies选项卡。 - 点击 号,选择
JARs or directories...,然后找到并添加您下载的.jar文件。
-
在命令行编译运行时: 使用
-cp或-classpath参数来指定类路径。# 编译 javac -cp ".;C:\path\to\your\mssql-jdbc-11.2.1.jre8.jar" YourJavaFile.java # 运行 java -cp ".;C:\path\to\your\mssql-jdbc-11.2.1.jre8.jar" YourJavaFile
注意: Windows 系统使用 分隔路径,Linux/macOS 系统使用 。
Java 连接代码示例
代码与 Maven 方式中的示例完全相同,因为 JDBC API 是标准化的。
连接字符串详解
连接字符串是连接数据库的关键,下面解释一下示例中各部分的含义:
jdbc:sqlserver://localhost:1433;databaseName=YourDatabase;encrypt=true;trustServerCertificate=true;
jdbc:sqlserver://: JDBC 协定和驱动名称。localhost: SQL Server 服务器的地址,如果是远程服务器,请替换为 IP 地址或域名(如168.1.100或your-server.com)。1433: SQL Server 的默认端口,如果您的 SQL Server 使用了不同端口,请相应修改。;databaseName=YourDatabase: 要连接的数据库的名称。;encrypt=true;: 启用 TLS 加密,这是现代 SQL Server 的推荐做法。;trustServerCertificate=true;: 仅用于开发环境,它告诉驱动程序信任服务器提供的证书,而不进行验证,在生产环境中,您应该配置正确的 CA 证书,如果您的 SQL Server 是本地开发实例,并且使用了自签名证书,这个参数可以避免复杂的证书配置问题。
其他常用参数:
user=your_username: 用户名。password=your_password: 密码。integratedSecurity=true: 使用 Windows 身份验证(集成安全),如果使用此参数,则不需要提供user和password,连接字符串会变为:jdbc:sqlserver://localhost;databaseName=YourDatabase;integratedSecurity=true;
最佳实践:使用连接池
直接使用 DriverManager 获取连接在应用频繁创建和关闭连接时效率很低,且会消耗大量资源。在生产环境中,强烈建议使用连接池。
连接池在应用启动时创建一组数据库连接,并复用这些连接,从而大大提高性能。
使用 HikariCP (目前性能最好的连接池)
-
添加 Maven 依赖
<dependencies> <!-- SQL Server JDBC Driver --> <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <version>11.2.1.jre8</version> </dependency> <!-- HikariCP 连接池 --> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>5.0.1</version> </dependency> </dependencies> -
Java 连接池示例代码
import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; public class SqlServerWithHikariExample { // 创建一个静态的连接池数据源,整个应用生命周期内只需创建一次 private static HikariDataSource dataSource; static { HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:sqlserver://localhost:1433;databaseName=YourDatabase;encrypt=true;trustServerCertificate=true;"); config.setUsername("your_username"); config.setPassword("your_password"); // 连接池配置 (可以根据需要调整) config.addDataSourceProperty("cachePrepStmts", "true"); config.addDataSourceProperty("prepStmtCacheSize", "250"); config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); config.setMaximumPoolSize(10); // 最大连接数 config.setMinimumIdle(5); // 最小空闲连接数 config.setConnectionTimeout(30000); // 连接超时时间 (毫秒) dataSource = new HikariDataSource(config); } public static void main(String[] args) { // 从连接池中获取一个连接 try (Connection conn = dataSource.getConnection(); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT 'Connection from HikariCP!' AS message")) { System.out.println("从连接池成功获取连接!"); while (rs.next()) { System.out.println("消息: " + rs.getString("message")); } } catch (Exception e) { e.printStackTrace(); } // 注意:通常在应用关闭时才需要关闭整个连接池 // dataSource.close(); } }
| 方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Maven | 依赖管理自动化,版本控制方便,团队协作首选 | 需要搭建 Maven 环境 | 几乎所有现代 Java 项目 |
| 手动 JAR | 简单直接,无构建工具依赖 | 需要手动管理 JAR,更新麻烦 | 小型项目、快速原型、教学 |
| 连接池 | 高性能,高并发,资源复用 | 配置稍复杂 | 所有生产环境应用 |
对于新项目,强烈推荐使用 Maven + HikariCP 的组合,这是目前 Java 应用连接数据库最稳定、最高效的方案。
