在哪里关闭结果集

0 java jdbc

我得到的结果集已经关闭,我将结果集传递给其他方法.我应该关闭结果集.

public void mainTest(){

ResultSet rs= pstmt.executeQuery(query);

List list = populateRS(rs);

if(rs!=null)rs.close();
}

public List populateRS(ResultSet rs){

//work with result set
if(rs!=null)rs.close();
}
Run Code Online (Sandbox Code Playgroud)

and*_*ler 5

即使(或其他)抛出异常,你也应该使用一个try-finally块来关闭它:ResultSetpopulateRS

ResultSet rs;
try {
    rs = pstmt.executeQuery(query);
    List list = populateRS(rs);
} finally {
    if (rs != null) {
        rs.close();
    }
}
Run Code Online (Sandbox Code Playgroud)


Mik*_*uel 5

如果可能的话,以与打开相同的方法关闭。始终如一地这样做使代码审查人员和维护人员可以轻松地将资源分类(显然已释放,显然有问题,需要更多关注)。

其他一些注意事项:

  1. 使用try (...)或关闭finally资源,即使在使用它的代码因异常而失败时也会关闭资源。
  2. 适当使用@WillClose@WillNotClose注释,以便 IDE 和 findbugs 等工具可以指出问题。

public void mainTest(){
  List<?> list;
  try (ResultSet rs = pstmt.executeQuery(query)) {
    list = populateRS(rs);
  }
  // work with list
}

public List<?> populateRS(@WillNotClose ResultSet rs){
  //work with result set
}
Run Code Online (Sandbox Code Playgroud)

或者如果您坚持使用较旧的 Java:

public void mainTest(){
  List<?> list;
  ResultSet rs = pstmt.executeQuery(query);
  try {
    list = populateRS(rs);
  } finally {
    if(rs!=null)rs.close();
  }
  // work with list
}
Run Code Online (Sandbox Code Playgroud)