您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關MySQL中如何使用存儲過程,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
使用CallableStatements執行存儲過程
mysql版本:5.0
Connector/J的版本:3.1.1以上(java.sql.CallableStatement接口已完全實現,除了getParameterMetaData()方法)
MySQL的存儲過程語法在MySQL參考手冊的"存儲過程和函數"一章.
http://www.mysql.com/doc/en/Stored_Procedures.html
下面是一個存儲過程,返回一個inOutParam增1后的值,以ResultSet形式傳入一個字符串參數inputParam.
CREATE PROCEDURE demoSp(IN inputParam VARCHAR(255), INOUT inOutParam INT)
BEGIN
DECLARE z INT;
SET z = inOutParam + 1;
SET inOutParam = z;
SELECT inputParam;
SELECT CONCAT('zyxw', inputParam);
END
要通過connector/J使用demoSp這個存儲過程,要經過幾個步驟:
1.Connection.prepareCall()
import java.sql.CallableStatement;
...
//
// Prepare a call to the stored procedure 'demoSp'
// with two parameters
//
// Notice the use of JDBC-escape syntax ({call ...})
//
CallableStatement cStmt = conn.prepareCall("{call demoSp(?, ?)}");
cStmt.setString(1, "abcdefg");
Connection.prepareCall()方法非常消耗資源,因為jdbc驅動通過元數據(metadata)的獲取支持輸出參數.出于執行效率的考慮,應該盡可能減少不必要的prepareCall調用,重用CallableStatement對象.
2.注冊輸出參數(如果有的話)
要得到輸出參數的值(創建存儲過程時設置的OUT和INOUT),JDBC要求這些參數必須要在數據庫操作執行之前通過registerOutputPrameter()方法設置.
import java.sql.Types;
...
//
// 下面給出了設置輸出參數的幾個方法
//
// 注冊第二個參數為輸出參數
//
cStmt.registerOutParameter(2);
//
// 注冊第二個參數為輸出參數,設定getObject得到的返回值的類型為整型
//
cStmt.registerOutParameter(2, Types.INTEGER);
//
// 注冊名為"inOutParam"的參數為輸出參數
//
cStmt.registerOutParameter("inOutParam");
//
// 注冊名為"inOutParam"的參數為輸出參數,設定getObject得到的返回值的類型為整型
//
cStmt.registerOutParameter("inOutParam", Types.INTEGER);
3.設置輸入參數(如果有的話)
類似PreparedStatement的設置參數方法.
//
// 設置第一個參數值
//
cStmt.setString(1, "abcdefg");
//
// 根據名字設置參數值
//
cStmt.setString("inputParameter", "abcdefg");
//
// 根據索引值設置輸入/輸出參數
//
cStmt.setInt(2, 1);
//
// 根據參數名設置輸入/輸出參數
//
//
cStmt.setInt("inOutParam", 1);
...
4.執行CallableStatement,獲取結果集合或輸出參數
盡管CallableStatement支持Statement接口的所有執行方法(executeUpdate(),executeQuery()或execute()),最具伸縮性的方法是execute(),因為你不需要知道是否這個存儲過程返回結果集合.
...
boolean hadResults = cStmt.execute();
//
// 處理返回的結果集合
//
while (hadResults) {
ResultSet rs = cStmt.getResultSet();
//
...
hadResults = cStmt.getMoreResults();
}
//
// 獲取輸出參數,通過索引值或參數名
//
//
int outputValue = cStmt.getInt(1);
outputValue = cStmt.getInt("inOutParam");
關于“MySQL中如何使用存儲過程”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。