中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL中如何使用存儲過程

發布時間:2021-11-03 09:34:44 來源:億速云 閱讀:188 作者:小新 欄目:MySQL數據庫

這篇文章將為大家詳細講解有關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()


  1. import java.sql.CallableStatement;

  2. ...

  3. //

  4. // Prepare a call to the stored procedure 'demoSp'

  5. // with two parameters

  6. //

  7. // Notice the use of JDBC-escape syntax ({call ...})

  8. //

  9. CallableStatement cStmt = conn.prepareCall("{call demoSp(?, ?)}");

  10. cStmt.setString(1, "abcdefg");


Connection.prepareCall()方法非常消耗資源,因為jdbc驅動通過元數據(metadata)的獲取支持輸出參數.出于執行效率的考慮,應該盡可能減少不必要的prepareCall調用,重用CallableStatement對象.

2.注冊輸出參數(如果有的話)

要得到輸出參數的值(創建存儲過程時設置的OUT和INOUT),JDBC要求這些參數必須要在數據庫操作執行之前通過registerOutputPrameter()方法設置.


  1. import java.sql.Types;

  2. ...

  3. //

  4. // 下面給出了設置輸出參數的幾個方法

  5. //

  6. // 注冊第二個參數為輸出參數

  7. //

  8. cStmt.registerOutParameter(2);

  9. //

  10. // 注冊第二個參數為輸出參數,設定getObject得到的返回值的類型為整型

  11. //

  12. cStmt.registerOutParameter(2, Types.INTEGER);

  13. //

  14. // 注冊名為"inOutParam"的參數為輸出參數

  15. //

  16. cStmt.registerOutParameter("inOutParam");

  17. //

  18. // 注冊名為"inOutParam"的參數為輸出參數,設定getObject得到的返回值的類型為整型

  19. //

  20. cStmt.registerOutParameter("inOutParam", Types.INTEGER);


3.設置輸入參數(如果有的話)
類似PreparedStatement的設置參數方法.


  1. //

  2. // 設置第一個參數值

  3. //

  4. cStmt.setString(1, "abcdefg");

  5. //

  6. // 根據名字設置參數值

  7. //

  8. cStmt.setString("inputParameter", "abcdefg");

  9. //

  10. // 根據索引值設置輸入/輸出參數

  11. //

  12. cStmt.setInt(2, 1);

  13. //

  14. // 根據參數名設置輸入/輸出參數

  15. //

  16. //

  17. cStmt.setInt("inOutParam", 1);

  18. ...



4.執行CallableStatement,獲取結果集合或輸出參數
盡管CallableStatement支持Statement接口的所有執行方法(executeUpdate(),executeQuery()或execute()),最具伸縮性的方法是execute(),因為你不需要知道是否這個存儲過程返回結果集合.


  1. ...

  2. boolean hadResults = cStmt.execute();

  3. //

  4. // 處理返回的結果集合

  5. //

  6. while (hadResults) {

  7. ResultSet rs = cStmt.getResultSet();

  8. //

  9. ...

  10. hadResults = cStmt.getMoreResults();

  11. }

  12. //

  13. // 獲取輸出參數,通過索引值或參數名

  14. //

  15. //

  16. int outputValue = cStmt.getInt(1);

  17. outputValue = cStmt.getInt("inOutParam");


關于“MySQL中如何使用存儲過程”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

正阳县| 淄博市| 塔河县| 容城县| 东安县| 铁力市| 延边| 永年县| 收藏| 沐川县| 三门峡市| 云龙县| 阿拉善左旗| 屯门区| 广元市| 邯郸市| 宿州市| 华坪县| 肇东市| 洪雅县| 香格里拉县| 霍州市| 台南市| 鄂温| 龙江县| 如皋市| 武强县| 屏东市| 河北区| 喜德县| 枝江市| 新密市| 翼城县| 绥江县| 黄骅市| 綦江县| 诏安县| 克拉玛依市| 江口县| 五大连池市| 石河子市|