在Java中呼叫帶引數的儲存過程
阿新 • • 發佈:2019-01-29
JDBC呼叫儲存過程: CallableStatement
在Java裡面呼叫儲存過程,寫法那是相當的固定:
package procurement;import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ProcurementTest {
private static String driver = "oracle.jdbc.driver.OracleDriver";
private static String url = "jdbc:oracle:thin:@//10.128.49.65:56928/saleshdb";
private static String username = "sales_app";
private static String password = "sales_app";
public static void main(String[] args) throws SQLException {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//建立連線
Connection con = DriverManager.getConnection(url,username,password);
//呼叫儲存過程
CallableStatement prepareCall = con.prepareCall("{call p(?,?,?,?)}");
//告訴JDBC那些是輸出引數
prepareCall.registerOutParameter(3, java.sql.Types.INTEGER);
prepareCall.registerOutParameter(4, java.sql.Types.INTEGER);
//設定124的值,3是輸出不設值
prepareCall.setInt(1, 6666);
prepareCall.setInt(2, 7777);
prepareCall.setInt(4, 8888);
//執行
prepareCall.execute();
//取值
int three = prepareCall.getInt(3);
System.out.println(three);
int four = prepareCall.getInt(4);
System.out.println(four);
prepareCall.close();
con.close();
}
}
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;