국비/JDBC

[00] JDBC (eclipse, oracle 환경설정, JDBC 맛보기)

제발 취업하게 해주세요 2022. 5. 9. 21:52
오라클에서 JDBC계정 생성, 최소한의 권한 부여
CREATE USER JDBC IDENTIFIED BY JDBC;
GRANT CONNECT, RESOURCE TO JDBC;
이클립스 환경설정
1) 인코딩방식 설정

Window  ->  Preferences

General   ->   Workspace ( Default(Ms949) => Other(UTF-8) 변경  )
             ->   Editors   -> Text Editors  -> Spelling ( Encoding Default(UTF-8) )

2) 프로젝트 외부드라이버 사용 설정

프로젝트 우클릭 -> Properties -> Java Build Path ( Libraries탭  -> Add External JARs...  -> ojdbc6.jar 파일 열기)

0단계. oracle에서 TEST 테이블 만들기
CREATE TABLE TEST(
	TNO NUMBER,
    TNAME VARCHAR2(20),
    TDATE DATE
);

 

JDBC 맛보기!!! 이클립스 상에서 자바 소스코드를 사용하여 TEST테이블에 데이터를 추가해보자
1단계. 필요한 변수를 먼저 세팅한다.
		int result = 0;
		Connection conn = null; //import java.sql.Connection
		Statement stmt = null; // import java.sql.Statement
2단계. 실행할 SQL문을 "완성형태"로 작성한다
		String sql = "INSERT INTO TEST VALUES(1, '박머루', SYSDATE)";
3단계.
1)  JDBC driver 등록
    : 외부 드라이버를 사용하기 때문에 어떤 드라이버를 사용해야 하는지 알려주는 작업!
      oracle 드라이버를 등록한다!

    Class.forName("oracle.jdbc.driver.OracleDriver"); // 이건 암기해야 함!! 약속!!
     => 예외처리(ClassNotFoundException) 해주기


2)  Connection 객체 생성 => 반환형 connection객체
    : 접속하기,  DB에 연결 => (필요한 정보 : url, 계정명, 비밀번호)

   conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe"  // url 정보
                                                      ,"JDBC", "JDBC" );   // 아이디, 비밀번호

    => SQLException 예외처리(Add catch clause to surrounding try) 
                                  
    1) 에서 driver를 등록하는 순간 DriverManager 객체 사용이 가능해지는데,
    DriverManager 객체의 getConnection 메소드를 이용하여 Connection 객체를 생성할 수 있다!
    (getConnection 메소드의 반환형이 Connection)

-- 여기까지 완료하면 oracle에서 계정 접속 후 워크시트까지 열어놓은 상태
-- 워크시트를 연 다음에는?? insert 구문을 입력한다!

-- insert 구문을 실행하기 위해
3) Statement 객체 생성 => 반환형 Statement 객체

   Connection 객체 conn에 접근해서 Statement 객체를 생성할 수 있다
   stmt = conn.createStatement();  => 반환형 Statement


4) SQL쿼리 날려서 실행 후 결과 받기

   Statement 객체에 접근하여 executeUpdate / executeQuery 메소드 실행

   result = stmt.executeUpdate(sql); // 반환형이 int이므로 int형 변수 result에 대입

-- 내가 실행할 SQL문이 DML문(INSERT, UPDATE, DELETE)일 경우
   => stmt.executeUpdate( " DML문 " ) : 반환형 int형 => 처리된 행의 수가 반환

-- 내가 실행할 SQL문이 SELECT문일 경우
   => stmt.executeQuery( " SELECT문 " ) : 반환 resultSet (select 조회 결과, 행들의 집합)


5) 조건문으로 트랜잭션 처리
-- COMMIT => 성공했을 경우
-- ROLLBACK => 아닐 경우


6) 예외처리구문 닫아주기 (finally)
-- 생성의 역순으로 닫아주기
		try {
			// 1) JDBC driver 등록
			Class.forName("oracle.jdbc.driver.OracleDriver");
			System.out.println("driver 등록 성공");
			
			
			// 2) Connection 객체 생성 => SQLException 예외처리(두번째거)
            //반환형 : connection 객체, Connection 변수 conn에 대입

											// 오라클 버전에 대한 정보
			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe"
										, "JDBC", "JDBC");
										  //아이디, 패스워드
			System.out.println("Connection 객체 생성!");
			
			
			// 3) Statement 객체 생성
			stmt = conn.createStatement(); // 반환형 : Statement 객체
			System.out.println("Statement 객체 생성!");
			
            
			// 4) SQL쿼리 날려서 실행 후 결과 받기
			result = stmt.executeUpdate(sql);


			// 5) 트랜잭션 처리
			if(result > 0) { // 성공했을 경우 commit
				conn.commit();
			} else { // 아닐 경우 rollback
				conn.rollback();
			}
	
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally { // 생성의 역순으로 닫아주기 (stmt > conn) , 예외처리
			try {
				stmt.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
			
		if(result > 0) {
			System.out.println("insert 성공");
		}else {
			System.out.println("insert 실패");
		}
	}