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.