jfinalはストレージ・プロシージャを呼び出し、結果を返します.
ICallbackにconnコードがすでに存在するため、クラス実装インタフェースICallbackを定義します.
その後、上位レベルでjfinal処理を呼び出す
注意すべき点はいくつかあります.
1.保存プロセスを書くときは必ずSET NOCOUNT ONをつける.返される結果セットを取得できません
2.ResultSetを上のレベルに直接戻すことはできません.そうしないと、結果セットが閉じたエラーが表示されます.
3.結果セットを返すにはResultSetをListに変換して戻る
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