본문 바로가기

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

JDBC - update문 실행(statement / preparedStatement 인터페이스 별로 작성)

JDBC - update문 실행(statement / preparedStatement 인터페이스 별로 작성)에 대해서 알아보자

JDBC - update문 실행

update문은 테이블의 레코드를 수정하는 명령어이다. UPDATE문을 실행할 때 사용되는 것이 Connection, Statement 인터페이스이다.

 

  • Connection 인터페이스 : 자바와 데이터베이스 사이의 연결을 담당한다.
  • Statement 인터페이스 : SQL문장을 실행한다.

UPDATE문에서는 executeUpdate()메소드를 사용하며, 해당 메소드는 얼마나 많은 레코드들이 변경되었는지를 반환한다. 해당 반환값을 이용해 데이터들이 제대로 추가되었는지를 확인할 수 있다. 여기서는 if문을 사용하여 SQL문 실행을 확인한다.

 

여기서 추가로 Statement 인터페이스와  preparedStatement 인터페이스를 각각 코드를 작성해보았다.

 

Statement와 preparedStatement를 비교했을 때, preparedStatement는 Statement를 상속받았으며 미리 컴파일이 되어있다는 뜻으로, 객체 생성시에 지정된 sql명령어만 실행할 수 있다.(다른 sql문은 실행 못함. 재사용x).

SQL문에서 변수자리에 "?"로 표시하며, set메소드를 통해 값을 설정한다(코드라인이 더 길어진다). Stament보다 가독성이 높고, 성능도 좋으며, 인자값으로 전달이 가능하다는 특징이 있다. 

 

Statement객체는 실행 시 sql명령어를 지정하여 여러 sql구문을 하나의 statement객체로 수행이 가능해 재사용이 가능하다.

 

<update문 statement인터페이스 사용>

 

 

해당 코드에서는 select문으로 번호를 검색하고, 해당 레코드에서 값을 Update문으로 변경하는 코드이다.

select문은 앞서 포스팅했기 때문에 생략한다. 해당 select문은 번호로 검색하기 때문에 검색되는 값은 한개로 if문을 사용했다. BufferedReader클래스로 수정할 글쓴이, 제목, 내용을 입력받고, Update문을 다시 실행한다.

 

과정은 Class.forName()메소드로 jdbc드라이버를 로드하고, DriverManager.getConnection()로 데이터베이스와 연결한다. con.createStatement()로 st 객체를 생성하고, SQL문을 생성해 executeUpdate(sql)로 SQL-Update문장을 실행한다. (Select문은 executeQuery()메소드로 실행한다.)

 

executeUpdate()메소드는 얼마나 많은 레코드들이 변경되었는지를 반환한다. 해당 반환값을 이용해 데이터들이 제대로 추가되었는지를 확인할 수 있는데, 여기서 반환값이 1이면 올바르게 레코드가 수정된 것이고 그렇지 않으면 수정에 실패한 것이다. insert나 Delete문장에서도 같은 방법으로 실행할 수 있다.

 

14번 레코드를 수정해본다.

 

실행화면 1 - 수정성공

 

14번 레코드가 수정되었다.

 

실행화면 2 - 수정실패

 


<update문 preparedStatement인터페이스 사용>

 

 

위와 같은 결과를 보여주는 코드이다. 여기서도  select문으로 번호를 검색하고, 해당 레코드에서 값을 Update문으로 변경하는 코드이다.  해당 select문은 번호로 검색하기 때문에 검색되는 값은 한개로 if문을 사용했다. Scanner클래스로 수정할 글쓴이, 제목, 내용을 입력받고, Update문을 다시 실행한다. 중간에 pstmt에 경고문구가 뜨는데, 앞에 pstmt를 쓰고 close()를 안해주었기 때문이다. 

 

코드 설명을 하자면, Class.forName()메소드로 jdbc드라이버를 로드하고, DriverManager.getConnection()로 데이터베이스와 연결한다. 여기서 Statement와 다른점은 sql문을 먼저 생성하고 con.prepareStatement(sql);로 쿼리문을 미리 컴파일하여 실행해 pstmt생성한다. 그 후 executeUpdate()를 실행하는데, 해당 메소드는 얼마나 많은 레코드들이 변경되었는지를 반환한다. (Select문은 executeQuery()메소드로 실행한다.)

 

해당 반환값을 이용해 데이터들이 제대로 추가되었는지를 확인할 수 있는데, 여기서 반환값이 1이면 올바르게 레코드가 수정된 것이고 그렇지 않으면 수정에 실패한 것이다. insert나 Delete문장에서도 같은 방법으로 실행할 수 있다.

 

추가로 values에 ?로 주었는데,  그 뒤에 set메소드를 통해 값을 설정해주면 된다. setString(1,name)의 전달인자 중 1은 첫 번째물음표를 뜻한다. 만약에 물음표가 여러개면 해당 위치의 물음표를 지정해준다. 뒤에는 해당 물음표에 들어가는 변수값이다. 스캐너 클래스로 검색할 제목을 입력받아 name변수로 저장하고, 해당 값을 물음표에 설정해준다.

 

14번 레코드를 수정해본다.

 

실행화면 1 - 수정성공

 

14번 레코드가 수정되었다.

 

실행화면 2 - 수정실패