~.jar
파일.준비된 JDBC 드라이버 파일을 사용 할 수 있도록 메모리에 로딩해야 한다.
Class.forName("oracle.jdbc.driver.OracleDriver");
JDBC 드라이버를 메모리에 동적으로 로딩하기 위해서 Class.forName()
을 이용한다. 메서드의 인자값으로는 JDBC 드라이버 파일 안에서 드라이버 인터페이스를 상속하고 있는 클래스 이름을 패키지 이름과 함께 정확하게 명시 해 주어야 한다.
Class.forName()
에 의해 JDBC 드라이버 파일의 드라이버 인터페이스를 상속한 클래스가 동적으로 로딩될 때 자동으로 JDBC 드라이버 인스턴스가 생성되어 준비가 완료된다.
JDBC의 드라이버 사용 준비가 완료되면 첫 번째 DB 작업으로 DB서버와의 연결 작업을 한다. 이 작업은 java.sql
패키지의 DriverManager
클래스의 getConnection()
메서드를 이용한다.
Connection con = null;
con = DriverManager.getConnection
("jdbc:oracle:thin:@localhost:1521:xe", "java", "java");
DriverManager.getConnection()
은 실제 자바 프로그램과 데이터베이스를 네트워크 상에서 연결해주는 메서드이며 연결에 성공하면 DB와 연결된 상태를 Connection 객체로 표현하여 반환한다.
위에서 만든 Connection
으로 자바 프로그램과 DB사이에 연결이 되었다면 이 연결을 통해 자바프로그램은 DB쪽으로 SQL문을 전송하고, DB는 처리된 결과를 다시 자바프로그램 쪽으로 전달 해야 한다. 바로 이 역할을 하는 객체가 PreparedStatment
이다.
PreparedStatement
는 객체를 '?'가 포함된 SQL문으로 생성하고, 이후에 '?'자리만 바꿔가며 데이터베이스를 처리한다.
PreparedStatement
의 객체생성은 Connection
객체가 제공하는 preparedStatement()
메서드를 사용하고 인자값이 필요하다. preparedStatement()
는 말 그대로 '준비된 상태'이므로 준비 상태인 '?'가 들어간 String 타입의 SQL문이 인자값이 되어야 한다.
String sql = "select no, title, content, writer, writeDate, hit from board where no = ?";
pstmt = con.prepareStatement(sql);
PreparedStatement
객체를 이용해 DB서벌 SQL문을 전송하고 처리 결과를 받아 올 것이다. SQL문을 실행하기 위해 객체에서 제공되는 메서드는 다음과 같다.
ResultSet executeQuery(String sql)
executeQuery()
메서드가 반환하는 ResultSet
은 select
한 결과값을 가지고 있다.
int executeUpdate(String sql)
-> executeUpdate()
메서드가 반환하는 숫자값은 SQL문 실행(insert, update, delete) 후 영향을 받은 레코드의 개수이다. ex) 1행이 등록/수정/삭제 되었습니다.
PreparedStatement
객체 SQL 문은 실행은 인자값이 필요하지 않다. 인자값을 넣음면 두 번 실행하는 꼴이 된다.
PreparedStatement pstmt = null;
ResultSet rs = pstmt.excuteQuery()
PreparedStatement pstmt = null;
int result = pstmt.excuteUpdate()
ResultSet
은 executeQuery()
메서드에서 실행된 SELECT
문의 결과값을 가지고 있는 객체이다.