2
我有一個存儲過程,旨在插入單行。我就可以以下列方式(例如簡化)操作與Hibernate:帶存儲過程的休眠批處理
public void store(int param1, int param2) {
Connection con = session.connection(); // obtain JDBC connection from Session object
CallableStatement stmt = con.prepareCall("{ call changesalary(?,?) }");
stmt.setInt(1, param1); // first parameter index start with 1
stmt.setInt(2, param2); // second parameter
stmt.execute(); // call stored procedure
cleanup(con, stmt);
}
我不知道是否有可能重新使用在多個批次的一致好評方式這個存儲過程,而無需修改它(我不有可能添加新的存儲過程或修改現有的)。我想這樣做:
public void batchStore(int[] params1, int[] params2) {
for (int i = 0; i < params1.length; i++) {
store(params1[i], params2[i]);
}
}
public void store(int param1, int param2) {
Connection con = session.connection();
CallableStatement stmt = con.prepareCall("{ call changesalary(?,?) }");
stmt.setInt(1, param1);
stmt.setInt(2, param2);
stmt.execute();
cleanup(con, stmt);
}
但爲了避免大量調用數據庫的,我寧願要準備一套報表,那後來我批到數據庫中的一個電話:
public void store(int[] params1, int[] params2) {
Connection con = session.connection();
CallableStatement[] stmts = new CallableStatements[params.size];
for (int i = 0; i < params1.length; i++) {
CallableStatement stmt = con.prepareCall("{ call changesalary(?,?) }");
stmt.setInt(1, params1[i]);
stmt.setInt(2, params2[i]);
stmts[i] = stmt;
}
con.executeStatements(stmts);
}
可以實現上面的僞代碼嗎?我可以通過這樣做來提高性能嗎?
謝謝,工作完美! – aksamit