在Java中調用帶參數的存儲過程


JDBC調用存儲過程: CallableStatement

在Java里面調用存儲過程,寫法那是相當的固定:
Class.forName(....
Connection conn = DriverManager.getConnection(....
/**
*p是要調用的存儲過程的名字,存儲過程的4個參數,用4個?號占位符代替
*其余地方寫法固定
*/
CallableStatement cstmt = conn.prepareCall( "{call p(?,?,?,?)}" );
/**
*告訴JDBC,這些個參數,哪些是輸出參數,輸出參數的類型用java.sql.Types來指定
*下面的意思是,第3個?和第4個?是輸出參數,類型是INTEGER的
*Types后面具體寫什么類型,得看你的存儲過程參數怎么定義的
*/
cstmt.registerOutParameter( 3 , Types.INTEGER);
cstmt.registerOutParameter( 4 , Types.INTEGER);
/**
*在我這里第1個?和第2個?是輸入參數,第3個是輸出參數,第4個既輸入又輸出
*下面是設置他們的值,第一個設為3,第二個設為4,第4個設置為5
*沒設第3個,因為它是輸出參數
*/
cstmt.setInt( 1 3 );
cstmt.setInt( 2 4 );
cstmt.setInt( 4 5 );
//執行
cstmt.execute();
//把第3個參數的值當成int類型拿出來
int  three = cstmt.getInt( 3 );
System.out.println(three);
//把第4個參數的值當成int類型拿出來
int  four = cstmt.getInt( 4 );
System.out.println(four);
//用完別忘給人家關了,后開的先關
cstmt.close();
conn.close();
 
JDBC調用存儲過程,掌握這一個程序足夠了.
以下是上面程序使用的存儲過程的代碼,我用的是Oracle數據庫,不過不論是什么數據庫,對於你的程序,JDBC這一端寫法都是一樣的.
 
create or replace procedure p
(v_a in number,v_b number,v_ret out number,v_temp in out number)
is
begin
if (v_a > v_b) then
v_ret := v_a;
else
v_ret := v_b;
end  if ;
v_temp := v_temp +  1 ;
end;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM