개발자 미니민의 개발스터디

[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 으로 다운캐스팅 해줘야한다. 

 

 

 

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기