본문 바로가기

언어공부/JDBC&오라클&SQL

JDBC - DAO & DTO를 이용한 저장 프로시저 실행

JDBC - DAO & DTO를 이용한 저장 프로시저 실행에 대해서 알아보자.

 

오라클 저장 프로시저

저장 프로시저는 복잡한 쿼리문을 매번 사용할 때 다시 입력할 필요 없이 간단하게 저장 프로시저로 정의해 놓고 호출해서 복잡한 쿼리문에 대한 실행 결과를 얻으려고 할 때 주요 사용한다. 일련의 작업들을 하나로 묶어서 저장하고 호출해 복잡한 SQL문을 단순화 시켜준다. 저장프로시저를 사용하면 성능도 향상되고, 호환성 문제도 해결된다.

 

저장 프로시저 생성 쿼리문

 

 

DAO를 import 해서 객체를 생성하고, Scanner클래스로 번호값을 입력 받아 bno에 저장한다. bdao.storedProcedure(bno)메소드를 실행하면, 저장 프로시저가 실행되며 번호값에 해당하는 레코드를 출력한다.

 

실행 실패

 

실행 성공

 

 

DAO(Data Access Object)

 

DAO는 데이터베이스의 데이터에 접근하며,  데이터베이스를 사용해 데이터 조작하는 기능을 하는 객체를 뜻한다. 

 

여기서 getFindNo메소드에 Scanner클래스에서 입력받은 bno가 매개변수로 들어온다. db_no를 null값으로 미리 초기화 시키고(검색 실패 시 null값 반환),  try문에 의해 jdbc 드라이버 클래스가 로드되며, 데이터베이스와 연결한다.  sql문을 생성하고, 쿼리문을 미리 컴파일하여 수행 후 pt객체를 생성한다. 쿼리문 물음표(?)에 정수숫자로 번호값을 저장해주고, executeQuery()로 SQL문장을 실행한다. if조건문에 의해 번호가 있으면 참으로, db_no에 새로운 객체주소를 저장한 후, setter메소드로 검색된 번호값을 저장한다. finally로 생성된 rs, pt, con을 닫아준다. 마지막으로 db_no를 반환해준다.

 

storedProcedure메소드에는 Scanner클래스에서 입력한 bno가 매개변수로 들어온다. DTO타입의 db_no참조변수에 getFindNo(bno)주소가 저장되며, try문에 의해 jdbc 드라이버 클래스가 로드되고 데이터베이스와 연결된다. if 조건문에 db_no가 null이면 저장 프로시저 수행을 못하며, null이 아니면 sql에 저장 프로시저 호출 쿼리문을 저장하고, 저장 프로시저를 실행하는 cs객체를 생성한다.  SQL파일에서 bno는 in매개변수로 되어있기 때문에 setInt로 정수숫자로 번호를 저장한다. 그 외 변수들은 out매개변수로 되어있기 때문에 registerOutParameter()메소드를 사용한다.

그리고 execute()메소드로 저장프로시저를 실행해 println()메소드로 출력한다.

 

DTO(Data Transfet Object)

 

 

프로세스 간에 데이터를 전달하는 객체로 데이터가 저장되어 있다. private로 지정되어 있어 다른 클래스에서 접근하지 못하고 setter, getter메소드로 접근할 수 있다.