1.预处理SQL语句;
2.使用registerOutParameter方法注册变量数据类型;
3.为每一个“?”赋值;
4.执行操作。
实例:
TestProc.java:
- import java.sql.*;
- public class TestProc {
- public static void main(String[] args) {
- Connection conn = null;
- CallableStatement cstmt = null;
- try {
- Class.forName("oracle.jdbc.driver.OracleDriver");
- conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:mgc", "system", "admin");
- String sql = "{call p(?,?,?,?)}";
- cstmt = conn.prepareCall(sql);
- cstmt.registerOutParameter(3, Types.INTEGER);
- cstmt.registerOutParameter(4, Types.INTEGER);
- cstmt.setInt(1, 6);
- cstmt.setInt(2, 4);
- cstmt.setInt(4, 0);
- cstmt.execute();
- System.out.println(cstmt.getInt(3));
- System.out.println(cstmt.getInt(4));
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- } catch (SQLException e) {
- e.printStackTrace();
- } finally {
- try {
- if (cstmt != null) {
- cstmt.close();
- cstmt = null;
- }
- if (conn != null) {
- conn.close();
- conn = null;
- }
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
- }
proc.sql:
- create or replace procedure p
- (v_a in number, v_b number, v_ret out number, v_tmp in out number)
- is
- begin
- if(v_a > v_b) then
- v_ret := v_a;
- else
- v_ret := v_b;
- end if;
- v_tmp := v_tmp +1;
- end;
- /