[Boostcourse] 풀스택/웹 프로그래밍(풀스택)

JDBC 실습 : INSERT(delete & update) { INSERT 메서드 생성 및 실행 }

Ben의 프로그램 2023. 7. 22. 16:41
728x90
수업목표
지난 예제에서는 JDBC 를 처음 학습하는 만큼 코드를 한 줄 한 줄 작성하면서 그 코드가 왜 필요한지 살펴보았습니다. 이번 시간에서는 입력하는 부분과 여러건 Select 하는 것을 같이 살펴보면서 어떤 부분의 코드가 변경되는지를 집중해서 살펴보겠습니다. 

 

INSERT 메서드 생성 및 실행 (addRole 메서드)
우선은 한 건의 데이터를 입력하는 메서드를 addRole 이라고 정하고 RoleDao 클래스에 추가했습니다.

우선 값을 입력해야 하니까 어떤 값을 입력할 것인지는 이 메서드를 사용하는 사용자에게 받아와야 겠죠. 그래서 메서드의 인자로 role 을 받습니다. 그 다음에 입력한 결과로 예를 들어 '3 건을 추가했습니다'와 같은 결과를 담을 int 형 변수 insertCount 를 생성했습니다. 그리고 이 int 값을 return 해줄 겁니다. 

그 다음에 insert 를 할 것이기 때문에 ResultSet 객체는 필요가 없습니다. 결과 값을 가져오지는 않거든요. read 할 때와는 다른 점이죠. 그래서 Connection 객체 conn 과 PreparedStatement 객체 ps 만 생성한 것을 볼 수 있습니다. 

드라이버 로딩했구요. Class.forName( ) 을 수행하고 나면 자동으로 인스턴스를 생성한 다음 DriverManager 에 등록을 시켜줍니다. DriverManger 라는 드라이버 객체로부터 getConnection( ) 메서드를 통해서 Connection 객체를 생성하였습니다. Connection 객체의 prepareStatement 메서드를 통해서 PreparedStatement 객체를 얻어오는 것을 볼 수 있습니다. 이때 쿼리문을 살펴보자면 'INSERT INTO role (role_id, description) VALUES ( ?, ?)' 로 값을 직접 넣는 것이 아니라 ?  물음표를 사용하여 작성한 것을 볼 수 있습니다. 

이렇게 물음표로 작성한 쿼리는 완전한 쿼리가 아니기 때문에 반드시 ?물음표에 대한 값을 바인딩하는 코드가 있어야 합니다. preparedStatement 객체의 set 메서드들이 그 역할을 수행하고 있는 것을 볼 수 있습니다. preparedStatement 의 set 메서드 첫 번째 매개변수는 ?물음표의 순서를 의미하는 정수 혹은 컬럼명을 넣어줄 수 있었고요. 두 번째 매개변수에는 실제로 대입될 값을 넣어줍니다. 넣어줄 값은 addRole 메서드의 인자로 받아온 role 객체의 RoleId 와 Description 을 넣어주면 될 겁니다.

그리고 실제로 sql 을 실행해 주어야 합니다. sql 을 실행할 때는 preparedStatement 객체의 executeUpdate( ) 라는 메서드를 사용합니다. 이번에는 insert 작업을 하기 때문에 executeUpdate( ) 라는 메서드를 사용했습니다. 이전에 Select 문으로 작성된 sql 을 실행할 때는 executeQuery( ) 라는 메서드를 사용했었는데, Insert & Delete & Update 는 executeUpdate( ) 라는 메서드를 사용합니다. 이렇게 실행한 리턴 값을 insertCount 변수에 대입해 주었습니다.

그 다음에는 예외처리를 진행해주었고 객체를 생성한 역순으로 다시 닫아주었습니다. 

이번에는 실제로 잘 동작하는지 확인하는 코드를 작성해보겠습니다. JDBCExam2 라는 클래스를 만들어보겠습니다. roleId 500 번 description CTO 로 설정한 Role 객체를 생성하였습니다. 그 다음 addRole 메서드를 갖고 있는 RoleDao 객체를 생성하였구요. addRole 메서드를 실행한 결과를 insertCount 변수에 대입하였습니다. 

실행을 시켜보면 1 이라는 값이 잘 출력되고 있는 것을 확인할 수 있습니다. 

실제로 MySQL 을 이용하여 방금 추가한 데이터를 Select 해보면 500 에 해당하는 CTO 데이터가 정상적으로 DB에 추가되어 있는 것을 확인할 수 있습니다. 

 

수업을 마치며
이렇게 INSERT 를 수행하는 addRole( ) 이라는 메서드를 작성해 보았는데요. UPDATE, DELETE 는 INSERT 와 크게 다르지 않습니다. UPDATE 와 DELETE 구문을 직접 스스로 작성해보시기를 추천드립니다. 

 

 

 

출처 : boostcourse 웹 프로그래밍(풀스택) 
https://www.boostcourse.org/web316/lecture/20655?isDesc=false