利用DbKit.getConfig().getConnection().prepareCall调用存储过程,是否需要关闭?

南客 发布于 2015/09/06 15:13
阅读 444
收藏 0

@JFinal 你好,想跟你请教个问题:

大神,我利用DbKit.getConfig().getConnection().prepareCall调用mysql存储过程,是否需要做回收处理?

ResultSet rs = null;
CallableStatement proc = null;
try {
proc = DbKit
.getConfig()
.getConnection()
.prepareCall(
"{call " + procedure + "(" + paras_count + ")}");


if (this.paras_in != null) {
for (int i = 0; i < this.paras_in.length; i++) {
proc.setObject(i + 1, this.paras_in[i]);
}
}



for (int i = 0; i < this.paras_out_count; i++) {
proc.registerOutParameter(this.paras_in_count + i + 1,
java.sql.Types.NVARCHAR);
}


rs = proc.executeQuery();


for (int i = 0; i < this.paras_out_count; i++) {
paras_out[i] = (proc.getObject(this.paras_in_count + i + 1));
}


} catch (Exception e) {
e.printStackTrace();
}

return rs;

加载中
0
JFinal
JFinal

     jfinal 使用时,对于 Connection 对象是否要关闭的问题,只需要记住一点:谁获取,谁关闭。这个获取是指从 DataSource 中获取,具体是指调用了 getConnection() 这个方法。

    所以,毫无疑问,楼主的上面的代码是需要关闭 Connection 以对象的。

     最后,jfinal 中使用存储过程建议使用:

Db.execute(new ICallback() {
  Object call(Connection conn) throws SQLException {
    conn.prepareCall(...);
  });
}

    这样用的时候就不需要关闭 connection,因为该对象是 jfinal 获取的,所以 jfinal 会自行关闭。

0
南客
南客

可以这么写吗?jfinal是不是间隔一段时间自行关闭,还是用完立即自行关闭!

public boolean proc_noaction() {

    return (Boolean) Db.execute(new ICallback() {
        public Boolean call(Connection conn) throws SQLException {
            CallableStatement proc = null;
            try {
                proc = conn.prepareCall("...");

            } catch (Exception e) {
                e.printStackTrace();
             return false;
        }
        return true;
        }
    });
}
返回顶部
顶部