杰瑞科技汇

java 连接 sql2005

核心概念

  1. JDBC: Java 访问数据库的 API,它定义了一套标准接口,但具体实现由数据库厂商提供。
  2. JDBC Driver (驱动): 数据库厂商提供的实现类,是 Java 应用与数据库之间的“桥梁”,你需要为 SQL Server 2005 下载对应的 JDBC 驱动。
  3. 连接字符串: 一段特殊的 URL 格式的字符串,告诉 JDBC 驱动如何连接到数据库,包括服务器地址、端口、数据库名称等信息。

第一步:环境准备

  1. Java 开发环境 (JDK): 确保你的电脑上已经安装了 JDK (JDK 8 或更高版本),并配置好了 JAVA_HOME 环境变量。
  2. 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,你需要从微软的官方归档站点下载。

java 连接 sql2005-图1
(图片来源网络,侵删)
  1. 下载地址: Microsoft JDBC Driver 3.0 for SQL Server
  2. 下载文件: 下载 sqljdbc_3.0.zip 文件。
  3. 解压: 解压下载的 ZIP 文件,你会看到一个 sqljdbc_3.0 文件夹,里面包含:
    • enu: 英文版本的驱动文件。
    • src: 驱动的源代码。
    • x64: 针对 64 位操作系统的 DLL 文件。
    • x86: 针对 32 位操作系统的 DLL 文件。

第三步:配置项目

你需要将 JDBC 驱动的 JAR 文件添加到你的 Java 项目的类路径中。

对于 IDE (如 Eclipse, IntelliJ IDEA)

  1. 找到解压目录下的 enu 文件夹。
  2. sqljdbc.jar 文件复制到你的项目中。
  3. 在你的 IDE 中,右键点击你的项目 -> Build Path / Project Structure -> Libraries -> Add External JARs...
  4. 选择并添加 sqljdbc.jar 文件。

对于命令行项目

  1. sqljdbc.jar 文件放在你的项目目录下,lib 文件夹。
  2. 在编译和运行时,使用 -cp (classpath) 参数指定 JAR 文件的位置。
# 编译
javac -cp ".;lib\sqljdbc.jar" YourJavaFile.java
# 运行
java -cp ".;lib\sqljdbc.jar" YourJavaFile

注意: 在 Windows 系统中,类路径分隔符是分号 ,在 Linux 或 macOS 中是冒号 。


第四步:编写 Java 连接代码

下面是一个完整的示例代码,演示了如何连接到 SQL Server 2005 数据库,并执行一个简单的查询。

关键点:

java 连接 sql2005-图2
(图片来源网络,侵删)
  • 连接字符串格式: 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();
        }
    }
}

代码详解

  1. 加载驱动:

    • Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    • 这行代码的作用是告诉 JVM 加载 JDBC 驱动类,对于新版驱动,这步通常可以省略,因为 DriverManager 会自动扫描,但对于旧版驱动(如 3.0 版),这步是必需的
    • 如果你使用的是 Java 7 或更高版本,try-with-resources 语法可以简化资源管理。
  2. 建立连接:

    • DriverManager.getConnection(DB_URL, USER, PASS);
    • 这是核心方法,它使用你提供的连接字符串、用户名和密码来创建一个数据库连接对象 Connection
  3. 创建语句:

    • conn.createStatement();
    • 通过 Connection 对象创建一个 Statement 对象,用于执行 SQL 语句。
  4. 执行查询:

    java 连接 sql2005-图3
    (图片来源网络,侵删)
    • stmt.executeQuery("SELECT ...");
    • executeQuery() 用于执行会返回结果集的 SQL 查询(如 SELECT),返回一个 ResultSet 对象。
  5. 处理结果集:

    • while (rs.next()) { ... }
    • ResultSet 的游标初始位置在第一条记录之前。rs.next() 方法将游标向下移动一行,如果成功移动(即还有下一行),则返回 true
    • rs.getString("Message") 根据列名获取该列的值。
  6. 关闭资源:

    • try-with-resources 语句会自动在 try 块执行完毕后,按相反顺序关闭 Connection, Statement, 和 ResultSet,这是最佳实践。

第五步:常见问题与解决方案

ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver

  • 原因: JDBC 驱动 JAR 文件没有被正确添加到项目的类路径中。
  • 解决:
    1. 检查 sqljdbc.jar 是否在项目目录中。
    2. 检查 IDE 的 Build Path / Project Libraries 是否包含了该 JAR。
    3. 如果使用命令行,确保 -cp 参数的路径正确。

SQLException: The TCP/IP connection to the host localhost, port 1433 has failed

  • 原因: Java 程序无法通过网络连接到 SQL Server 服务。
  • 解决:
    1. 检查 SQL Server 服务: 确保你的 SQL Server 2005 服务正在运行,可以在 Windows 的 "服务" 中找到 "SQL Server (...)" 并启动它。
    2. 检查防火墙: Windows 防火墙可能阻止了端口 1433 的连接,尝试暂时关闭防火墙进行测试,或在防火墙中为 sqlservr.exe 添加入站规则,允许 1433 端口的流量。
    3. 检查端口号: 确认你的 SQL Server 实例确实在监听 1433 端口,可以通过 SQL Server 配置管理器 (SQL Server Configuration Manager) -> SQL Server 网络配置 -> TCP/IP 属性来检查。
    4. 检查 SQL Server 配置: 在 SQL Server 配置管理器中,确保 "TCP/IP" 协议是启用状态。

SQLException: Login failed for user 'your_username'.

  • 原因: 用户名或密码错误,或者该用户没有权限访问指定的数据库。
  • 解决:
    1. 核对用户名密码: 确保输入的用户名和密码完全正确,注意大小写。
    2. 检查数据库用户: 确认该登录账户在你要连接的数据库中有一个对应的用户,并且有 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 驱动,升级不仅能解决安全问题,还能获得更好的性能、稳定性和新功能。

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