核心概念
- JDBC: Java 访问数据库的 API,它定义了一套标准接口,但具体实现由数据库厂商提供。
- JDBC Driver (驱动): 数据库厂商提供的实现类,是 Java 应用与数据库之间的“桥梁”,你需要为 SQL Server 2005 下载对应的 JDBC 驱动。
- 连接字符串: 一段特殊的 URL 格式的字符串,告诉 JDBC 驱动如何连接到数据库,包括服务器地址、端口、数据库名称等信息。
第一步:环境准备
- Java 开发环境 (JDK): 确保你的电脑上已经安装了 JDK (JDK 8 或更高版本),并配置好了
JAVA_HOME环境变量。 - SQL Server 2005 实例: 确保你的 SQL Server 2005 服务正在运行,并且你知道以下信息:
- 服务器地址: 通常是
localhost(如果数据库在本地) 或一个 IP 地址 (如168.1.100)。 - 端口号: SQL Server 默认端口是
1433,如果安装时修改过,请使用实际端口。 - 数据库名称: 你要连接的数据库的名字 (如
mydb)。 - 用户名和密码: 具有访问该数据库权限的 SQL Server 登录账户。
- 服务器地址: 通常是
第二步:下载 SQL Server JDBC 驱动
SQL Server 2005 的 JDBC 驱动版本是 0,你需要从微软的官方归档站点下载。

- 下载地址: Microsoft JDBC Driver 3.0 for SQL Server
- 下载文件: 下载
sqljdbc_3.0.zip文件。 - 解压: 解压下载的 ZIP 文件,你会看到一个
sqljdbc_3.0文件夹,里面包含:enu: 英文版本的驱动文件。src: 驱动的源代码。x64: 针对 64 位操作系统的 DLL 文件。x86: 针对 32 位操作系统的 DLL 文件。
第三步:配置项目
你需要将 JDBC 驱动的 JAR 文件添加到你的 Java 项目的类路径中。
对于 IDE (如 Eclipse, IntelliJ IDEA)
- 找到解压目录下的
enu文件夹。 - 将
sqljdbc.jar文件复制到你的项目中。 - 在你的 IDE 中,右键点击你的项目 -> Build Path / Project Structure -> Libraries -> Add External JARs...。
- 选择并添加
sqljdbc.jar文件。
对于命令行项目
- 将
sqljdbc.jar文件放在你的项目目录下,lib文件夹。 - 在编译和运行时,使用
-cp(classpath) 参数指定 JAR 文件的位置。
# 编译 javac -cp ".;lib\sqljdbc.jar" YourJavaFile.java # 运行 java -cp ".;lib\sqljdbc.jar" YourJavaFile
注意: 在 Windows 系统中,类路径分隔符是分号 ,在 Linux 或 macOS 中是冒号 。
第四步:编写 Java 连接代码
下面是一个完整的示例代码,演示了如何连接到 SQL Server 2005 数据库,并执行一个简单的查询。
关键点:

