본문 바로가기

DEVELOPER/Database

executeQuery 와 executeUpdate

Statement


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

 

세 종류의 Statement 객체

SQL문을 실행하기 위한 컨테이너들로써 동작

  • Statement
  • PreparedStatement (Statement로부터 상속)
  • CallableStatement (PreparedStatement로부터 상속)

 

Statement 객체 수행

ⓐ execute

  1. 수행결과로 Boolean 타입의 값을 반환
  2. 모든 구문을 수행

리턴값이 ResultSet이라고 하여 결과값을 담을 수 없음.

만약 리턴값이 ResultSet 일 경우에는 true, 이외의 경우에는 false 출력

* 반환 타입으로 boolean 타입을 사용하지 않는 경우 다음과 같은 메세지가 출력
error: incompatible types: boolean cannot be converted to ResultSet

 

* 리턴값이 ResultSet이 아닌 경우

PreparedStatment pstmt = con.prepareStatement("INSERT INTO SAMPLE_TABLE VALUES (?,?)");
pstmt.setInt(1,200);
pstmt.setString(2,"kang");

boolean result = pstmt.execute();
System.out.println("Result :" + result);
Result : false

 

* 리턴값이 ResultSet인 경우

pstmt = con.prepareStatement("SELECT ID, NAME FROM SAMPLE_TABLE");
boolean result2 = pstmt.execute();
System.out.println("Result2 : " + result2);
Result2 : true

 

ⓑ executeQuery

  1. 수행결과로 ResultSet 객체의 값을 반환
  2. SELECT 구문을 수행할 때 사용되는 함수
pstmt = con.prepareStatement("SELECT ID,NAME FROM SAMPLE_TABLE");
ResultSet rs = pstmt.executeQuery();

while(rs.next()) {
	
    System.out.println("ID = " + rs.getInt(1) + ", NAME = " + rs.getString(2));
}
ID = 100, NAME = kang

 

여기서 next() 메소드를 이용해서 선택되는 행을 바꿀 수 있음

다음 행이 있을 경우 TRUE, 없을 경우에는 FALSE 반환

위 이미지 경우에는 아무것도 가리키지 않기 때문에,

getString() / getInt() 등 메소드를 사용했을 경우 에러 발생

next() 메소드를 통해 커서가 한 칸 이동

또한, get타입 메소드는 많은 타입 데이터를 불러올 수 있음

숫자, 컬럼의 이름 등등

getInt(1) 는 해당 컬럼의 1번째 해당 값을 불러옴.

 

ⓒ executeUpdate

  1. 수행결과로 Int 타입의 값을 반환 ( 처리된 레코드(row)의 개수 )
  2. SELECT 구문을 제외한 다른 구문을 수행할 때 사용되는 함수 (INSERT, DELETE, UPDATE)
  3. CREATE / DROP 관련 문구에서는 -1 반환
  4. 업데이트하는 개념

 


추가로 내가 궁금했던 부분..

executeQuery() 메서드를 실행 시킬 때 어떤 경우에는 SQL문을 인자로 갖고, 어떤 경우에는 인자가 없다.,.왜 일까??

Statement 객체에서 executeQuery(String sql) 메소드를 실행하기 위해서 인자로 sql문을 사용하는 것이였다.

PreparedStatement 객체에서 executeQuery() 메소드를 실행할 때는 인자는 필요하지 않다는 점을 유의하자

 

 

반응형