背景
项目中使用jdbc 连接hive ,我看了下工具类,已经有一个获取Jdbc连接的方法了,这里没有用连接池,因为涉及到不同的租户,不同的权限。于是有了下面代码
try {
boolean isCreateTable = connection.prepareStatement(buildTableSql).execute();
if (isCreateTable == true) {
//中间省略处理过程
......
}
connection.close();
} catch (Exception e) {
logger.error("error", e);
throw new RuntimeException(e);
}
优化
后续发现这种事不可以的,如果在执行sql的时候报错,会直接跳到catch里面,而不会走connection.close(); 这个方法,如果不及时关闭连接的话,因为数据库连接时有限制的,如果连接不关闭,而且使用的人比较多,那么系统很快就down掉了。
所以优化的代码如下
try {
boolean isCreateTable = connection.prepareStatement(buildTableSql).execute();
if (isCreateTable == true) {
//省略处理过程
}
connection.close();
} catch (Exception e) {
logger.error("error", e);
throw new RuntimeException(e);
}finally {
try {
if (connection != null) {
connection.close();
}
}catch (Exception e){}
}
这样子的话,无论在正常还是异常或错误等情况下,连接均可以有效地关闭。