核心概念
在 Java 中连接任何数据库,都需要遵循标准的 JDBC (Java Database Connectivity) 规范,这个过程主要涉及以下几个部分:

- JDBC 驱动:一个特定的 JAR 文件,充当 Java 应用程序和 SQL Server 数据库之间的翻译官,你需要下载并引入这个 JAR 文件到你的项目中。
- 数据库 URL:一个字符串,告诉 JDBC 驱动连接哪个数据库服务器、哪个端口、哪个数据库实例。
- 连接对象:代表与数据库的一个活动连接。
- Statement / PreparedStatement:用于执行 SQL 语句的对象。
- ResultSet:一个结果集对象,用于存储查询返回的数据。
第一步:下载并配置 JDBC 驱动
对于 SQL Server 2005,你需要使用 Microsoft SQL Server JDBC Driver 3.0 或更早的版本。
下载驱动
-
官方下载地址:
- Microsoft SQL Server JDBC Driver 3.0 (推荐用于 SQL Server 2005): https://www.microsoft.com/en-us/download/details.aspx?id=11774
- 下载后,你会得到一个
.zip压缩包。
-
解压并找到 JAR 文件:
- 解压下载的文件。
- 在
sqljdbc_3.0\enu\目录下,你会找到关键的 JAR 文件:sqljdbc.jar,这就是你需要引入到项目中的驱动。
如何将驱动引入你的项目
根据你使用的开发工具,方法不同:

对于 Eclipse / IntelliJ IDEA 等IDE:
- 右键点击你的项目 ->
Build Path(或Project Structure) ->Configure Build Path。 - 在
Libraries或Dependencies标签页下,点击Add External JARs...(或类似按钮)。 - 浏览并选择你刚刚解压出的
sqljdbc.jar文件。 - 点击
OK,现在你的项目就可以使用这个驱动了。
对于 Maven 项目:
如果你使用 Maven,可以直接在 pom.xml 文件中添加依赖,虽然这个驱动很老,但 Maven Central 上仍有托管。
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc</artifactId>
<version>3.0.1803.100</version> <!-- 这是 3.0 版本的一个可用版本号 -->
</dependency>
第二步:编写 Java 连接代码
连接 SQL Server 2005 有两种主要的认证方式:Windows 身份验证 和 SQL Server 身份验证。

