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