自己用到的一個方法,貼上來便于記憶
1
protected void execBatch(String procDate) throws HsException{
2
CallableStatement cstmt=null;
3
String onlineDay=getSysParam("OCRM_ONLINE_DATE"); //系統上線日期
4
if(procDate.compareTo(onlineDay)<0){
5
throw new HsException("00001","批處理日期應該大于系統上線日期!");
6
}
7
try{
8
String procName=getProcName();
9
if(procDate.compareTo(getSysParam("OCRM_BATCH_DATE"))<=0) procName=procName.trim()+"_REDO"; //重跑批處理名稱
10
cstmt=dataSource.getConnection().prepareCall("{ call "+procName+" (?,?,?) }");
11
cstmt.registerOutParameter(2, java.sql.Types.INTEGER);
12
cstmt.registerOutParameter(3, java.sql.Types.VARCHAR);
13
cstmt.setString(1,HsDate.dateTo8(procDate));
14
Progress p=Progress.newInstance();
15
p.start();
16
cstmt.execute();
17
p.setOff(true); //退出
18
int ret=cstmt.getInt(2);
19
String reinfo=cstmt.getString(3);
20
if(ret!=0){
21
throw new HsException("00001","批處理執行失敗!,"+reinfo);
22
}
23
// cstmt.close();
24
}catch(Exception e){
25
throw new HsException(HsErrorMsg.ERR_DB_ERROR,e.toString());
26
}
27
}
這個函數一直到批處理結束后才會返回,因而執行時要放在線程里面。
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27
