- Statement
- Connection 객체로부터 Instance화하여 만들어내며, DB에 SQL을 보내기 위한 준비작업과 실제 SQL를 실행하여 결과갑슬 주는 API를 제공한다.
- 장점
- 사용이 편리하다.
- 단점
- 디버깅이 어렵다.
- Overhead가 많다.
- SQL문 재사용이 어렵다.
- Statement의 주요 메소드
- execute()
- 질의문(SELECT), 갱신문(INSERT, UPDATE, DELETE) 모두 사용할 수 있다.
- 질의문의 결과(ResultSet)를 얻기 위해서는 getResultSet() 메소드를 사용해야한다.
- executeQuery()
- SELECT문을 DB로 넘겨 실행시키고자 할 때 사용한다.
- ResultSet 객체를 Return하며, Argument로는 Query할 SELECT문장을 String 형태로 받는다.
- executeUpdate()
- INSERT, UPDATE, DELETE문 같이 DB를 갱신 할 때 사용하는 메소드이다.
- 갱신된 행의 수를 반환한다.
- 0보다 큰 값은 갱신된 row의 수 이다.
- 0인 경우 수정된 row가 없다.
- execute()
- PreparedStatement
- Statement를 상속받기 때문에 Statement 클래스 메소드를 전부 사용할 수 있다.
- SQL문을 미리 만들어두고 변수를 따로 입력하는 방식으로 효율성이 좋다.
- SQL INJECTION 공격에 방어가 가능하며 보수 측면에서 유리한 구조이다.
- PreparedStatement의 주요 메소드
- Statement 클래스를 상속받기 때문에 Statement 메소드와 동일하다.
- ResultSet
- 데이터베이스 결과값을 임시로 저장하는 객체이며 하나의 테이블을 저장할 수 있는 구조이며, 연결 지향적이다.
- forward only
- 한쪽 방향으로만 읽을 수 있으며, 1이란 데이터를 읽었으면 그다음은 2란 데이터를 읽어야하며... 이런식의 진행만 가능하다.
- ResultSet의 주요 메소드
- next()
- 읽어 올 레코드가 있으면 true, 없으면 false를 반환한다.
- previous()
- 이전 레코드로 이동한다. (첫번째 레코드면 false를 반환한다.)
- first()
- 처음 위치로 이동한다. (레코드가 없을 경우 false를 반환한다.)
- last()
- 마지막 위치로 이동한다. (레코드가 없을 경우 false를 반환한다.)
- getString(String columnLabel)
- (현재 커서가 읽을 위치의) 컬럼명에 해당하는 문자열을 반환한다.
- getInt(String columnLabel)
- (현재 커서가 읽을 위치의) 컬럼명에 해당하는 정수값 반환한다.
- getString(columnIndex)
- 컬럼 인덱스에 해당하는 문자열을 반환한다. (index는 1부터 시작한다.)
- getInt(columnIndex)
- 컬럼 인덱스에 해당하는 정수값을 반환한다. (Index는 1부터 시작한다.)
- next()