首页 > 解决方案 > 如何在 Java 中返回结果集

问题描述

我正在尝试返回给定学生 ID 的结果集并显示 gpa。但是,当结果集关闭时,我无法执行该操作。这是我的代码:

/**
 * Returns a ResultSet with a row containing the computed GPA (named as gpa) for a given student id.
 * You must use a PreparedStatement.
 * 
 * @return
 *       ResultSet containing computed GPA
 */
public ResultSet computeGPA(String studentId) throws SQLException
{
    ResultSet rst;

     // TODO: Use a PreparedStatement
    try(Connection con = connect()){

        String sql = "SELECT gpa FROM student WHERE sid=?";
        PreparedStatement pstmt = con.prepareStatement(sql);
        pstmt.setString(1, studentId);
        rst = pstmt.executeQuery();

        while(rst.next()){
            System.out.println(rst.getString("gpa"));
        }
    }
    return rst;
}

这是我得到的结果

连接到数据库。2.96 线程“主”java.sql.SQLException 中的异常:在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java 的 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078) 处关闭 ResultSet 后不允许操作:989) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975) 在 com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920) 在 com.mysql.jdbc.ResultSetImpl.checkClosed(ResultSetImpl. java:804) 在 com.mysql.jdbc.ResultSetImpl.getMetaData(ResultSetImpl.java:3107) 在 EnrollJDBC.resultSetToString(EnrollJDBC.java:500) 在 EnrollJDBC.main(EnrollJDBC.java:59)

标签: javamysqldatabaseresultset

解决方案


当你的块完成时,你使用try-with-resourceswhich closes 。在 Java 中,当您关闭时,您还会自动关闭与该连接关联的所有对象。这就是异常告诉你的。您正在尝试使用 closed 。因此,您需要更改代码以仅在完全处理后关闭连接。ConnectiontryConnectionResultSetResultSetResultSet

由于您SELECT按 id 执行,因此您会得到一条记录或没有记录。那么为什么不只返回那个值,如果它存在或者null(或空字符串)如果学生不存在这样的 id 而不是从方法返回ResultSet对象呢?computeGPA()


推荐阅读