카테고리 없음
JDBC
mi-ni
2024. 1. 5. 18:39
JDBC용 객체
Connection :DB의 연결정보를 담고 있는 객체
[Prepared]Statement : 연결된 DB에 SQL문 전달해서 실행하고 그 결과를 받아내는 객체
ResultSet : SELECT문 실행 후 조회된 결과물들이 담겨있는 객체
JDBC과정 (순서중요★ ★ ★)
1) jdbc driver 등록 : 해당 DBMS(오라클)가 제공하는 클래스 등록
2) Connection 생성 : 연결하고자 하는 DB정보를 입력해서 해당 DB정보를 입력해서 해당 DB와 연결하면서 생성
3) Statement 생성 : Connection 객체를 이용해서 생성 (sql문 실행 및 결과를 받는 객체)
4) sql문 전달하면서 실행 : Statement 객체를 이용해서 sql문 실행
5) 결과받기
> SELECT문 실행 => ResultSet 객체 (조회된 데이터들이 담겨있음) =>6_1
> DML문 실행=> int (처리된 행 수) => 6_2
6_1) ResultSet이 담겨있는 데이터들을 하나씩 하나씩 뽑아서 vo객체에 주섬주섬 옮겨담기
[+ 여러행 조회시에는 ArrayList에 차곡차곡 담기]
6_2) 트랜잭션 처리(성공적으로 수행했으면 commit, 실패했으면 rollback)
7) 다 사용한 JDBC용 객체들 반드시 자원 반납!! 안하면 디비 락걸림!! (close) = > 생성된 역순으로!!
/*
// 여기서부터 1번 막아둠
//1. 각자 pc(localhost)에 JDBC계정에 연결 한 후 TEST 테이블에 INSERT 해보기 !
//insert문 => 처리된 행수(int) => 트랜젝션 처리
Scanner sc = new Scanner(System.in);
System.out.print("번호 : ");
int num = sc.nextLine();
// 필요한 변수들 먼저 셋팅
int result = 0; // 결과(처리된 행수)를 받아줄 변수
Connection conn = null; // DB의 연결정보를 보관할 객체
Statement stmt = null; // sql문 전달해서 실행 후 결과를 받는 객체
// ResultSet은 select문에서만 필요한거 ! 지금은 패스
// 앞으로 실행할sql문 작성("완성형태" 로 만들어두기)
//중요!!! ("쿼리문" 안에 세미콜론 없어야됨!! 주요 에러나는 부분이 여기임)
//String sql = "INSERT INTO TEST VALUEES(1,'차은우',SYSDATE)";
String sql = "INSERT INTO TEST VALUES(" + num + ",'" + name + "', SYSDATE)";
try {
// 1) jdbc driver 등록
// forName : class 파일 찾아서 등록한다는 의미!
Class.forName("oracle.jdbc.driver.OracleDriver");
System.out.println("jdbc driver 등록 성공!");
// OracleDriver 이건 자바에서 제공하는 클래스가 아님...
// 패키지부터 보면 oracle로 시작함
// 그럼 어떻게 써야하나..? => ojdbc6.jar 파일을 등록해줘야함!!
// 2) Connection 객체 생성 : DB에 연결(url, 계정명, 비번)
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "JDBC", "JDBC");
// 3) Statement 객체 생성
stmt = conn.createStatement();
// 4, 5) sql문 전달하면서 실행 후 결과 받기
result = stmt.executeUpdate(sql);
// 내가 실행할 sql문이 DML문(I,U,D)일 경우 => stmt.executeUpdate("dml문"); : int
// 내가 실행할 sql문이 SELECT문 일 경우 => stmt.executeQuery("select문") : ResultSet
// 6) 트랜젝션 처리
if(result > 0) { // 성공했을 경우 commit
conn.commit();
}else { // 실패했을 경우 rollback
conn.rollback();
}
} catch (ClassNotFoundException e) {
System.out.println("OracleDriver 클래스 등록 실패 ㅠㅠ");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
// 7) 다 쓴 JDBC용 객체 자원 반납 (생성된 역순으로)
try {
stmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// 여기까지 1번 막아둠
*/