Java创建一个JDBC工具类并解决返回ResultSet的问题

Java创建一个JDBC工具类并解决返回ResultSet的问题

前段时间做数据源开发时用到了JDBC,碰到了一个问题,记录一下。

创建了一个JDBC工具类用来创建连接,并传入SQL查询,向调用者返回ResultSet对象,随后在工具类中关闭连接。

但是调用之后发现ResultSet始终拿不到数据,最后发现 ResultSet随着工具类中在finally中关闭连接而清空。

百度后发现可以将ResultSet指向CacheRowSetImpl类然后返回的方法,但是部署服务器编译的时候提示 “com.sun.rowset.CachedRowSetImpl 是 Sun 的专用 API,在后续的JDK9版本后(包括JDK9)已经删除”。

原因是CacheRowSetImpl是过时的类,即将在JDK 9的版本中移除,所以不建议使用。

最后,如下所示,既可以给上层返回ResultSet,在上层解析完结果集后还可以关闭连接:

package com.JyoKou.utils;


import java.sql.*;

/**
 * 创建JDBC连接工具类
 *
 * @author JyoKou
 * @since 2022年7月7日
 */
public class JDBCUtils {
    private final Connection conn;
    private final PreparedStatement ps;

    public JDBCUtils(String driver, String url, String userName, String password, String sql) {
        try {
            Class.forName(driver);
            this.conn = DriverManager.getConnection(url, userName, password);
            this.ps = conn.prepareStatement(sql);
        } catch (Exception e) {
            e.printStackTrace();
            throw new BadRequestException(MsgConstants.MSG);
        }
    }

    /**
     * 创建JDBC连接并执行查询语句
     *
     * @return ResultSet结果集
     * @author JyoKou
     * @since 2022年7月7日
     */
    public ResultSet getQuery() {
        ResultSet rs;
        try {
            rs = this.ps.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
            throw new BadRequestException(MsgConstants.MSG);
        }
        return rs;
    }

    /**
     * 关闭连接
     *
     * @author JyoKou
     * @since 2022年7月15日
     */
    public void close() {
        try {
            if (this.ps != null) {
                this.ps.close();
            }
            if (this.conn != null) {
                this.conn.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw new BadRequestException(MsgConstants.MSG);
        }
    }
}
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » Java创建一个JDBC工具类并解决返回ResultSet的问题