大家先看一段源码吧public <T> T query(String sql, ResultSetHandler<T> rsh, Object... params)
throws SQLException { Connection conn = this.prepareConnection(); try {
return this.query(conn, sql, rsh, params);
} finally {
close(conn);
}
}
protected void close(Connection conn) throws SQLException {
DbUtils.close(conn);
}
public static void close(Connection conn) throws SQLException {
if (conn != null) {
conn.close();
}
}
说说我的疑问吧,对于try -return --fianlly 形式,我尝试了一下,在try中return语句执行之前,会先执行finally中的语句,但返回值并不受finally中语句的影响,除非finally中有return语句,不知道我的理解有问题吗?对于上面的几个函数,在return语句执行之前,先会去关闭 conn ,这样return this.query(conn, sql, rsh, params);中的conn岂不是处于closed状态,这样的话岂不是会抛异常??但上面的源码是commons-dbutils 中的源码,应该是不会有问题的,还请大伙不吝赐教
throws SQLException { Connection conn = this.prepareConnection(); try {
return this.query(conn, sql, rsh, params);
} finally {
close(conn);
}
}
protected void close(Connection conn) throws SQLException {
DbUtils.close(conn);
}
public static void close(Connection conn) throws SQLException {
if (conn != null) {
conn.close();
}
}
说说我的疑问吧,对于try -return --fianlly 形式,我尝试了一下,在try中return语句执行之前,会先执行finally中的语句,但返回值并不受finally中语句的影响,除非finally中有return语句,不知道我的理解有问题吗?对于上面的几个函数,在return语句执行之前,先会去关闭 conn ,这样return this.query(conn, sql, rsh, params);中的conn岂不是处于closed状态,这样的话岂不是会抛异常??但上面的源码是commons-dbutils 中的源码,应该是不会有问题的,还请大伙不吝赐教
再查看finally是否覆盖返回值,最后返回应该返回的返回值...
这算月经帖么?