java調用輸入、輸出參數爲對象的存儲過程

//獲得connection java

OracleDataSource ods = new OracleDataSource(); 數組

ods.setURL("jdbc:oracle:thin:apps/apps@10.70.42.106:11501:zjprd");  oracle

Connection conn = ods.getConnection(); app


//此處PER_ABSENCE_ATTENDANCES_OBJ爲存儲過程定義的輸入參數對象 dom

StructDescriptor sd = StructDescriptor.createDescriptor("PER_ABSENCE_ATTENDANCES_OBJ", conn);  spa


//此處的obj爲根據要出入的oracle參數對象,實例化的一個java對象數組  如:Object[] obj = new Object[]{new Timestamp(),"hahaha",new Integer(1)} 對象

STRUCT perAbsenceAttendancesObj = new STRUCT(sd, conn, obj); ip


//這裏代碼的做用是把「解釋」完的java對象進一步解釋爲「oracle數組對象」 get

ArrayDescriptor ad = ArrayDescriptor.createDescriptor("PER_ABSENCE_ATTENDANCES_TAB", conn);  io

ARRAY perAbsenceAttendancesTab = new ARRAY(ad, conn, new STRUCT[] {perAbsenceAttendancesObj});


//調用存儲過程

CallableStatement cs = conn.prepareCall("{ call erp_hr_absence_attendances.emp_absence_attendances(?,?,?,?,?,?,?,?,?,?,?,?,?) }"); 

//根據存儲過程的輸入參數依次傳入輸入參數

cs.setString(1, "LEI");

cs.setString(2, "ERP_LE_I_00001");

cs.setString(3, "1");

cs.setLong(4, Math.round(Math.random()*100000)); //正整數,由外圍系統提供惟一值流水號

cs.setString(5, requestTime); //當前時間

cs.setString(6, "ERP內部調用");

cs.setLong(7, 8455l);

cs.setLong(8, 23991l);

cs.setArray(9, perAbsenceAttendancesTab);

//註冊輸出參數

cs.registerOutParameter(10,OracleTypes.INTEGER);

cs.registerOutParameter(11,OracleTypes.VARCHAR);

cs.registerOutParameter(12,OracleTypes.INTEGER);

cs.registerOutParameter(13,OracleTypes.ARRAY,"ERP_INTERFACE_LOG_TAB");//這裏須要注意ERP_INTERFACE_LOG_TAB爲存儲過程返回的數組對象

cs.execute();

conn.close();


//特別注意,就算你不須要對象返回值和通常的返回值(哈哈,就是返回值啦),只要存儲過程有返回值就必須註冊,返回的對象存儲過程參數必須帶名字註冊

不須要返回值 cs.execute();

須要返回值 ResultSet rs = cs.executeQuery(); 循環rs獲得返回結果,用rs.getString() rs.getArray()等方法獲取返回值

相關文章
相關標籤/搜索