Maven项目集成SQL Server的完整教程:从驱动配置到封装优化

发布于:2025-02-10 ⋅ 阅读:(46) ⋅ 点赞:(0)

前言

在最近的系统对接过程中,由于对方团队不熟悉技术,最终选择直接提供 SQL Server 视图。本文详细记录了使用 Maven 集成 SQL Server 驱动的过程,以及从配置到查询的各个关键步骤,还包括注意事项与常见问题,希望对需要快速搭建 SQL Server环境的开发者有所帮助。


一、准备工作(了解SQL Server)

1. 什么是 SQL Server?

SQL Server 是微软开发的一款关系型数据库管理系统(RDBMS)。它用于存储、管理和检索数据,广泛应用于企业级应用和数据分析场景。

2. SQL Server 的核心特点

  • 关系型数据库:基于关系模型设计,支持结构化查询语言(SQL)。
  • 跨平台支持:不仅支持 Windows,也可运行在 Linux 和 Docker 环境中。
  • 高性能与高可用性:拥有强大的查询优化器、事务支持和 Always On 技术。
  • 商业智能功能(BI):内置 SSRS、SSIS 和 SSAS,助力数据分析与决策。
  • 安全性:支持多种安全特性,如数据加密、用户权限控制等。

3. SQL Server 与 MySQL 对比分析

对比项 SQL Server MySQL
开发商 微软(闭源) Oracle(开源)
平台支持 Windows、Linux、Docker Windows、Linux、macOS
商业模式 商业为主,有免费版本 免费开源+收费企业版
性能 复杂事务性能更强 适合轻量级应用
高可用性 Always On、数据库镜像支持 配置复杂的主从复制
BI 支持 内置 BI 工具 依赖第三方工具
学习成本

通过以上对比,可以看到 SQL Server 更适合企业级复杂业务场景,而 MySQL 更适用于轻量级 Web 应用开发。


二、如何集成 SQL Server 驱动

1. Maven 项目依赖配置

pom.xml 中添加以下依赖:

<!-- sqlserver jdbc驱动 -->
<dependency>
  <groupId>com.microsoft.sqlserver</groupId>
  <artifactId>mssql-jdbc</artifactId>
  <!-- 根据 JDK 版本选择合适的依赖 -->
  <version>12.8.1.jre11</version> 
</dependency>

提示:如果使用 JDK 8,请将 jre11 替换为 jre8。本文基于 JDK 21,因此使用 jre11

2. 数据库连接参数设置

在 Java 代码中配置连接 SQL Server 的参数:

private static final String URL = "jdbc:sqlserver://127.0.0.1:46618;databaseName=databaseName;encrypt=true;trustServerCertificate=true;";
private static final String USER = "user";
private static final String PASSWORD = "123456";

说明

  • jdbc:sqlserver://:使用 SQL Server 的 JDBC 驱动(Maven中已引入)。
  • 127.0.0.1:服务器地址(修改为对应的服务器地址)。
  • :46618:端口号(默认 1433)。
  • databaseName=databaseName:要连接的数据库名称(修改为对应的数据库)。
  • encrypt=truetrustServerCertificate=true:启用加密并信任服务器证书(如果没有该配置,需要手动验证)。

3. 注册驱动并连接数据库

以下代码展示了如何注册驱动、建立连接并执行查询:

try {
    // 注册驱动(防止自动装载错误)
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    // 获取连接
    Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
    Statement stmt = conn.createStatement();
    
    // 查询语句
    String sql = "SELECT * FROM dbo.table";
    ResultSet rs = stmt.executeQuery(sql);
    
    // 遍历查询结果
    while (rs.next()) {
    	// 输出第一列数据
        System.out.println(rs.getString(1)); 
    }
} catch (Exception e) {
    e.printStackTrace(); 
    // 错误处理
}

注意:确保驱动已正确加载,查询结果需根据实际需求封装处理。


4. 测试查询结果

连接成功后,可以使用以下代码执行 SQL 查询:

String sql = "SELECT * FROM dbo.table";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);

while (rs.next()) {
	// 输出第一列数据
    System.out.println("列值:" + rs.getString(1)); 
}

三、代码优化与封装

为了提高代码的复用性和可维护性,可以将常用的操作封装成工具类:

public class SqlServerUtil {
    private static final String URL = "...";
    private static final String USER = "...";
    private static final String PASSWORD = "...";

    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL, USER, PASSWORD);
    }

    public static JSONArray executeQuery(String query) {
        JSONArray result = new JSONArray();
        try (Connection conn = getConnection();
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery(query)) {
            while (rs.next()) {
                JSONObject row = new JSONObject();
                int columnCount = rs.getMetaData().getColumnCount();
                for (int i = 1; i <= columnCount; i++) {
                    row.put(rs.getMetaData().getColumnName(i), rs.getObject(i));
                }
                result.add(row);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return result;
    }
}

此工具类支持查询结果的 JSON 格式化输出,方便前端或其他服务使用。


结语

通过本文,您可以快速集成 SQL Server 驱动并实现基础的查询操作。在生产环境中,还可以进一步优化代码,例如引入连接池(如HikariCP)、实现高级加密等。