본문 바로가기

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

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

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

JDBC - delete문 실행

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

 

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

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

 

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

 

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

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

 

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

 

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

 

 

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

select문은 앞서 포스팅했기 때문에 생략한다. 해당 select문은 번호로 검색하기 때문에 검색되는 값은 한개로 if문을 사용했다. 번호값이 있다면, delete문을 실행한다.

 

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

 

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

 

15번 레코드를 삭제해본다.

 

실행 화면 1 - 삭제 성공

 

15번 레코드가 삭제되었다.

 

실행 화면 2 - 삭제 실패


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

 

 

위와 같은 결과를 보여주는 코드이다. 여기서도  select문으로 번호를 검색하고, 해당 레코드에서 값을 delete문으로 삭제하는 코드이다.  해당 select문은 번호로 검색하기 때문에 검색되는 값은 한개로 if문을 사용했다. 중간에 pstmt에 경고문구가 뜨는데, 앞에 pstmt를 쓰고 close()를 안해주었기 때문이다.

 

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

 

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

 

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

 

14번 레코드를 삭제해본다.

 

실행 화면 1 - 삭제 성공

 

14번 레코드가 삭제되었다.

 

실행 화면 2 - 삭제 실패