2014-10-11 67 views
0

這裏是我現在就做:最佳實踐關閉JDBC結果

public static getConfs(Connection conn, String confNo){ 
    ResultSet rs = null; 
    try{ 
     rs = conn.createStatement().executeQuery("select col1,col2 from table1"); 
     ... // do something with rs 
     rs.getStatement().close(); 
     rs = conn.createStatement().executeQuery("select col1,col2 from table2"); 
     ... // do somthing with rs 
     rs.getStatement().close(); 
     rs = null; 
    }catch(Exception e){ 
     throw e; 
    }finally{ 
     if(rs != null){ 
      try{ 
       rs.getStatement().close(); 
      }catch(SQLException se){ 
       se.printStackTrace(); 
      } 
     } 
    } 
} 

兩個問題:
1.我應該重用這樣的結果集變量?
2.這樣很好的關閉結果集嗎?任何更聰明的方式?

+1

考慮[這個答案](http://stackoverflow.com/a/321879/2711488),特別是。 – Holger 2014-10-11 12:10:08

回答

1

看看春JdbcUtils源,它關閉的ResultSet這樣

public static void closeResultSet(ResultSet rs) { 
    if (rs != null) { 
     try { 
      rs.close(); 
     } catch (SQLException ex) { 
      logger.trace("Could not close JDBC ResultSet", ex); 
     } catch (Throwable ex) { 
      // We don't trust the JDBC driver: It might throw 
      // RuntimeException or Error. 
      logger.trace("Unexpected exception on closing JDBC ResultSet", ex); 
     } 
    } 
} 

使你的代碼看起來像這樣

Statement st = conn.createStatement(); 
    try { 
     ResultSet rs = st.executeQuery("select col1,col2 from table1"); 
     // do something 
     closeResultSet(rs); 
     rs = st.executeQuery("select col1,col2 from table2"); 
     // do something 
     closeResultSet(rs); 
    } finally { 
     // close Statement 
    } 

雖然在我看來,不與JDBC工作的最佳途徑在低級別,但直接使用Spring JDBC。它徹頭徹尾地想通過並將使您的代碼簡單可靠。

+0

或者使用Java 7試用資源 – 2014-10-11 11:25:54