1. 程式人生 > >jfinal如何調用oracle存儲過程?

jfinal如何調用oracle存儲過程?

就是 調用 per msg ace bject ide dex over

存儲過程用一下 Db.execute(ICallback) 這個方法,在其中用一下:
connection.prepareCall(sql).execute();
就可以調用存儲過程了,並且還可以自由控制返回值

例子:

public Boolean setVarValue(final String processInstanceId, final String varName, final String varValue) {
Boolean flag = false;
Object o = Db.execute(new ICallback() {
@Override
public Boolean call(Connection conn) throws SQLException {
Boolean flag = false;
try {
CallableStatement proc = conn.prepareCall("{CALL PROCESS_WARN.set_var_value(?,?,?)}");
proc.setString(1, processInstanceId);
proc.setString(2, varName);;
proc.setString(3, varValue);
proc.execute();
//代碼來到這裏就說明你的存儲過程已經調用成功,如果有輸出參數,接下來就是取輸出參數的一個過程
flag = true;
} catch (Exception e) {
flag = false;
log.error("execute procedure PROCESS_WARN.set_var_value mistakes !!!");
e.printStackTrace();
}
return flag;
}
});

flag = (Boolean) o;

return flag;
}

、、、、、、、、、、、、、、、、、、、、、、、、、、、、

有返回值的

public String activeTaskForUpdate(final String processInstanceId,
final String operationClassKey, final String operationKey, final String taskOrgId,
final String orgFilterId, final String otherTag,final String newType) {
String task_id_list = "";
Object o = Db.execute(new ICallback() {
@Override
public String call(Connection conn) throws SQLException {
String task_id_list = "";
try {
CallableStatement proc = conn.prepareCall("{CALL PROCESS_WARN.active_task_for_update(?,?,?,?,?,?,?,?)}");
proc.setString(1, processInstanceId);
proc.setString(2,operationClassKey);
proc.setString(3, operationKey);
proc.setString(4, taskOrgId);
proc.setString(5, orgFilterId);
proc.setString(6, otherTag);
proc.setString(7, newType);
proc.registerOutParameter(8, oracle.jdbc.OracleTypes.VARCHAR);
proc.execute();
//代碼來到這裏就說明你的存儲過程已經調用成功,如果有輸出參數,接下來就是取輸出參數的一個過程
task_id_list = proc.getObject(8).toString();
} catch (Exception e) {
log.error("execute procedure PROCESS_WARN.active_task_for_updatemistakes !!!");
e.printStackTrace();
if(e.getMessage().indexOf("ORA-20012") != -1){
String msg = e.getMessage().split("#")[1];
throw new NoAssigneeException(msg);
}else{
throw new SystemUnKnownException(e.getMessage());
}
}
return task_id_list;
}
});

task_id_list = (String) o;
return task_id_list;
}

jfinal如何調用oracle存儲過程?