存储过程调用问题(怀疑connection使用不正确)

public static int IOCmd(String devNum,String carNum,String[] reason) throws SQLException{

    //DbKit.getConfig().getDataSource().getConnection();数据源中获取

    Connection conn = DbKit.getConfig().getConnection();

    CallableStatement proc = conn.prepareCall("call proc_ioservice(?,?,?,?,?,?)");

    proc.setString(1, devNum);

    proc.setString(2, carNum);

    proc.registerOutParameter(3, java.sql.Types.TINYINT);//设置返回值类型  

    proc.registerOutParameter(4, java.sql.Types.TINYINT);//设置返回值类型  

    proc.registerOutParameter(5, java.sql.Types.TINYINT);//设置返回值类型  

    proc.registerOutParameter(6, java.sql.Types.FLOAT);//设置返回值类型  

    proc.execute();

    int lType = proc.getInt(3);

    int lRet = proc.getInt(4);

    int lReason = proc.getInt(5);

    float lMoney = proc.getInt(6);

    reason[0] = "进出类型:"+ fDevType[lType];

    reason[1] = "开闸结果:"+ fOpenRet[lRet];

    if (lType==1){

    reason[2] = "原因:"+ fInReason[lReason];

    }else if (lType==2){

    reason[2] = "原因:"+ fOutReason[lReason];

    }

    if (lMoney>0 ){

    reason[3] = "收费:"+lMoney;

    }

    return lRet;

    }

请问波总,这样使用会不会有冲突?

评论区

chenwang

2017-06-10 16:39

实际项目中,长时间运行DB部分就不能调用了,也没有异常产生

chenwang

2017-06-10 16:45

连接池用的是druid

chenwang

2017-06-10 21:19

然后我加了这句以后,程序正常:DbKit.getConfig().close(proc,conn);

chenwang

2017-06-11 09:35

@JFinal 波总,请指导一下

JFinal

2017-06-11 16:24

@chenwang 你的代码中自行获取了 Connection 对象:
Connection conn = DbKit.getConfig().getConnection();

所以,需要对 conn 对象自行关闭一下,jfinal 之下调用存储过程的正确姿势是:
Db.execute(new ICallback() {
Object call(Connection conn) throws SQLException {
// 这里是你的存储过程代码,conn 用完无需关闭
}
});

使用 ICallback 调用存储过程,jfinal 会提供一个 Connection 对象给你,用完不需要关闭,由 jfinal 来关闭

raining_peidx

2017-06-12 10:20

为什么我的报错呢?还需要加什么吗?
com.jfinal.plugin.activerecord.ActiveRecordException: java.lang.ClassCastException: com.alibaba.druid.pool.DruidPooledCallableStatement cannot be cast to com.mysql.jdbc.CallableStatement
at com.jfinal.plugin.activerecord.DbPro.execute(DbPro.java:632)
at com.jfinal.plugin.activerecord.DbPro.execute(DbPro.java:618)
at com.jfinal.plugin.activerecord.Db.execute(Db.java:418)

chenwang

2017-06-17 12:24

@JFinal 谢谢波总。

热门反馈

扫码入社