MySQL, Java : 프로시저와 JDBC
MySQL 저장 프로시저 및 Java 호출 예제
저장 프로시저 생성 및 호출
테이블 생성 및 데이터 복사
1
CREATE TABLE dept_clone AS SELECT * FROM dept;
데이터 삭제 저장 프로시저
1
2
3
4
5
6
7
8
9
DELIMITER //
CREATE PROCEDURE sp_deleteDept()
BEGIN
DELETE FROM dept_clone;
END
//
DELIMITER ;
CALL sp_deleteDept();
데이터 삽입 저장 프로시저
1
2
3
4
5
6
7
8
9
10
11
12
DELIMITER $$
CREATE PROCEDURE sp_insertDept(
IN v_deptno tinyint,
IN v_dname varchar(14),
IN v_loc varchar(13)
)
BEGIN
INSERT INTO dept_clone(deptno, dname, loc)
VALUES(v_deptno, v_dname, v_loc);
END
$$
DELIMITER ;
사원 정보 조회 저장 프로시저
1
2
3
4
5
6
7
8
9
10
11
12
13
DELIMITER $$
CREATE PROCEDURE sp_selectEmp(
IN v_empno smallint,
OUT v_dname varchar(14),
OUT v_loc varchar(13)
)
BEGIN
SELECT dname, loc INTO v_dname, v_loc
FROM emp JOIN dept ON emp.deptno = dept.deptno
WHERE empno = v_empno;
END
$$
DELIMITER ;
부서 이름으로 위치 조회 저장 프로시저
1
2
3
4
5
6
7
8
9
10
11
12
13
DELIMITER $$
CREATE PROCEDURE sp_selectDname(
INOUT v_name varchar(14)
)
BEGIN
DECLARE v_str varchar(14);
SELECT loc INTO v_str
FROM dept
WHERE dname = v_name;
SET v_name = v_str;
END
$$
DELIMITER ;
부서 번호로 사원 정보 조회 저장 프로시저
1
2
3
4
5
6
7
8
9
10
11
12
DELIMITER $$
CREATE PROCEDURE sp_select_emp_dept(
IN v_deptno tinyint
)
BEGIN
SELECT empno, ename, dname, loc
FROM emp
NATURAL JOIN dept
WHERE deptno = v_deptno;
END
$$
DELIMITER ;
Java 코드에서 저장 프로시저 호출 예제
데이터 삭제 저장 프로시저 호출
1
2
3
String sql = "{call sp_deleteDept()}";
CallableStatement cstmt = conn.prepareCall(sql);
cstmt.execute();
데이터 삽입 저장 프로시저 호출
1
2
3
4
5
6
String sql = "{call sp_insertDept(?,?,?)}";
CallableStatement cstmt = conn.prepareCall(sql);
cstmt.setInt(1, deptNo);
cstmt.setString(2, dname);
cstmt.setString(3, loc);
cstmt.execute();
사원 정보 조회 저장 프로시저 호출
1
2
3
4
5
6
7
8
String sql = "{call sp_selectEmp(?,?,?)}";
CallableStatement cstmt = conn.prepareCall(sql);
cstmt.setInt(1, empno);
cstmt.registerOutParameter(2, Types.VARCHAR);
cstmt.registerOutParameter(3, Types.VARCHAR);
cstmt.execute();
System.out.println(cstmt.getString(2));
System.out.println(cstmt.getString(3));
부서 이름으로 위치 조회 저장 프로시저 호출
1
2
3
4
5
6
String sql = "{call sp_selectDname(?)}";
CallableStatement cstmt = conn.prepareCall(sql);
cstmt.setString(1, dname);
cstmt.registerOutParameter(1, java.sql.Types.VARCHAR);
cstmt.execute();
System.out.println(cstmt.getString(1));
부서 번호로 사원 정보 조회 저장 프로시저 호출
1
2
3
4
5
6
7
8
9
String sql = "{call sp_select_emp_dept(?)}";
CallableStatement cstmt = conn.prepareCall(sql);
cstmt.setInt(1, deptno);
ResultSet rs = cstmt.executeQuery();
while (rs.next()) {
System.out.printf("%d %s %s %s%n",
rs.getInt("empno"), rs.getString("ename"), rs.getString("dname"),
rs.getString("loc"));
}
요약
- 저장 프로시저: MySQL에서 저장 프로시저를 작성하고, 이를 통해 다양한 데이터베이스 작업(데이터 삽입, 삭제, 조회 등)을 수행함.
- Java 코드: Java의
CallableStatement
를 사용하여 저장 프로시저를 호출하고, 입력 및 출력 파라미터를 처리하는 방법을 다룸.
이를 통해 Java 애플리케이션에서 MySQL 데이터베이스와의 상호작용을 효율적으로 수행할 수 있음.
This post is licensed under CC BY 4.0 by the author.