首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 建立預存程序並透過 Java (JDBC) 呼叫完整範例

     編輯:MySQL 綜合教學

資料庫端:建立測試表與預存程序

CREATE TABLE users_ning (
  id INT PRIMARY KEY AUTO_INCREMENT,
  pwd INT
);
INSERT INTO users_ning (pwd) VALUES (1234), (12345), (12), (123);

DELIMITER $$
CREATE PROCEDURE login_ning(IN p_id INT, IN p_pwd INT, OUT flag INT)
BEGIN
  DECLARE v_pwd INT;
  SELECT pwd INTO v_pwd FROM users_ning WHERE id = p_id;
  IF v_pwd = p_pwd THEN
    SET flag := 1;
  ELSE
    SELECT v_pwd;  -- 除錯用
    SET flag := 0;
  END IF;
END$$
DELIMITER ;

Java 端:CallableStatement 呼叫

public class ProcedureDemo2 {
  public static int login(int id, int pwd) throws Exception {
    int flag = -1;
    String sql = "{call login_ning(?,?,?)}";
    Connection conn = DBUtils.getConnMySQL();
    CallableStatement stmt = conn.prepareCall(sql);
    
    // 設定 IN 參數
    stmt.setInt(1, id);
    stmt.setInt(2, pwd);
    // 註冊 OUT 參數
    stmt.registerOutParameter(3, Types.INTEGER);
    
    stmt.execute();
    flag = stmt.getInt(3);  // 取得 OUT 參數
    
    stmt.close();
    DBUtils.dbClose();
    return flag;
  }
}

通用資料庫工具類 (DBUtils) 關鍵方法

  • getConnMySQL():從屬性檔讀取 URL/帳密,載入驅動,回傳 Connection。
  • dbClose():關閉 ResultSet、Statement、Connection。
  • 支援 PreparedStatement 參數化查詢/更新/刪除/批次操作。
  • 提供元資料查詢(DatabaseMetaData、ResultSetMetaData)工具方法。

關鍵點提醒

  1. JDBC 呼叫預存程序固定語法:{call proc_name(?,...)}。
  2. OUT/INOUT 參數必須 registerOutParameter(index, sqlType) 註冊。
  3. 執行後用 getXxx(index) 取得輸出值,索引對應佔位符順序(從 1 開始)。
  4. 資源關閉順序:ResultSet → Statement → Connection,放在 finally 區塊。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved