先定义一个类 实现接口 ICallback 因为ICallback中已经有 conn 代码如下:
public class hztjCallBack implements ICallback {
public String hzlx = "1";
public Date ksrq;
public Date zzrq;
public String hzbbm;
public ResultSet rs = null;
CallableStatement proc = null;
public List<Record> result = null;
@Override
public Object call(Connection conn) throws SQLException {
try {
System.out.println("222");
proc = conn.prepareCall("{call p_hztjTemp(?,?,?,?)}");
proc.setString(1, hzlx);
proc.setDate(2, ksrq);
proc.setDate(3, zzrq);
proc.setString(4, hzbbm);
rs = proc.executeQuery();
result = RecordBuilder.build(DbKit.getConfig(), rs);
} catch (SQLException e) {
System.out.println(e.toString());
}
return result;
}
}
然后在上层调用jfinal处理
hztjCallBack cb = new hztjCallBack();
cb.hzlx = "1";
cb.ksrq = java.sql.Date.valueOf("2015-01-01");
cb.zzrq = java.sql.Date.valueOf("2015-09-30");
cb.hzbbm = "gbb1";
Db.execute(cb);
List<Record> result = cb.result;
Iterator<Record> it = result.iterator();
while (it.hasNext()){
System.out.println(it.next());
}
有几点需要注意:
1.存储过程书写的时候一定加上 SET NOCOUNT ON;否则无法取得返回的结果集
2.不能将ResultSet直接返回上一层,不然会报结果集已关闭的错误
3.为将结果集返回,需将ResultSet转换为List<Record>,这样就可以返回了