생존기술_IT/JAVA

[JAVA] execute / executeQuery / executeUpdate

LeCafeCreme 2020. 9. 14. 20:27

[출처] execute / executeQuery / executeUpdate 차이|작성자 똥광이

 

Statement


1. 개요

- Statement 객체는 SQL문을 데이터베이스로 전송하는데 사용한다.

- 실제로 다음과 같은 3종류의 Statement 객체들이 있고 모두 주어진 접속상에서 SQL 문들을 실행하기 위해 컨테이너들로써 동작한다.

 

  ① Statement

      : Statement 객체는 매개변수 없는 간단한 SQL문을 실행하는데 사용되며,

        Statement 인터페이스는 SQL문들을 실행하고 결과들을 검색하기 위한 기본적인 메소드들이 있다.

 

  ② PreparedStatement(Statement로 부터 상속받음)

      : PreparedStatement 객체는 IN 매개변수를 가지거나 가지지 않는 프리컴파일된 SQL문을 실행하는데 사용되고,

        PreparedStatement 인터페이스는 IN 매개변수들을 다루기 위한 메소드들이 있다.

 

  ③ CallableStatement(PreparedStatement로부터 상속받음)

      : CallableStatement 객체는 데이터베이스 저장 프로시져(Stored Procedure)의 호출을 실행하는데 사용되며,

        CallableStatement 인터페이스에는 OUT 매개변수들을 다루기 위한 메소드들이 있다.    

 

    이러한 것들은 특정 형태의 SQL문들을 전송하기 위해 분화되어졌다.

 

 

2. Statement 객체 생성

- 특정 데이터베이스에 연결되면, 그 접속은 SQL문들을 전송하는데 사용된다.

- Statement 객체는 아래의 코드처럼 Connection의 createStatement 메소드로 생성되어진다.

 ☞ Connection conn = DriverManager.getConnection(URL, USER, PWD); // URL:DB 접속 드라이버 url, USER:DB접속 ID, PWD:비밀번호

 ☞ Statement stmt = conn.createStatement();

 

- 데이터베이스로 전송되어질 SQL문은 Statement 객체를 실행하기 위한 메소드들의 인자로서 공급되어진다.

 ☞ ResultSet rs = stmt.executeQuery("SELECT * FROM table");

 

 

3. Statement 객체 수행

- Statement 인터페이스는 SQL문들을 실행하기위한 3가지 다른 메소드(execute, executeQuery, executeUpdate)들을 제공한다

- SQL문이 무엇을 만드는지에 따라 사용하는 메소드가 나뉜다.

 

  ① executeQuery 메소드

     : 하나의 ResultSet을 만드는 SQL문에서 사용(executeQyery 메소드는 ResultSet 객체를 리턴한다.)

     : 주로 SELECT문을 이용하는 조회에서 사용됨.

 

  ② executeUpdate 메소드

     : INSERT, UPDATE, DELETE 등 (DML), CREATE, DROP 등(DDL)문들을 실행하는데 사용

       └ DML을 사용할 경우 리턴값 : 작용한 열의 개수(갱신 카운트로 간주되는)를 나타내는 정수

       └ DDL을 사용할 경우 리턴값 : 0을 리턴(DML을 실행 후 아무런 영향을 주지 않은 경우에도 '0'을 리턴한다.)

 

    ※ 실행문을 위한 모든 메소드들은 하나가 오픈되어있다면, 호출된 Statement 객체의 현재 ResultSet을 닫아야한다.

        이것은 Statement 객체를 다시 실행기전에 현재 ResultSet 객체의 어떠한 처리도 완결해야 할 필요가 있다는 것을 의미한다.

 

   ③ execute 메소드

      : SQL문이 여러개의 ResultSet객체나 여러개의 갱신카운트 또는 ResultSet객체들과 갱신 카운트들의 결합을 리턴하는 것이 가능할때 사용한다.

 

[출처] execute / executeQuery / executeUpdate 차이|작성자 똥광이