- 连接字符串格式:
jdbc:sqlserver://[serverName]:[port];databaseName=[databaseName] - 加载驱动:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); - 处理异常: 数据库操作必须放在
try-catch-finally块中,以确保资源(如连接)被正确关闭。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SqlServer2005Connector {
// --- 请根据你的实际情况修改以下信息 ---
private static final String DB_URL = "jdbc:sqlserver://localhost:1433;databaseName=your_database_name";
private static final String USER = "your_username";
private static final String PASS = "your_password";
// -----------------------------------------
public static void main(String[] args) {
// try-with-resources 语句 (Java 7+),可以自动关闭资源
try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT 'Hello from SQL Server 2005!' as Message")) {
// 检查连接是否成功
if (conn != null) {
System.out.println("连接到 SQL Server 2005 成功!");
}
// 处理查询结果
while (rs.next()) {
// 通过列名获取数据
String message = rs.getString("Message");
System.out.println("查询结果: " + message);
}
} catch (SQLException e) {
// 处理 SQL 异常
System.err.println("数据库连接或查询失败!");
e.printStackTrace();
} catch (ClassNotFoundException e) {
// 处理驱动未找到异常
System.err.println("找不到 JDBC 驱动!");
e.printStackTrace();
}
}
}
代码详解
-
加载驱动:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");- 这行代码的作用是告诉 JVM 加载 JDBC 驱动类,对于新版驱动,这步通常可以省略,因为
DriverManager会自动扫描,但对于旧版驱动(如 3.0 版),这步是必需的。 - 如果你使用的是 Java 7 或更高版本,
try-with-resources语法可以简化资源管理。
-
建立连接:
DriverManager.getConnection(DB_URL, USER, PASS);- 这是核心方法,它使用你提供的连接字符串、用户名和密码来创建一个数据库连接对象
Connection。
-
创建语句:
conn.createStatement();- 通过
Connection对象创建一个Statement对象,用于执行 SQL 语句。
-
执行查询:
(图片来源网络,侵删)stmt.executeQuery("SELECT ...");executeQuery()用于执行会返回结果集的 SQL 查询(如SELECT),返回一个ResultSet对象。
-
处理结果集:
while (rs.next()) { ... }ResultSet的游标初始位置在第一条记录之前。rs.next()方法将游标向下移动一行,如果成功移动(即还有下一行),则返回true。rs.getString("Message")根据列名获取该列的值。
-
关闭资源:
try-with-resources语句会自动在try块执行完毕后,按相反顺序关闭Connection,Statement, 和ResultSet,这是最佳实践。
第五步:常见问题与解决方案
ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
- 原因: JDBC 驱动 JAR 文件没有被正确添加到项目的类路径中。
- 解决:
- 检查
sqljdbc.jar是否在项目目录中。 - 检查 IDE 的 Build Path / Project Libraries 是否包含了该 JAR。
- 如果使用命令行,确保
-cp参数的路径正确。
- 检查
SQLException: The TCP/IP connection to the host localhost, port 1433 has failed
- 原因: Java 程序无法通过网络连接到 SQL Server 服务。
- 解决:
- 检查 SQL Server 服务: 确保你的 SQL Server 2005 服务正在运行,可以在 Windows 的 "服务" 中找到 "SQL Server (...)" 并启动它。
- 检查防火墙: Windows 防火墙可能阻止了端口 1433 的连接,尝试暂时关闭防火墙进行测试,或在防火墙中为
sqlservr.exe添加入站规则,允许 1433 端口的流量。 - 检查端口号: 确认你的 SQL Server 实例确实在监听 1433 端口,可以通过 SQL Server 配置管理器 (SQL Server Configuration Manager) -> SQL Server 网络配置 -> TCP/IP 属性来检查。
- 检查 SQL Server 配置: 在 SQL Server 配置管理器中,确保 "TCP/IP" 协议是启用状态。
SQLException: Login failed for user 'your_username'.
- 原因: 用户名或密码错误,或者该用户没有权限访问指定的数据库。
- 解决:
- 核对用户名密码: 确保输入的用户名和密码完全正确,注意大小写。
- 检查数据库用户: 确认该登录账户在你要连接的数据库中有一个对应的用户,并且有
public角色(这是最低权限)或其他必要的权限。
SQLException: The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption.
- 原因: SQL Server 2005 默认可能要求加密连接,但旧版驱动可能无法处理或配置不匹配。
- 解决:
- 在连接字符串中添加
encrypt=false参数来禁用加密。 - 修改后的连接字符串:
private static final String DB_URL = "jdbc:sqlserver://localhost:1433;databaseName=your_database_name;encrypt=false";
- 在连接字符串中添加
总结与升级建议
| 项目 | SQL Server 2005 (JDBC 3.0) | 现代 SQL Server (JDBC 4.x / 12.x) |
|---|---|---|
| 驱动版本 | sqljdbc.jar (3.0) |
mssql-jdbc.jar (12.x 或更高) |
| 驱动类名 | com.microsoft.sqlserver.jdbc.SQLServerDriver |
com.microsoft.sqlserver.jdbc.SQLServerDriver |
| 连接字符串 | jdbc:sqlserver://... |
jdbc:sqlserver://... |
| 加载驱动 | 必须 Class.forName(...) |
可选,通常可省略 |
| 安全性 | 弱,存在已知漏洞 | 强,支持最新的加密和身份验证 |
| 功能 | 功能有限 | 支持所有新特性,如 Always Encrypted, JSON 等 |
重要建议: 由于 SQL Server 2005 已于 2012 年停止支持,存在严重的安全风险,并且不再接收安全更新。强烈建议你尽快升级到更高版本的 SQL Server (如 2025, 2025, 2025) 和对应的最新版 JDBC 驱动,升级不仅能解决安全问题,还能获得更好的性能、稳定性和新功能。
