JDBC용 객체
Connection : DB의 연결 정보를 담고있는 객체
[Prepared] Statement : 연결된 DB에 sql문을 전달하여 실행하고
그 결과를 받아주는 객체
ResultSet : DQL(SELECT)문 실행 후 조회 결과를 담고있는 객체
*JDBC 과정 (*순서 중요*)
1) JDBC용 DRIVER 등록 : 해당 DBMS(오라클)가 제공하는 클래스 등록
2) Connection 생성 : 연결하고자 하는 DB정보를 입력해서 해당 DB와 연결하면서 생성
DB정보 : 접속 주소(ur1) , 사용자 이름(username), 사용자 비밀번호(password)
3) Statement 생성 : Connection 객체를 이용하여 생성
sql문을 실행하고 결과를 이용하여 생성
4) sql문을 DB에 전달하여 실행(State 객체 사용)
5) 실행 결과를 받기
- SELECT문 실행 : ResultSet 객체(조회된 데이터들이 담겨져 있음)
- DML문 실행 : int (처리된 행 수)
6) 결과 처리
- ResultSet에 담겨져있는 데이터들을 하나하나 꺼내서 vo 객체에 옮겨 담기
- 트랜잭션 처리 (실행을 성공했으면 COMMIT, 실패했으면 rollback)
7) 사용 후 JDBC용 객체들을 반납 (close) --> 생성 역순으로!
Connection conn = null; ( 1번 )
Statement stmt = null;
ResultSet rset = null;
try{
1) jdbc driver 등록
Class.forName("oracle.jdbc.driver.OracleDriver");
2) Connection 객체 생성
conn = DriverManager.getConnection(1.접속주소, 2.사용자이름, 3.사용자비밀번호)
3) Statement 객체 생성
stmt = conn.createStatement();
4)5) sql문 실행 후 결과 받기
String sql = "SELECT * FROM TEST";
rset = stmt.executeQuery(sql)
6) sql문 실행 결과를 하나하나 추출하기
rset.next(); -- boolean (데이터가 있으면 true, 없으면 false)
while( rset.next() ){
int tno = rset.getInt("TNO"); // 컬럼명으로 추출
String tname = rset.getString(2); // 컬럼 순번으로 추출(조회했을 때 두번째 컬럼이 Tname)
Date tdate = rset.getDate("TDATE"); // sql Date 객체
}
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}finally {
try {
rset.close();
stmt.close();
conn.close(); -- 역순으로 close();
}catch (SQLException e) {
e.printStackTrace();
}
}
}
private final String URL = "jdbc:oracle:thin:@localhost:1521:xe";
private final String USER_NAME = "C##JDBC";
private final String PASSWORD = "JDBC";
Connection conn = null;
java.sql.Statement stmt = null;
try {
1) jdbc driver 등록
Class.forName("oracle.jdbc.driver.OracleDriver");
2) Connection 객체 생성 => DB 연결
conn = DriverManager.getConnection(URL,USER_NAME,PASSWORD);
conn.setAutoCommit(false);
setAutoCommit(false);
--> 기본적으로 JDBC연결은 자동 커밋 모드로 설정이 되어있다
즉 각 SQL문이 실행된 후 자동으로 커밋이된다
setAutoCommit(false) .. false로 설정하므로
자동관리에서 수동관리로 변경이 가능하다
3) Statement 객체 생성
stmt = conn.createStatement();
4) 실행 후 결과 받기
result = stmt.executeUpdate(sql);
5) 트랜잭션 처리
실행에 성공을 했으면 commit
실행에 실패했을 시 rollback
if(result > 0) {
conn.commit();
}else {
conn.rollback();
}
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}
return result;
}
public ArrayList<Member> selectList() {
// SELECT문(여러 행 조회) --> ResultSet 객체 --> ArrayList<Member>에 담기
ArrayList<Member>list = new ArrayList<Member>(); // 리스트가 비어있는 상태
Connection conn = null;
java.sql.Statement stmt = null;
ResultSet rset = null;
try {
// 1) jdbc driver 등록
Class.forName("oracle.jdbc.driver.OracleDriver");
// 2) Connection 객체 생성
conn = DriverManager.getConnection(URL,USER_NAME,PASSWORD);
// 3) Statement 객체 생성
stmt = conn.createStatement();
// 4)5) sql문 실행 후 결과 받기
// 실행할 sql문
String sql = "SELECT * FROM MEMBER";
rset = stmt.executeQuery(sql);
// 조회는 트랜잭션 처리가 필요없다.
// 6) sql문 실행 결과를 하나하나 추출하기
// * 데이터 있는 지 여부 확인 => rset.next(); boolean (데이터가 있으면 true, 없으면 false)
while(rset.next()) {
// * 데이터를 가지고 올 때, '컬럼명' 또는 '컬럼순번'을 사용하여 추출
Member m = new Member(
rset.getInt("USERNO"),
rset.getString("USERID"),
rset.getString("USERPW"),
rset.getString("USERNAME"),
rset.getString("GENDER") == null ? ' ' : rset.getString("GENDER").charAt(0),
rset.getInt("AGE"),
rset.getString("EMAIL"),
rset.getString("ADDRESS"),
rset.getString("PHONE"),
rset.getString("HOBBY"),
rset.getDate("ENROLLDATE")
);
list.add(m);
// 컬럼명으로 추출
}
// 반복문이 끝나는
// 조회된 데이터가 없다면 ? 리스트는 비어 있을 것임
// 조회된 데이턱
}catch(ClassNotFoundException e) {
e.printStackTrace();
}catch(SQLException e) {
e.printStackTrace();
}finally {
try {
rset.close();
stmt.close();
conn.close(); // 자원 해제는 역순으로 처리한다
}catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}
'ORACLE SQL' 카테고리의 다른 글
SQL JDBC 회원 관리 프로그램 _ INSERT (0) | 2024.07.31 |
---|---|
ORACLE SQL DCL/TCL , view (0) | 2024.07.31 |
ORACLE SQL DDL 복습 내용 정리 (0) | 2024.07.30 |
ORACLE SQL_DML (0) | 2024.07.29 |
ORACLE SQL SEQUENCE (0) | 2024.07.29 |