杰瑞科技汇

Java SQL Server驱动如何配置与使用?

Java 连接 SQL Server 主要使用由微软官方提供的 JDBC 驱动程序,这个驱动程序是一个 .jar 文件,你需要在你的 Java 项目中引入它,然后使用标准的 JDBC API 来建立连接和执行操作。

Java SQL Server驱动如何配置与使用?-图1
(图片来源网络,侵删)

驱动程序类型

微软提供了两种类型的 JDBC 驱动程序,但目前官方推荐和广泛使用的是 Type 4 (纯 Java 驱动)

类型 描述 优点 缺点 状态
Type 4 (纯 Java 驱动) 纯 Java 实现,通过标准的套接字直接与 SQL Server 通信。 性能最好、无需客户端库、跨平台、易于部署。 无明显缺点。 强烈推荐,当前标准
Type 2 (本地 API 驱动) 使用本地方法调用(JNI)来访问 SQL Server 的 ODBC 驱动。 早期可能利用了某些 ODBC 特性。 依赖本地客户端库(如 ntwdblib.dll)、部署复杂、性能较差、有平台兼容性问题。 已过时,不推荐使用

请直接选择并使用 Type 4 JDBC Driver。


如何获取驱动程序

你需要从微软官方网站下载最新的 JDBC 驱动,下载页面会提供不同版本的驱动,以兼容不同版本的 Java 和 SQL Server。

官方下载地址: Microsoft JDBC Driver for SQL Server

Java SQL Server驱动如何配置与使用?-图2
(图片来源网络,侵删)

下载时需要注意:

  1. 版本选择:页面会提供多个版本,mssql-jdbc-12.4.0.jre11.jarmssql-jdbc-12.4.0.jre8.jar 等。
    • mssql-jdbc-... 是驱动名称。
    • 4.0 是驱动版本号。
    • jre11jre8 表示该驱动是为哪个 Java 运行时环境编译的。你应该选择与你项目使用的 JDK/JRE 版本最匹配的驱动,以确保兼容性。
  2. 下载文件:下载的是一个 .zip 压缩包,解压后你会找到一个或多个 .jar 文件,这个 .jar 文件就是你需要引入到项目中的驱动库。

如何在项目中使用驱动

获取到 .jar 文件后,你需要将其添加到你的 Java 项目的类路径中,具体方法取决于你使用的开发环境或构建工具。

a) 在 IDE 中添加 (如 IntelliJ IDEA, Eclipse)

这是最常见和简单的方式。

  1. 打开项目设置:在 IDE 中,打开项目或模块的设置/属性。
  2. 找到 Libraries:导航到 "Libraries" 或 "Dependencies" 部分。
  3. 添加 JARs:点击 "Add" 或 "Attach",然后选择你下载并解压后的 .jar 文件。
  4. 应用:确认并应用更改。

示例 (IntelliJ IDEA): File -> Project Structure -> Modules -> Dependencies -> -> JARs or directories... -> 选择你的 mssql-jdbc-xx.jar

Java SQL Server驱动如何配置与使用?-图3
(图片来源网络,侵删)

b) 使用 Maven (推荐)

如果你使用 Maven 管理项目,无需手动下载 .jar 文件,只需在 pom.xml 文件中添加以下依赖即可。

<!-- 推荐使用较新的版本,并选择与你 JDK 匹配的 classifier -->
<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <!-- 
        请根据你的 JDK 版本选择合适的版本号和 classifier
        使用 JDK 11:
    -->
    <version>12.4.0.jre11</version>
</dependency>

Maven 会自动从中央仓库下载并管理这个依赖。

c) 使用 Gradle

如果你使用 Gradle,在 build.gradle (或 build.gradle.kts) 文件中添加依赖:

// build.gradle
dependencies {
    // 推荐使用较新的版本,并选择与你 JDK 匹配的 classifier
    implementation 'com.microsoft.sqlserver:mssql-jdbc:12.4.0.jre11'
}

如何编写连接代码

驱动添加到项目后,就可以使用标准的 JDBC 流程来连接数据库了。

加载驱动类

虽然对于 JDBC 4.0 (Java 6+) 及以上版本,这一步通常是可选的(驱动会自动注册),但显式加载是一个好习惯。

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

建立连接

使用 DriverManager.getConnection() 方法,并提供数据库的 URL、用户名和密码。

连接字符串 格式: jdbc:sqlserver://[server_name][:port];[database_name];[user];[password];[property=value];...

