標籤:
http://blog.csdn.net/qq_26525215/article/details/52143733
在上面連結的部落格中,寫了如何用MySQL語句定義和執行預存程序
Java執行預存程序:
準備表stud:
列類型分別為:
varchar,varchar,int
定義的預存程序分別為:
p1:-無參
delimiter &&create procedure p1()begin insert into stud values(‘P100‘,‘小李‘,43); select * from stud;end&&delimiter ;
p2:-輸入參數
delimiter &&create procedure p2(in id varchar(32),in sname varchar(32),in age int)begin insert into stud values(id,sname,age); select * from stud;end &&delimiter ;
p3:-輸入輸出參數:
delimiter &&create procedure p3(in id varchar(32) ,in sname varchar(32),in age int ,out num int)begin insert into stud values(id,sname,age); select * from stud; select count(*) into num from stud;end&&delimiter ;
Java示範執行不帶參數的預存程序:
@Test public void callProcedureDemo() throws Exception{ Connection con = ConnFactory.getConnection(); String sql = "call p1()"; CallableStatement cst = con.prepareCall(sql); ResultSet rs = cst.executeQuery(); while(rs.next()){ System.out.println(rs.getString(1)+","+rs.getString(2)+","+rs.getInt(3)); } }
示範結果:
Java示範執行帶輸入參數的預存程序:
構造 call 逸出序列時,請使用 ?(問號)字元來指定 IN 參數。此字元充當要傳遞給該預存程序的參數值的預留位置。
可以使用 SQLServerPreparedStatement 類的 setter 方法之一為參數指定值。可使用的 setter 方法由 IN 參數的資料類型決定。
向 setter 方法傳遞值時,不僅需要指定要在參數中使用的實際值,還必須指定參數在預存程序中的序數位置。例如,如果預存程序包含單個 IN 參數,則其序數值為 1。如果預存程序包含兩個參數,則第一個序數值為 1,第二個序數值為 2。
@Test//帶輸入參數 public void callProcedureDemo2() throws Exception{ Connection con = ConnFactory.getConnection(); String sql="call p2(?,?,?)"; CallableStatement cst = con.prepareCall(sql); cst.setString(1, "P110"); cst.setString(2, "段譽"); cst.setInt(3, 43); ResultSet rs = cst.executeQuery(); while(rs.next()){ System.out.println(rs.getString(1)+","+rs.getString(2)+","+rs.getInt(3)); } }
示範結果:
Java示範執行帶輸入輸出參數的預存程序:
構造 call 逸出序列時,請使用 ?(問號)字元來指定 OUT 參數。
此字元充當要從該預存程序返回的參數值的預留位置。
要為 OUT 參數指定值,必須在運行預存程序前使用 SQLServerCallableStatement 類的 registerOutParameter 方法指定各參數的資料類型。
使用 registerOutParameter 方法為 OUT 參數指定的值必須是 java.sql.Types 所包含的 JDBC 資料類型之一,而它又被映射成本地 SQL Server 資料類型之一。有關 JDBC 和 SQL Server 資料類型的詳細資料,請參閱瞭解 JDBC 驅動程式資料類型。
當您對於 OUT 參數向 registerOutParameter 方法傳遞一個值時,不僅必須指定要用於此參數的資料類型,而且必須在預存程序中指定此參數的序號位置或此參數的名稱。例如,如果預存程序包含單個 OUT 參數,則其序數值為 1;如果預存程序包含兩個參數,則第一個序數值為 1,第二個序數值為 2。
@Test//帶輸入輸出參數-----第4個參數 是 輸出參數 public void callProcedureDemo3() throws Exception{ Connection con = ConnFactory.getConnection(); String sql = "call p3(?,?,?,?)"; CallableStatement cst =con.prepareCall(sql); cst.setString(1, "P102"); cst.setString(2, "小凱"); cst.setInt(3, 23); //將指定序號位置的 OUT 參數註冊為給定的JDBC 類型。 cst.registerOutParameter(4, Types.INTEGER); cst.execute(); //擷取輸出的參數 int count = cst.getInt(4); System.out.println(count); }
MySQL---資料庫從入門走向大神系列(八)-在java中執行MySQL的預存程序