Jdbc 是否必须关闭结果集?

Jdbc 是否必须关闭结果集?,jdbc,Jdbc,我已经写了一个查询,如下所示- Connection dbConnection = null; PreparedStatement preparedStatement = null; ResultSet rs = null; try { String fetchOneSQL = "select p.NAME from PAPER p where p.PAPERID="+paperId; dbConnection = icrudR

我已经写了一个查询,如下所示-

    Connection dbConnection = null;
    PreparedStatement preparedStatement = null;
    ResultSet rs = null;
    try {

        String fetchOneSQL = "select p.NAME from PAPER p where  p.PAPERID="+paperId;
        dbConnection = icrudResultAnalysis.getConnection();
        preparedStatement = dbConnection.prepareStatement(fetchOneSQL);
        rs = preparedStatement.executeQuery();

        while (rs.next()) {
            Paper paper=new Paper();                
            paper.setName(rs.getString(NAME));              
        }

        // get new records list
        preparedStatement=null;
        rs=null;

        String getListSql="select ib.NAME from ITEMBANK ib  where ib.ITEMBANKID="+itemBankId;
        preparedStatement = dbConnection.prepareStatement(getListSql);
        rs = preparedStatement.executeQuery();

        while (rs.next()) {
            ItemBank itemBankObj=new ItemBank();
            itemBankObj.setName(rs.getString(NAME));
            listItemBanks.add(itemBankObj);
        }

        rs.close();
        preparedStatement.close();
        dbConnection.close();

    } catch (Exception e) {
        LOGGER.error("Exception Occured while fetching All record: "
                + e.getMessage());
    } finally {

        try{
            if (rs!=null){
                rs.close();
            }
        }catch(SQLException e)
        {
            LOGGER.error(RESULTSETCLOSEEXCEPTION    + e.getMessage());
        }

        try {
            if (preparedStatement != null) {
                preparedStatement.close();
            }
        } catch (SQLException e) {
            LOGGER.error(STATEMENTCLOSEEXCEPTION
                    + e.getMessage());
        }
        try {
            if (dbConnection != null) {
                dbConnection.close();
            }
        } catch (SQLException e) {
            LOGGER.error(CONNECTIONCLOSEEXCEPTION
                    + e.getMessage());
        }
    }

在上面的代码中,我通过创建resultset rs=null将单个resultset用于两个select语句。这是个好习惯吗?还是每次都要关闭结果集?关闭ResultSet和将ResultSet设为null有什么区别?

使用
.close()方法后必须关闭所有资源!和resultSet不是例外,但在本例中除外(从):

在您的情况下,必须手动
.close()
打开第一个结果集,但不必使用第二个结果集;使
resultSet=null
仅设置对变量
resultSet
的引用等于
null
,不多不少。

如果您使用的是Java7,Resultset正在实现,您可以使用此功能以更干净的方式重写代码(查看)

使用
.close()方法后,必须关闭所有资源!和resultSet不是例外,但在本例中除外(从):

在您的情况下,必须手动
.close()
打开第一个结果集,但不必使用第二个结果集;使
resultSet=null
仅设置对变量
resultSet
的引用等于
null
,不多不少。

如果您使用的是Java7,Resultset正在实现,您可以使用此功能以更简洁的方式重写代码(查看)

当您重新使用资源时(Resultset,PrepareStatement),必须首先关闭它们,而不是将prepare语句设置为NULL。必须关闭它,它将自动关闭结果集。无需显式关闭结果集。

当您重新使用资源(resultSet,PrepareStatement)时,必须首先关闭它们…而不是将prepare语句设置为NULL。您必须关闭它,它将自动关闭结果集。无需显式关闭结果集。

ResultSet.close()的javadoc是什么比如说?你应该在使用完任何资源后立即关闭它。ResultSet.close()的javadoc是怎么说的?你应该在使用完任何资源后立即关闭它。
A ResultSet object is automatically closed when the Statement object that generated it is closed, re-executed, or used to retrieve the next result from a sequence of multiple results.