Tomcat JNDI连接池文档-随机连接关闭异常
我在Tomcat文档中找到了这个 我不明白的是,为什么它们两次关闭所有JDBC对象——一次在try{}块中,一次在finally{}块中。为什么不在finally{}子句中关闭它们一次呢 以下是相关文件: 随机连接关闭异常Tomcat JNDI连接池文档-随机连接关闭异常,tomcat,connection,connection-pooling,Tomcat,Connection,Connection Pooling,我在Tomcat文档中找到了这个 我不明白的是,为什么它们两次关闭所有JDBC对象——一次在try{}块中,一次在finally{}块中。为什么不在finally{}子句中关闭它们一次呢 以下是相关文件: 随机连接关闭异常 我通常只在finally块中关闭一次连接,没有发现任何问题 然而,在更复杂的用例中可能需要双重关闭。例如,如果在try块中打开多个语句或多个连接,则希望在使用后立即关闭每个语句或连接。然后,您需要捕获由于finally块中的异常而遗留下来的任何内容。比如说, try {
我通常只在finally块中关闭一次连接,没有发现任何问题 然而,在更复杂的用例中可能需要双重关闭。例如,如果在try块中打开多个语句或多个连接,则希望在使用后立即关闭每个语句或连接。然后,您需要捕获由于finally块中的异常而遗留下来的任何内容。比如说,
try {
conn = ds1.getConnection();
... Do something with datasource 1 ...
conn.close();
conn=null;
conn = ds2.getConnection();
... Do something with datasource 2 ...
conn.close();
conn = null;
} catch (SQLException e) {
... deal with errors ...
} finally {
if (conn != null) {
try { conn.close(); } catch (SQLException e) { ; }
conn = null;
}
}
或者,您可以使用SpringJDBC,忘记所有这些复杂问题(SpringJDBC将自动为您处理这些问题)
try {
conn = ds1.getConnection();
... Do something with datasource 1 ...
conn.close();
conn=null;
conn = ds2.getConnection();
... Do something with datasource 2 ...
conn.close();
conn = null;
} catch (SQLException e) {
... deal with errors ...
} finally {
if (conn != null) {
try { conn.close(); } catch (SQLException e) { ; }
conn = null;
}
}