[Java] Statement 인터페이스의 구현체의 execute 함수의 종류

Sechan Beak·2023년 7월 13일
1

개요

Statement 인터페이스의 구현체에서 제공하는 execute, executeQuery, executeUpdate 함수의 차이점은 무엇인지 알아본다.

Statement interface

Statement 인터페이스의 구현체는 DB와의 Connection을 통해서 생성 가능하며, DB에 쿼리문을 전달하는 객체이다.

exectue 함수와 파생

execute()

모든 유형의 쿼리를 실행 가능하다.
결과로 boolean을 return하는데, 이 리턴값으로 결과셋을 가져올 수 있는지의 여부를 알 수 있다.
true이면 getResultSet메소드를 사용하여 ResultSet을 가져올 수 있다.
INSERT, UPDATE, DELETE와 같은 데이터 조작 쿼리를 실행한 경우, 반환되는 데이터가 없기 때문에 false가 반환된다.

executeQuery()

SELECT 쿼리와 같이 결과를 반환하는 SQL 문장을 실행할 때 사용한다.
반드시 ResultSet 객체를 반환하며, 반환하지 못한 경우 예외를 발생시킨다.SELECT 이외의 다른 유형의 쿼리에는 사용할 수 없다.

executeUpdate

INSERT, UPDATE, DELETE와 같은 데이터를 조작 쿼리를 실행할 때 사용한다. int를 return하는데, 이는 이로인해 실행된 쿼리에 의해서 영향을 받은 행의 개수를 뜻한다. SELECT와 같은 결과를 반환하지 않는 쿼리는 이 메소드로 실행할 수 없다.


사실상 execute는 이름에서도 상위범주를 의미하듯, 아래 두 함수의 합집합이다. 그렇다면 아래 executeQuery (이하 Query) 와 executeUpdate(이하 Update)함수는 어째서 존재하는 것인가?

Query와 Update의 존재의의

1. 가독성과 의도전달

위 두 함수는 사용하는 쿼리문의 유형이 정해져있기 때문에, 코드를 읽는 사람으로 하여금, 어떤 특정한 유형의 쿼리를 실행하는 코드라는 것을 알 수 있다.

2. Exception

execute 메소드는 return값의 boolean이 결과셋을 반환했는가의 여부를 나타내기에 이를 통해서는 예외의 발생을 알 수 없다.

하지만 Query메소드는 성공 시 ResultSet을 반드시 반환하기에, 반환데이터가 없는 쿼리를 사용하면 예외가 발생한다. 이를 통해서 쿼리문의 정상실행 여부를 알 수 있다.

결론 execute가 짱이고, Query하고 Update는 execute메소드의 특수한 경우라고 볼 수 있다.
다만, 특수한 경우임을 코드차원에서 명시하기 위해서 Query, Update메소드를 사용하는 것이 권장된다.

profile
거사 하나 치르면 올림

0개의 댓글