[JAVA] 자바 - JDBC CallableStatement 인터페이스
by mini_min[JAVA]
자바 - JDBC CallableStatement 인터페이스
✔️ CallableStatement 란?
: PreparedStatement 의 하위 인터페이스이다.
: 프로시저 호출 구문에는 결과 매개변수를 가지는 형태와 매개변수가 없는 형태 두가지가 있다.
: 두 형태에 모두 = ? 사용!
: CallableStatement 객체는 Connection 에 prepareCall 메소드 호출하여 얻는다.
sql ="{CALL updateScore(?,?,?,?,?,?)}";
cstmt = conn.prepareCall(sql);
cstmt.setString(1, dto.getName());
cstmt.setString(2, dto.getBirth());
cstmt.setInt(3, dto.getKor());
cstmt.setInt(4, dto.getEng());
cstmt.setInt(5, dto.getMat());
cstmt.setString(6, dto.getHak());
cstmt.executeUpdate();
💡 executeUpdate()
= 저장된 프로시저를 실행한다!
sql = "{CALL readScore(?,?)}";
// 프로시저 먼저 봐야한다!!! (순서 핵중요!!!!)
cstmt = conn.prepareCall(sql);
cstmt.registerOutParameter(1, OracleTypes.CURSOR);;
//OUT 파라미터는 타입을 설정한다.
// 오라클의 SYS_REFCUSOR는 OracleTypes.CURSOR 로 설정!
cstmt.setString(2, hak);
//IN 파라미터는 프로시저에게 값을 전달한다.
cstmt.executeUpdate();
// 모든 프로시저는 executeUpdate 로 실행한다.
rs = (ResultSet) cstmt.getObject(1);
//OUT 파라미터는 프로시저가 넘겨준 값으로 getter 로 넘겨 받는다.
//OUT 파라미터가 1번이니까 1로 GETTER 넘겨 받아야한다.
💡 readScore() 프로시저의 경우, 첫번째 매개변수가 OUT 파라미터이다.
OUT 파라미터로 프로시저->자바로 데이터를 가져올 때는 registerOutParameter 를 사용한다!
📓 registerOutParameter(String 이름, SQL 타입)
⭐ 주요 ORACLE 자료형에 대응하는 JDBC 유형
SYS_REFCUROR : OracleTypes.CURSOR
NUMBER() : OracleTypes.INTEGER 또는 DOUBLE
💡 setString(파라미터 인덱스 순서, String 값)
: 프로시저에 IN 파라미터 순서에 지정된 객체(String 값)을 사용해 설정한다!
💡 getObject(파라미터 인덱스)
: 프로시저 OUT 파라미터의 JDBC 타입의 값을 자바의 Object 형으로 반환 받음!
// 프로시저 먼저 봐야한다!!! (순서 핵중요!!!!)
cstmt = conn.prepareCall(sql);
cstmt.registerOutParameter(1, OracleTypes.CURSOR);;
//OUT 파라미터는 타입을 설정한다.
// 오라클의 SYS_REFCUSOR는 OracleTypes.CURSOR 로 설정!
cstmt.setString(2, hak);
//IN 파라미터는 프로시저에게 값을 전달한다.
cstmt.executeUpdate();
// 모든 프로시저는 executeUpdate 로 실행한다.
rs = (ResultSet) cstmt.getObject(1);
//OUT 파라미터는 프로시저가 넘겨준 값으로 getter 로 넘겨 받는다.
//OUT 파라미터가 1번이니까 1로 GETTER 넘겨 받아야한다.
💡 (ResultSet) cstmt.getObject(1);
: 프로시저가 넘겨준 값을 getter 로 받아야하는데, rs가 ResultSet 의 객체이므로 rs에 값을 카운트하고 싶으면 ResultSet 으로 다운캐스팅 해줘야한다.
'Java' 카테고리의 다른 글
[JAVA] 자바 - 입출력 스트림 (바이트 스트림/문자 스트림/BufferedReader) (0) | 2022.08.28 |
---|---|
[JAVA] 자바 - 트랜잭션(Transaction) (0) | 2022.08.24 |
[JAVA] 자바 - JDBC PreparedStatement 인터페이스 (0) | 2022.08.22 |
[JAVA] 자바 - JDBC Statement (SELECT 문 / executeQuery / ResultSet) (0) | 2022.08.21 |
[JAVA] 자바 - JDBC (Statement / createStatement / executeUpdate) (0) | 2022.08.21 |
블로그의 정보
개발자 미니민의 개발로그
mini_min