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

Java编写通用函数合并仅查询和返回类型不同的数据库查询方法

完全可以合并,你可以通过泛型+行映射函数的方案抽取公共的JDBC查询逻辑,把SQL语句、结果集转实体对象这两个差异点作为参数传入公共方法即可,改造后的代码如下:

首先是抽取的公共泛型查询方法:

private <T> ObservableList<T> queryAll(String sql, Function<ResultSet, T> rowMapper) {
    ObservableList<T> list = FXCollections.observableArrayList();
    Connection connection = MyConnection.connection;
    try {
        Statement statement = connection.createStatement();
        ResultSet rs = statement.executeQuery(sql);
        while (rs.next()) {
            T entity = rowMapper.apply(rs);
            list.add(entity);
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return list;
}

接下来改造原有两个业务方法,逻辑可以简化为:

public ObservableList<Car> getAllCars() {
    return queryAll("SELECT * FROM cars", rs -> new Car(
        rs.getInt("ID"),
        rs.getInt("STYLE_ID"),
        rs.getString("MAKE"),
        rs.getString("MODEL"),
        rs.getInt("YEAR"),
        rs.getInt("PRICE")
    ));
}

public ObservableList<Style> getAllStyles() {
    return queryAll("SELECT * FROM styles", rs -> new Style(
        rs.getInt("ID"),
        rs.getString("NAME")
    ));
}

方案说明

  • 该方案依赖Java 8及以上版本支持的Function<ResultSet, T>函数式接口,将不同实体类的结果集映射逻辑作为参数传入公共方法,所有重复的JDBC样板代码(连接获取、语句执行、结果集遍历、异常捕获)都统一收拢,完全消除了重复逻辑。
  • 后续新增其他表的全量查询需求时,只需要写一行调用queryAll的代码即可,不需要重复编写JDBC逻辑,扩展性更强。
  • 你可以根据自己的需求补充资源释放逻辑,比如在finally代码块中关闭ResultSet、Statement对象,避免数据库资源泄露,上面的公共方法暂时保留了原有代码的异常处理逻辑没有额外改动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:15:02