java中如何呼叫資料庫的儲存過程
阿新 • • 發佈:2019-02-17
CallableStatement執行儲存過程
/** * 使用CablleStatement呼叫儲存過程 * @author APPle * */ public class Demo1 { /** * 呼叫帶有輸入引數的儲存過程 * CALL pro_findById(4); */ @Test public void test1(){ Connection conn = null; CallableStatement stmt = null; ResultSet rs = null; try { //獲取連線 conn = JdbcUtil.getConnection(); //準備sql String sql = "CALL pro_findById(?)"; //可以執行預編譯的sql //預編譯 stmt = conn.prepareCall(sql); //設定輸入引數 stmt.setInt(1, 6); //傳送引數 rs = stmt.executeQuery(); //注意: 所有呼叫儲存過程的sql語句都是使用executeQuery方法執行!!! //遍歷結果 while(rs.next()){ int id = rs.getInt("id"); String name = rs.getString("name"); String gender = rs.getString("gender"); System.out.println(id+","+name+","+gender); } } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } finally { JdbcUtil.close(conn, stmt ,rs); } } /** * 執行帶有輸出引數的儲存過程 * CALL pro_findById2(5,@NAME); */ @Test public void test2(){ Connection conn = null; CallableStatement stmt = null; ResultSet rs = null; try { //獲取連線 conn = JdbcUtil.getConnection(); //準備sql String sql = "CALL pro_findById2(?,?)"; //第一個?是輸入引數,第二個?是輸出引數 //預編譯 stmt = conn.prepareCall(sql); //設定輸入引數 stmt.setInt(1, 6); //設定輸出引數(註冊輸出引數) /** * 引數一: 引數位置 * 引數二: 儲存過程中的輸出引數的jdbc型別 VARCHAR(20) */ stmt.registerOutParameter(2, java.sql.Types.VARCHAR); //傳送引數,執行 stmt.executeQuery(); //結果不是返回到結果集中,而是返回到輸出引數中 //得到輸出引數的值 /** * 索引值: 預編譯sql中的輸出引數的位置 */ String result = stmt.getString(2); //getXX方法專門用於獲取儲存過程中的輸出引數 System.out.println(result); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } finally { JdbcUtil.close(conn, stmt ,rs); } } }