杰瑞科技汇

Java如何连接SQL Server 2005?

核心概念

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

Java如何连接SQL Server 2005?-图1
(图片来源网络,侵删)
  1. JDBC 驱动:一个特定的 JAR 文件,充当 Java 应用程序和 SQL Server 数据库之间的翻译官,你需要下载并引入这个 JAR 文件到你的项目中。
  2. 数据库 URL:一个字符串,告诉 JDBC 驱动连接哪个数据库服务器、哪个端口、哪个数据库实例。
  3. 连接对象:代表与数据库的一个活动连接。
  4. Statement / PreparedStatement:用于执行 SQL 语句的对象。
  5. ResultSet:一个结果集对象,用于存储查询返回的数据。

第一步:下载并配置 JDBC 驱动

对于 SQL Server 2005,你需要使用 Microsoft SQL Server JDBC Driver 3.0 或更早的版本。

下载驱动

  1. 官方下载地址

  2. 解压并找到 JAR 文件

    • 解压下载的文件。
    • sqljdbc_3.0\enu\ 目录下,你会找到关键的 JAR 文件:sqljdbc.jar,这就是你需要引入到项目中的驱动。

如何将驱动引入你的项目

根据你使用的开发工具,方法不同:

Java如何连接SQL Server 2005?-图2
(图片来源网络,侵删)

对于 Eclipse / IntelliJ IDEA 等IDE:

  1. 右键点击你的项目 -> Build Path (或 Project Structure) -> Configure Build Path
  2. LibrariesDependencies 标签页下,点击 Add External JARs... (或类似按钮)。
  3. 浏览并选择你刚刚解压出的 sqljdbc.jar 文件。
  4. 点击 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 身份验证

Java如何连接SQL Server 2005?-图3
(图片来源网络,侵删)

数据库 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\x86auth\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();
        }
    }
}

最佳实践

  1. 使用 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();
        // ... 处理结果
    }
  2. 总是使用 try-with-resources: 从 Java 7 开始,推荐使用 try-with-resources 语句,它可以自动实现 AutoCloseable 接口的资源(如 Connection, Statement, ResultSet),确保它们在使用后被正确关闭,避免资源泄漏。

  3. 配置连接池: 在实际生产应用中,不要每次请求都创建和销毁连接,这非常消耗资源,应该使用连接池(如 Apache DBCP, C3P0, HikariCP)来管理数据库连接,连接池会预先创建一组连接,应用程序从中“借用”和“归还”,大大提高了性能。


常见问题与解决方案

问题 1: The TCP/IP connection to the host has failed

  • 错误信息: java.net.ConnectException: Connection refused: connect
  • 原因:
    1. SQL Server 服务没有启动。
    2. 防火墙阻止了端口 1433 的连接。
    3. 数据库服务器地址或端口号写错。
  • 解决方案:
    1. 在 Windows 服务中找到 SQL Server (MSSQLSERVER) 并确保其正在运行。
    2. 检查 Windows 防火墙设置,允许 1433 端口的入站连接。
    3. 使用 ping 命令测试服务器是否可达,并确认端口号正确。

问题 2: Login failed for user '...'. The user is not associated with a trusted SQL Server connection

  • 原因:
    • 你使用的是 SQL Server 身份验证(用户名/密码),但 SQL Server 实例只启用了 Windows 身份验证模式
  • 解决方案:
    1. 修改 SQL Server 配置:
      • 打开 SQL Server Management Studio (SSMS)
      • 右键点击服务器 -> 属性
      • 安全性 页面,将 服务器身份验证Windows 身份验证模式 改为 Windows 身份验证模式和 SQL Server 身份验证模式
      • 重启 SQL Server 服务使配置生效。
    2. 或者,修改你的 Java 代码,改用 Windows 身份验证(如果环境允许)。

问题 3: No suitable driver found for jdbc:sqlserver://...

  • 原因:
    1. sqljdbc.jar 文件没有被正确添加到项目的 Classpath 中。
    2. 驱动版本与你的 Java 版本不兼容(使用旧版驱动连接新版本的 JDK 可能会有问题,但通常 JDBC 驱动对 JDK 版本的兼容性较好)。
  • 解决方案:
    1. 仔细检查你的项目构建路径,确保 sqljdbc.jar 已经添加。
    2. 确保你的 Java 代码中加载了驱动(虽然对于 JDBC 4.0+,通常不需要显式调用 Class.forName(),但有时显式调用可以避免问题)。
      // 在 DriverManager.getConnection 之前加上这一行
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

连接 Java 和 SQL Server 2005 的核心步骤是:

  1. 下载 sqljdbc.jar 驱动并添加到项目。
  2. 编写正确的 数据库 URL
  3. 使用 DriverManager.getConnection() 获取连接。
  4. 使用 try-with-resources 安全地执行 SQL 并处理结果。
  5. 遵循 最佳实践,如使用 PreparedStatement 和连接池。

虽然 SQL Server 2005 已经过时,但理解这个连接过程对于维护旧系统或学习 JDBC 基础非常有帮助。

分享:
扫描分享到社交APP
上一篇
下一篇