MySQL---資料庫從入門走向大神系列(八)-在java中執行MySQL的預存程序

來源:互聯網
上載者:User

標籤:

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的預存程序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.