Role 객체 하나 하나가 데이터인데요. 모든 데이터를 조회하겠다는 얘기는 모든 Role 객체들을 가져오겠다는 것을 의미합니다. 그래서 Role 객체를 요소로 갖는 List 를 리턴하는 getRoles( ) 메서드를 생성하겠습니다.
이번 예제에서 조금 다른 부분이 있습니다. 다른 예제에서는 필요한 객체를 선언한 다음 try 블록에서 하려는 작업을 수행하고 catch 블록에서 예외를 처리하고 마지막 finally 블록에서 객체를 다는 것을 수행했었습니다. 그런데, 지금 예제에는 새롭게 추가된 문법을 하나 갖고 있습니다. try with resuource 블록을 사용하게 됩니다.
try 블록에 사용할 객체들(resource)을 함께 부여합니다. 그러면 아주 편리하게도 객체들을 닫아주는 finally 블록을 개발자가 직접 추가해주지 않아도 됩니다. 이것이 새롭게 추가된 문법인데요. finally 블록에서 계속 close 해주는 문법보다는 훨씬 간단해진 것을 확인할 수 있습니다.
코드를 한번 살펴보겠습니다. try ( ) 에서 Connection 객체를 얻어왔구요. 이어서 PreparedStatement 객체도 얻어왔습니다. PreparedStatement 를 얻어올 때 String sql 변수에 대입된 sql 문을 사용하도록 만들었습니다. 그런 다음에 이 예제에서는 바인딩을 할 필요가 없어서 바인딩 부분은 생략이 되었구요. ResultSet 객체는 try 내부의 try 블록에서 얻어왔습니다. 그런 다음에 한 건이 아니라 여러 건의 데이터를 얻어와야 하기 때문에 while ( rs.next( ) ) 를 활용하여 ResultSet 객체에 다음 값이 존재하고 있으면 반복 수행하도록 작성하였습니다. 꺼내온 ResultSet 객체에서 description 과 role_id 값을 꺼내서 변수에 저장하고 꺼낸 값들을 새로운 Role 객체를 생성하여 저장합니다. 그리고 이렇게 생생한 Role 객체를 Role List 예 반복해서 담아주는 것이죠. 이 작업이 완료되면 우리는 DB에 담긴 모든 데이터를 갖고 있는 Role List 를 얻을 수 있습니다.
모든 데이터 조회 : getRoles 메서드 실행하기
getRoles 메서드를 수행하는 JDBCExam3 라는 Test 클래스를 작성하여 실행해보겠습니다. getRoles 메서드를 가지고 있는 RoleDao 객체를 생성하였구요. getRoles 메서드의 리턴 값을 담을 수 있는 List<Role> 객체를 생성하여 리턴 값을 대입받았습니다. list 에 담긴 값을 출력하기 위해 for 구문을 활용하여 출력하였습니다.
출력 결과를 확인해보겠습니다. 6 건의 데이터가 정상적으로 DB에서 읽어와서 출력한 것을 확인했습니다.