熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

如何通過hibernate調用存儲過程

2022-06-13   來源: Java開源技術 

用hibernate操作數據庫可以通過獲取的session值調用connection()方法獲取connection從而調用存儲過程

java調用存儲過程
什麼是存儲過程?
存儲過程是指保存在數據庫並在數據庫端執行的程序存儲過程是為嵌入式SQL所設計

如何調用存儲過程?

try{
int age = ;
String poetName = &#;dylan thomas&#;;
CallableStatement proc = connectionprepareCall(&#;{ call set_death_age(? ?) }&#;);
procsetString( poetName);
procsetInt( age);
csexecute();
}catch (SQLException e){ // &#;}

傳給prepareCall方法的字串是存儲過程調用的書寫規范它指定了存儲過程的名稱?代表了你需要指定的參數

存儲過程可以有返回值
所以CallableStatement類有類似getResultSet這樣的方法來獲取返回值當存儲過程返回一個值時你必須使用registerOutParameter方法告訴JDBC驅動器該值的SQL類型是什麼你也必須調整存儲過程調用來指示該過程返回一個值

connectionsetAutoCommit(false);
CallableStatement proc = connectionprepareCall(&#;{ ? = call snuffed_it_when(?) }&#;);
procregisterOutParameter( TypesINTEGER);
procsetString( poetName);
csexecute();
int age = procgetInt();

復雜的返回值
static void sendEarlyDeaths(PrintWriter out){
Connection con = null;
CallableStatement toesUp = null;
try {
con = ConnectionPoolgetConnection();
// PostgreSQL needs a transaction to do this&#; con
setAutoCommit(false); // Setup the call
CallableStatement toesUp = connectionprepareCall(&#;{ ? = call list_early_deaths () }&#;);
toesUpregisterOutParameter( TypesOTHER);
toesUpexecute();
ResultSet rs = (ResultSet) toesUpgetObject();
while (rsnext()) {
String name = rsgetString();
int age = rsgetInt();
outprintln(name + &#; was &#; + age + &#; years old&#;);
}
rsclose();
}
catch (SQLException e) { // We should protect these calls toesUpclose(); conclose();
}
}

因為JDBC並不直接支持從存儲過程中返回游標我們使用TypesOTHER來指示存儲過程的返回類型然後調用getObject()方法並對返回值進行強制類型轉換


From:http://tw.wingwit.com/Article/program/Java/ky/201405/30833.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.