순서 | 절차 | 사용되는 interface 혹은 class |
---|---|---|
1 | JDBC 드라이버 로드 | DriverManager |
2 | DB와 연결 | Connection |
3 | SQL문 실행 | Statement |
4 | DB와 연결 끊음 | ResultSet |
interface | 역할 | 얻는 방법 |
---|---|---|
Connection | 데이터베이스와 연결 | DriverManager.getConnection() |
Statement | SQL 질의, 갱신 실행 | connection.createStatement() |
ResultSet | 결과물 | statement.executeQuery() |
이렇게 얻어진 객체는 클래스로 선언된 변수에 저장해두지 않고 인터페이스로 선언한 변수에 넣고 사용한다. 직접 개발자가 생성하지 않은 객체는 인터페이스를 통해 접근하여 원하는 작업을 하는 것이다.
- 사용할 JDBC 드라이버를 프로그램 시작할 때 로딩한다. (odjdbcX.jar)
1-1. OracleDriver 객체가 생성된다. (자바에서 드라이버를 관리하는 객체인 드라이버 매니저에 오라클 드라이버가 등록된다) → DriverManager클래스로 DB에 접속할 수 있게 된다.- DriverManager의 static 메소드인 getConnection()으로 Connection 객체를 얻어온다. Connection은 인터페이스기 때문에 일반적인 객체 생성처럼 new 연산자를 사용하지 않고 다른 객체의 메소드로부터 객체를 얻어온다.
2-1. Connection 객체를 통해 DB 접근이 가능해진다.- 생성한 Connection 객체로 접근해서 createStatement()를 호출해 Statement객체를 생성한다.
- Statement객체의 메소드를 사용해 쿼리문을 수행한다.
4-1. 조회와 같이 결과가 있으면 executeQuery()
4-2. 삽입, 수정, 삭제와 같이 변화가 있지만 결과가 없으면 executeUpdate() 사용- 위의 메소드를 실행한 결과값은 여러 개의 행으로 반환되는데, 이를 ResultSet 클래스로 받아 처리한다.
5-1. ResultSet의 next(), previous(), first(), last()를 사용해 행 단위로 이동할 수 있다. (T, F 출력)
5-2. 반복문과 getXXX()를 사용해 ResultSet객체의 값을 행 단위로 얻어올 수 있다.- 사용 후에는 close()로 닫아줘야 한다.
위에서는 sql문을 컬럼별 변수를 넣어 작성해 executeUpdate()의 매개변수로 넣는 방법을 사용하였는데, 이는 쿼리문을 복잡하게 작성해야 하는 불편이 있다. 따라서 간단히 작성할 수 있는 PreparedStatement 인터페이스를 사용한다.
- Connection 인터페이스의 객체를 생성하고 preparedStatement() 메소드를 호출해 PreparedStatement 객체를 얻는다.
1-1.이때 인자로 사용되는 sql문은 각 컬럼에 추가할 값을 직접 지정하지 않고 ?로 표시한다. ?는 바인드 변수라고 한다.- ?로 지정된 변수에 PreparedStatement.setXXX()메소드로 값을 할당해준다.
- executeUpdate()로 갱신한다.
- close()로 닫는다.