1. 程式人生 > >在Java中呼叫帶引數的儲存過程

在Java中呼叫帶引數的儲存過程

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(13);cstmt.setInt(24);cstmt.setInt(45);//執行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)isbeginif(v_a > v_b) thenv_ret := v_a;elsev_ret := v_b;end if;v_temp := v_temp + 1;end;