参数说明:

  • server_name: SQL Server 实例的地址,可以是主机名、IP 地址,如果连接的是默认实例,可以省略实例名;如果连接的是命名实例(如 localhost\SQLEXPRESS),则需要写上。
  • port: 端口号,默认为 1433,如果不是默认端口,必须指定。
  • database_name: 要连接的数据库名称。
  • user: 数据库用户名。
  • password: 数据库密码。
  • encrypt=true: 强烈建议在生产环境中启用加密,以确保数据传输安全。

完整代码示例

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SqlServerConnectionExample {
    public static void main(String[] args) {
        // 1. 数据库连接信息
        // 请根据你的实际情况修改以下值
        String dbUrl = "jdbc:sqlserver://localhost:1433;databaseName=master;encrypt=true;trustServerCertificate=true;";
        String dbUser = "sa";
        String dbPassword = "your_password";
        // 2. 声明 Connection 和 Statement 对象
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            // 3. 加载 JDBC 驱动 (对于 JDBC 4.0+ 可省略,但推荐保留)
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            // 4. 建立连接
            System.out.println("正在连接到数据库...");
            conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword);
            System.out.println("连接成功!");
            // 5. 创建 Statement 对象
            stmt = conn.createStatement();
            // 6. 执行 SQL 查询
            String sql = "SELECT 'Hello, SQL Server!' as message";
            rs = stmt.executeQuery(sql);
            // 7. 处理结果集
            while (rs.next()) {
                // 通过列名获取数据
                String message = rs.getString("message");
                System.out.println("查询结果: " + message);
            }
        } catch (ClassNotFoundException e) {
            System.err.println("找不到 JDBC 驱动类,请确保已将驱动 JAR 添加到类路径中。");
            e.printStackTrace();
        } catch (SQLException e) {
            System.err.println("数据库连接或查询出错!");
            e.printStackTrace();
        } finally {
            // 8. 关闭资源 (非常重要!)
            try {
                if (rs != null) rs.close();
                if (stmt != null) stmt.close();
                if (conn != null) conn.close();
                System.out.println("数据库连接已关闭。");
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

注意

  • encrypt=true;trustServerCertificate=true; 这两个参数在本地开发或测试时非常有用,可以简化 SSL/TLS 证书的验证过程,但在生产环境中,你应该使用有效的证书并进行正确的配置,而不是简单地信任所有证书。
  • 密码等敏感信息不要硬编码在代码中,应该从配置文件或环境变量中读取。

常见问题与解决方案

Q1: No suitable driver found for jdbc:sqlserver://...

原因

  1. JDBC 驱动 .jar 文件没有正确添加到项目的类路径中。
  2. Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 这行代码被遗漏了(虽然在新版本中可能不是必须的,但缺少它可能导致此问题)。
  3. 连接字符串中的协议写错了,例如写成了 jdbc:mysql://

解决方案:检查你的项目配置,确保 .jar 文件在类路径中,并检查连接字符串。

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

原因

  1. SQL Server 服务未启动:检查 Windows 服务中 "SQL Server" 相关的服务是否正在运行。
  2. 端口错误:SQL Server 可能没有在默认的 1433 端口上监听,检查 SQL Server 配置管理器中的 TCP/IP 协议,确认端口号。
  3. 防火墙阻止:Windows 防火墙或网络防火墙可能阻止了 1433 端口的连接。
  4. 连接实例名错误:如果你在连接命名实例(如 SQLEXPRESS),确保连接字符串中写对了实例名,并且该实例正在运行。

解决方案:逐一排查上述原因,最简单的方法是使用 SQL Server Management Studio (SSMS) 能否成功连接,SSMS 能连,说明服务正常,问题可能出在 Java 端的配置或防火墙上。

Q3: Login failed for user 'sa'.

原因

  1. 用户名或密码错误。
  2. 'sa' 账户可能被禁用了,在 SSMS 中,可以右键点击服务器 -> "属性" -> "安全性",检查 "服务器身份验证" 和 "登录"。

解决方案:验证用户名密码,并确保 'sa' 账户已启用。

  1. 驱动选择:使用微软官方的 Type 4 JDBC Driver
  2. 获取驱动:从官网下载 .zip 文件,解压得到 .jar 文件。
  3. 引入项目:通过 IDE、Maven 或 Gradle 将 .jar 文件/依赖添加到项目中。
  4. 编写代码:使用标准的 JDBC API,注意连接字符串的格式和资源关闭。
  5. 排查问题:连接失败时,优先检查服务状态、端口、防火墙和用户凭证。
分享:
扫描分享到社交APP
上一篇
下一篇