杰瑞科技汇

Java如何连接SQL Server数据库?

核心概念

在开始之前,需要理解几个基本概念:

Java如何连接SQL Server数据库?-图1
(图片来源网络,侵删)
  • JDBC (Java Database Connectivity): Java 提供的一套用于执行 SQL 语句的 API,它本身是一个接口规范,由不同的数据库厂商(如 Microsoft, Oracle)来实现具体的驱动程序。
  • JDBC Driver (驱动程序): 这是连接 Java 应用和数据库的“桥梁”,你需要为 SQL Server 数据库下载并引入对应的 JDBC Driver。
  • Connection String (连接字符串): 一个包含数据库连接信息的特殊格式的字符串,告诉 JDBC Driver 如何连接到数据库,它通常包括服务器地址、端口、数据库名、用户名和密码。

环境准备

1. 准备 SQL Server 数据库

确保你有一个可用的 SQL Server 实例,并且已经创建了一个要连接的数据库。

我们创建一个名为 mytestdb 的数据库,并在其中创建一个 students 表:

-- 创建数据库 (如果不存在)
IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = 'mytestdb')
BEGIN
    CREATE DATABASE mytestdb;
END
GO
USE mytestdb;
GO
-- 创建学生表 (如果不存在)
IF NOT EXISTS (SELECT * FROM sysobjects WHERE name='students' and xtype='U')
BEGIN
    CREATE TABLE students (
        id INT PRIMARY KEY IDENTITY(1,1),
        name NVARCHAR(50) NOT NULL,
        age INT,
        enrollment_date DATE
    );
END
GO
-- 插入一些测试数据
INSERT INTO students (name, age, enrollment_date) VALUES
('张三', 20, '2025-09-01'),
('李四', 21, '2025-09-01'),
('王五', 22, '2025-09-02');
GO

2. 下载 SQL Server JDBC Driver

你需要从 Microsoft 官网下载 JDBC Driver。

  1. 访问下载页面: Microsoft JDBC Driver for SQL Server
  2. 选择版本: 根据你的 Java 版本和 SQL Server 版本选择合适的驱动,对于大多数新项目,推荐使用 JDBC 8.4 (或更高版本),因为它支持 Java 8 到 Java 17+。
  3. 下载: 下载后你会得到一个 .zip 压缩包。
  4. 添加到项目: 解压压缩包,找到 mssql-jdbc-<version>.jar 文件(mssql-jdbc-11.2.3.jre17.jar),你需要将这个 JAR 文件添加到你的 Java 项目的类路径中。

如何添加 JAR 文件到项目:

Java如何连接SQL Server数据库?-图2
(图片来源网络,侵删)
  • IDE (如 IntelliJ IDEA 或 Eclipse): 右键你的项目 -> Open Module Settings / Build Path -> Libraries -> Add External JARs... -> 选择你下载的 JAR 文件。
  • Maven 项目: 在你的 pom.xml 文件中添加以下依赖。
  • Gradle 项目: 在你的 build.gradle 文件中添加以下依赖。

Maven pom.xml 依赖:

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>11.2.3.jre17</version> <!-- 请使用最新的版本号 -->
</dependency>

Gradle build.gradle 依赖:

implementation 'com.microsoft.sqlserver:mssql-jdbc:11.2.3.jre17' // 请使用最新的版本号

连接字符串

连接字符串是成功连接的关键,SQL Server 的连接字符串格式如下:

jdbc:sqlserver://[server_name][:port];databaseName=[db_name];user=[user];password=[password];
  • jdbc:sqlserver://: 协定头,固定不变。
  • [server_name]: SQL Server 服务器的地址,可以是:
    • localhost0.0.1 (如果数据库在本地运行)
    • 远程服务器的 IP 地址或主机名 (如 168.1.100SERVER01)
  • [:port]: 端口号,SQL Server 默认端口是 1433,如果使用默认端口,可以省略 1433
  • databaseName=[db_name]: 你要连接的数据库名称 (mytestdb)。
  • user=[user]: 数据库的用户名 (sa)。
  • password=[password]: 对应用户的密码。

示例连接字符串:

Java如何连接SQL Server数据库?-图3
(图片来源网络,侵删)
  • 本地连接,默认端口: jdbc:sqlserver://localhost;databaseName=mytestdb;user=sa;password=your_password;
  • 远程连接,指定端口: jdbc:sqlserver=my-server.com;port=1433;databaseName=mytestdb;user=myuser;password=mypassword;

Java 代码示例

下面是一个完整的 Java 类,演示了如何连接到 SQL Server,执行查询,并处理结果。

最佳实践: 使用 try-with-resources 语句来自动关闭 Connection, Statement, 和 ResultSet,防止资源泄漏。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SqlServerJdbcExample {
    // --- 请根据你的环境修改以下信息 ---
    private static final String DB_URL = "jdbc:sqlserver://localhost;databaseName=mytestdb;encrypt=false;trustServerCertificate=true;";
    private static final String USER = "sa";
    private static final String PASS = "your_password"; // 替换为你的 sa 密码
    // ------------------------------------
    public static void main(String[] args) {
        // 使用 try-with-resources 确保 Connection, Statement, ResultSet 被自动关闭
        try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT id, name, age FROM students")) {
            // 检查连接是否成功
            if (conn != null) {
                System.out.println("成功连接到 SQL Server 数据库!");
            }
            System.out.println("----- 学生列表 -----");
            // 遍历结果集
            while (rs.next()) {
                // 通过列名获取数据,更安全且可读性更好
                int id = rs.getInt("id");
                String name = rs.getString("name");
                int age = rs.getInt("age");
                // 输出数据
                System.out.println("ID: " + id + ", 姓名: " + name + ", 年龄: " + age);
            }
        } catch (SQLException e) {
            // 处理 SQL 异常
            System.err.println("数据库连接或查询失败: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

代码解释:

  1. 加载驱动 (在现代 JDBC 驱动中可选): 在较旧的版本中,需要显式加载驱动:Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");,但从 JDBC 4.0 (Java 6) 开始,只要驱动 JAR 在类路径中,驱动管理器会自动加载驱动,所以这行代码通常可以省略。

  2. 获取连接 (DriverManager.getConnection): 这是建立连接的核心方法,它接收连接字符串、用户名和密码作为参数,并返回一个 Connection 对象。

  3. 创建语句 (conn.createStatement): Connection 对象用于创建 Statement 对象,Statement 用于执行 SQL 查询。

  4. 执行查询 (stmt.executeQuery): 执行一个 SQL SELECT 查询,并返回一个 ResultSet 对象,该对象包含了查询的结果集。

  5. 处理结果 (rs.next()rs.getXXX):

    • rs.next(): 将光标移动到结果集的下一行,如果下一行存在,返回 true,否则返回 false,通常用于 while 循环来遍历所有行。
    • rs.getString("name"), rs.getInt("age"): 根据列名或列索引获取当前行的数据,推荐使用列名,因为代码更具可读性,并且在表结构微调(如列顺序改变)时不易出错。
  6. 资源管理 (try-with-resources): try 语句中的括号内声明的资源(实现了 AutoCloseable 接口,如 Connection, Statement, ResultSet)会在 try 块执行完毕后自动调用其 `close

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