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;