You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何封装JDBC连接MySQL的try-catch代码块以复用,仅编写自定义逻辑?

JDBC重复try-catch代码块的通用封装方案

当然可以封装,利用Java的函数式接口就能把重复的try-with-resources和异常处理逻辑抽出来,只需要传入自定义业务代码即可,具体实现如下:

1. 定义函数式接口

因为JDBC操作会抛出SQLException(受检异常),而Java内置的Consumer等函数式接口不支持抛出受检异常,所以需要自定义一个接口来承载业务逻辑:

@FunctionalInterface
public interface JdbcOperation {
    void execute(Connection conn, Statement stmt, ResultSet rs) throws SQLException;
}

2. 封装通用执行方法

把重复的连接创建、语句执行、资源关闭和异常处理逻辑抽成通用方法,参数包含数据库连接信息、查询语句,以及上面定义的业务逻辑接口实例:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcUtils {
    public static void executeJdbc(String dbURL, String dbUser, String dbPassword, String query, JdbcOperation operation) {
        try(Connection conn = DriverManager.getConnection(dbURL, dbUser, dbPassword);
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(query);
        ) {
            // 执行自定义业务逻辑
            operation.execute(conn, stmt, rs);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

3. 调用通用方法

使用时只需要传入业务逻辑即可,用Lambda表达式简化代码:

// 示例:查询用户表并打印用户名
JdbcUtils.executeJdbc(
    "jdbc:mysql://localhost:3306/test",
    "root",
    "your_password",
    "SELECT username FROM users",
    (conn, stmt, rs) -> {
        while (rs.next()) {
            System.out.println("用户名:" + rs.getString("username"));
        }
    }
);

如果你的业务逻辑不需要用到Connection或Statement,直接在Lambda里忽略这些参数就行,不影响使用。

内容的提问来源于stack exchange,提问作者Michel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 03:15:09