JDBC에 대한 설명
자바에서 오라클을 연결해서 사용할때 총 6단계의 과정을 거친다.
1. 드라이버 로딩
Class.forName("oracle.jdbc.driver.OracleDriver");
Class.forName 으로 JDBC드라이버를 로딩해 준다. 이 부분은 ClassNotFountException 핸들링이 필요하므로 try-catch문으로 감싸주어야한다.
2. DB 연결
Connection conn = null;
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORA92", "scott", "tiger");
Connection 을 사용하기 위해선 java.sql.Connection 을 임포트해주어야함. conn 이라는 커넥션을 만든 후에 DriverManager의 getConnection를 import해주어야 한다.
첫 매계변수는 DB연결쪽이다. jdbc:oracle:thin:@부분은 동일하게 사용하고 localhost는 위치를 말한다. 다른PC이거나 할 경우는 IP를 입력해 주고 1521은 해당포트이며 ORA92는 오라클의 SID이다. 자신에 맞게 입력해준다.
두번째와 세번째는 오라클의 아이디와 패스워드이다.
이 연결부는 SQLException예외처리로 Try-Catch로 감싸 주어야 한다.
3. 쿼리준비
PreparedStatement psmt = null;
psmt = conn.prepareStatement("DB쿼리문");
혹은
Statement stmt = null;
stmt = conn.createStatement("DB쿼리문");
4. 쿼리 실행
psmt.executeUpdate();
로 쿼리를 실행한다. insert, update, delete 등 값을 받아 오지 않는 쿼리문은 executeUpdate를 이용해서 실행해 준다.
5. 데이터 가져오기
select등 쿼리실행후에 값을 가져와야 하는 쿼리문의 경우는
ResultSet rs = null;
rs = psmt.executeQuery();
java.sql.ResultSet을 이용해서 쿼리실행 한 것을 ResultSet으로 받아들인다. 이때 쿼리실행은 executeQuery()를 사용한다.
그 후에
while(rs.next()) {
int i=1;
String id = rs.getString(i++);
String name = rs.getString(i++);
String addr = rs.getString(i++);
}
rs.next()를 이용해서 한 줄씩 읽어들인다. 처음에는 시작위치에 있고 rs.next()를 실행하면 받아온 데이터의 첫줄 위치로 이동하게 된다. while문 혹은 if문을 통해서 rs.next()가 null인지를 확인하면서 반복문을 돌린다.
rs.get을 이용해서 값을 가져와 변수 혹은 dto객체등에 저장해서 사용한다. DB에 여러줄을 가져올때는 dto객체로 받아서 컬렉션 계열로 저정해야 한다.
6. 커넥션 닫기
if (rs!=null) {
try {
rs.close();
} catch (SQLException e) {
}
}
if(stmt!=null) {
try {
stmt.close();
} catch (SQLException e) {
}
}
if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
}
}
닫을때는 Open한 반대의 순서로 닫아주어야 한다. Statement가 PreparedStatement 보다 상위클래스이기 때문에 닫는 메서드를 만들때 Statement로 받을어도 PreparedStatement을 정상적으로 받을 수 있다. 닫을때는 습관적으로 null이 아닌지를 확인한 뒤에 받도록 만들면 생각지 못한 오류를 막을 수 있다.
이것이 JDBC의 기본적인 구조인데 실제적으로 사용할때는 제공되는 커넥션풀(ConnectionPool)등을 사용해서 이미 만들어진 커넥션을 사용하기 때문에 1번 과정은 pass하고 2번과정부터 커넥션풀에서 커넥션을 얻어오는 방식으로 사용하게 되는 경우가 많다.
객체지향에 대해 (0) | 2020.09.25 |
---|---|
JDBC 사용 예제 (0) | 2020.06.29 |
2020-06-17 (0) | 2020.06.17 |
페이징 수정ㅈ우 (0) | 2020.06.11 |
자바 to String 이란?? (0) | 2020.06.11 |