数据库 URL 格式
- 基本格式:
jdbc:sqlserver://[server_name]:[port];databaseName=[db_name] - 默认端口: SQL Server 的默认端口是
1433。 - 服务器名称: 可以是 IP 地址 (如
168.1.100) 或计算机名。
示例代码
使用 SQL Server 身份验证 (用户名/密码)
这是最常见的方式,尤其是在混合模式(Windows 和 SQL Server 身份验证都启用)下。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SqlServer2005JdbcExample {
// --- 数据库连接信息 ---
// 请根据你的实际情况修改这些值
private static final String DB_URL = "jdbc:sqlserver://localhost:1433;databaseName=YourDatabaseName";
private static final String USER = "your_username"; // 你的 SQL Server 用户名
private static final String PASS = "your_password"; // 你的 SQL Server 密码
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 2005!' AS Greeting")) {
// 检查连接是否成功
if (conn != null) {
System.out.println("成功连接到 SQL Server 2005 数据库!");
}
// 处理查询结果
while (rs.next()) {
// 通过列名获取数据
String greeting = rs.getString("Greeting");
System.out.println("查询结果: " + greeting);
}
} catch (SQLException e) {
// 捕获并打印 SQL 异常
System.err.println("数据库连接或查询失败!");
e.printStackTrace();
}
}
}
使用 Windows 身份验证
如果你的 SQL Server 2005 实例配置为仅使用 Windows 身份验证,并且你的 Java 应用程序运行在 Windows 环境下,可以使用这种方式。
注意:为了使用 Windows 身份验证,你需要一个额外的 JAR 文件 sqljdbc_auth.dll,这个文件在下载的驱动包的 auth\x86 或 auth\x64 目录下,你需要将这个 DLL 文件复制到你的 Java 安装目录的 bin 文件夹下(C:\Program Files\Java\jdk-11.0.12\bin),或者将其所在目录添加到系统的 PATH 环境变量中。
修改后的 URL 和代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class SqlServerWindowsAuthExample {
// --- 数据库连接信息 (使用 Windows 身份验证) ---
private static final String DB_URL = "jdbc:sqlserver://localhost:1433;databaseName=YourDatabaseName;integratedSecurity=true";
public static void main(String[] args) {
// try-with-resources 语句
try (Connection conn = DriverManager.getConnection(DB_URL)) {
if (conn != null) {
System.out.println("成功使用 Windows 身份验证连接到 SQL Server 2005 数据库!");
}
} catch (SQLException e) {
System.err.println("数据库连接失败!");
System.err.println("请确保: 1. SQL Server 配置了 Windows 身份验证,2. sqljdbc_auth.dll 已正确放置。");
e.printStackTrace();
}
}
}
最佳实践
-
使用
PreparedStatement防止 SQL 注入: 对于任何包含用户输入的 SQL 查询,都应该使用PreparedStatement,它不仅更安全,而且性能通常更好。String sql = "SELECT * FROM Users WHERE username = ? AND password = ?"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, userInputUsername); pstmt.setString(2, userInputPassword); ResultSet rs = pstmt.executeQuery(); // ... 处理结果 } -
总是使用
try-with-resources: 从 Java 7 开始,推荐使用try-with-resources语句,它可以自动实现AutoCloseable接口的资源(如Connection,Statement,ResultSet),确保它们在使用后被正确关闭,避免资源泄漏。 -
配置连接池: 在实际生产应用中,不要每次请求都创建和销毁连接,这非常消耗资源,应该使用连接池(如 Apache DBCP, C3P0, HikariCP)来管理数据库连接,连接池会预先创建一组连接,应用程序从中“借用”和“归还”,大大提高了性能。
常见问题与解决方案
问题 1: The TCP/IP connection to the host has failed
- 错误信息:
java.net.ConnectException: Connection refused: connect - 原因:
- SQL Server 服务没有启动。
- 防火墙阻止了端口
1433的连接。 - 数据库服务器地址或端口号写错。
- 解决方案:
- 在 Windows 服务中找到
SQL Server (MSSQLSERVER)并确保其正在运行。 - 检查 Windows 防火墙设置,允许
1433端口的入站连接。 - 使用
ping命令测试服务器是否可达,并确认端口号正确。
- 在 Windows 服务中找到
问题 2: Login failed for user '...'. The user is not associated with a trusted SQL Server connection
- 原因:
- 你使用的是 SQL Server 身份验证(用户名/密码),但 SQL Server 实例只启用了 Windows 身份验证模式。
- 解决方案:
- 修改 SQL Server 配置:
- 打开 SQL Server Management Studio (SSMS)。
- 右键点击服务器 ->
属性。 - 在
安全性页面,将服务器身份验证从Windows 身份验证模式改为Windows 身份验证模式和 SQL Server 身份验证模式。 - 重启 SQL Server 服务使配置生效。
- 或者,修改你的 Java 代码,改用 Windows 身份验证(如果环境允许)。
- 修改 SQL Server 配置:
问题 3: No suitable driver found for jdbc:sqlserver://...
- 原因:
sqljdbc.jar文件没有被正确添加到项目的Classpath中。- 驱动版本与你的 Java 版本不兼容(使用旧版驱动连接新版本的 JDK 可能会有问题,但通常 JDBC 驱动对 JDK 版本的兼容性较好)。
- 解决方案:
- 仔细检查你的项目构建路径,确保
sqljdbc.jar已经添加。 - 确保你的 Java 代码中加载了驱动(虽然对于 JDBC 4.0+,通常不需要显式调用
Class.forName(),但有时显式调用可以避免问题)。// 在 DriverManager.getConnection 之前加上这一行 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
- 仔细检查你的项目构建路径,确保
连接 Java 和 SQL Server 2005 的核心步骤是:
- 下载
sqljdbc.jar驱动并添加到项目。 - 编写正确的 数据库 URL。
- 使用
DriverManager.getConnection()获取连接。 - 使用
try-with-resources安全地执行 SQL 并处理结果。 - 遵循 最佳实践,如使用
PreparedStatement和连接池。
虽然 SQL Server 2005 已经过时,但理解这个连接过程对于维护旧系统或学习 JDBC 基础非常有帮助。
