JDBC調用存儲過程: CallableStatement
java
在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;