CallableStatement接口可以接受運(yùn)行時(shí)輸入?yún)?shù)。
CallableStatement用于執(zhí)行數(shù)據(jù)庫存儲過程。
Connection對象也可以創(chuàng)建CallableStatement來調(diào)用數(shù)據(jù)庫存儲過程。
假設(shè),我們有以下MySQL存儲過程。
DELIMITER $$ DROP PROCEDURE IF EXISTS `EMP`.`getEmpName` $$ CREATE PROCEDURE `EMP`.`getEmpName` (IN EMP_ID INT, OUT EMP_FIRST VARCHAR(255)) BEGIN SELECT first INTO EMP_FIRST FROM Emp WHERE ID = EMP_ID; END $$ DELIMITER ;
上面的存儲過程定義了兩個(gè)參數(shù),一個(gè)是EMP_ID,另一個(gè)是EMP_FIRST。它通過員工id返回員工的名字。
IN和OUT之前的參數(shù)名稱告訴參數(shù)的類型。 IN用于數(shù)據(jù)輸入,OUT用于數(shù)據(jù)輸出。
在上面的代碼中,我們傳入IN的員工id,并得到OUT的名字。
我們還可以有INOUT參數(shù),它們都可以接受值和傳遞值。
共有三種類型的參數(shù):IN,OUT和INOUT。
PreparedStatement和CallableStatement都可以接受參數(shù)。
PreparedStatement對象僅使用IN參數(shù)。 CallableStatement對象可以使用所有三個(gè)。
參數(shù) | 描述 |
---|---|
IN | 創(chuàng)建SQL語句時(shí)其值未知的參數(shù)。我們使用setXXX()方法將值傳遞給IN參數(shù)。 |
OUT | 從SQL語句返回其值的參數(shù)。我們使用getXXX()方法從OUT參數(shù)中獲取值。 |
INOUT | 參數(shù)可以傳入和傳出值。我們用setXXX()方法綁定變量,并用getXXX()方法檢索值。 |
以下代碼顯示如何調(diào)用存儲過程。
conn是 Connection
的一個(gè)對象。
CallableStatement cstmt = null; String SQL = "{call getEmpName (?, ?)}"; cstmt = conn.prepareCall (SQL);
我們需要關(guān)閉CallableStatement對象來釋放資源。
首先關(guān)閉Connection對象,它也將關(guān)閉CallableStatement對象。
CallableStatement cstmt = null; String SQL = "{call getEmpName (?, ?)}"; cstmt = conn.prepareCall (SQL); cstmt.close();
更多建議: