JDBC

2021. 10. 19. 10:37Web

반응형
package test;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TestRun {

	public static void main(String[] args) {
		
		/*
		 * * JDBC용 객체
		 * - Connection : DB의 연결정보를 담고있는 객체
		 * - [Prepared]Statement : 연결된 DB에 sql문을 전달해서 실행하고 
         	 *			   그 결과를 받아내는 객체 ****
		 * - ResultSet : SELECT문 실행 후 조회된 결과물들이 담겨있는 객체 
		 * 
		 * * JDBC 과정 (순서중요)
		 * 1) jdbc driver 등록 : 해당 DBMS(오라클)가 제공하는 클래스 등록
		 * 2) Connection 생성 : 연결하고자 하는 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. 각자 pc(localhost)에 JDBC계정에 연결 한 후 TEST테이블에 INSERT 해보기
		//    insert문 => 처리된 행 수 (int) => 트랜잭션 처리 
		
		Scanner sc = new Scanner(System.in);
		
		System.out.print("번호 : ");
		int num = sc.nextInt();
		sc.nextLine();
		
		System.out.print("이름 : ");
		String name = sc.nextLine();
		
		// 필요한 변수들 먼저 셋팅
		int result = 0;		// 결과(처리된 행수)를 받아줄 변수
		Connection conn = null; // DB의 연결정보를 보관할 객체
		Statement stmt = null;  // sql문 전달해서 실행 후 결과 받는 객체
		
		// 앞으로 실행할 sql문 ("완성형태"로 만들어두기) (맨 뒤에 세미콜론 없어야됨)
		//String sql = "INSERT INTO TEST VALUES(1, '신짱구', SYSDATE)";
		String sql = "INSERT INTO TEST VALUES(" + num + ", '" + name + "', SYSDATE)";
		
		try {
			// 1) jdbc driver 등록 
			Class.forName("oracle.jdbc.driver.OracleDriver"); 
            		// ojdbc6.jar 파일을 추가안했을 경우 | 추가는 했는데 오타가 있을 경우 
            		// => ClassNotFoundException발생 
			
			// 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문(insert,update,delete)일 경우 
            		// => stmt.executeUpdate("dml문") : int
			// 내가 실행할 sql문이 select문일 경우 
            		// => stmt.executeQuery("select문") : ResultSet
			
			// 6) 트랜잭션 처리 
			if(result > 0) { // 성공했을 경우 commit
				conn.commit();
			}else { // 실패했을 경우 rollback
				conn.rollback();
			}
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			
			try {
				// 7) 다 쓴 JDBC용 객체 자원반납 (생성된 역순으로)
				stmt.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			
		}
		
		if(result > 0) {
			System.out.println("성공적으로 삽입되었습니다.");
		}else {
			System.out.println("삽입이 실패되었습니다.");
		}
		
		
		
		// 2. 내 pc db상에 JDBC계정에 TEST테이블에 모든 데이터 조회해보기
		//    select문 => 결과 ResultSet(조회된 데이터들 담겨있음)받기 
   		//      		=> ResultSet으로부터 데이터 뽑기
		
		// 필요한 변수들 셋팅
		Connection conn = null;
		Statement stmt = null;
		ResultSet rset = null; 
        	// select문 실행된 조회된 결과값들이 처음에 실질적으로 담길 객체
		
		// 실행할 sql문 
		String sql = "SELECT * FROM TEST WHERE TNAME LIKE '신%'";
		
		try {
			// 1) jdbc driver 등록
			Class.forName("oracle.jdbc.driver.OracleDriver");
			// 2) Connection 객체 생성 
			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "JDBC", "JDBC");
			// 3) Statement 객체 생성
			stmt = conn.createStatement();
			// 4, 5) sql문 전달해서 실행 후 결과 받기 (ResultSet객체)
			rset = stmt.executeQuery(sql);
			
			// 6)
			while(rset.next()) { // 행 커서 움직여주는 역할, 뿐만 아니라 해당 행이 있으면 true 없으면 false
				
				// 현재 참조하는 rset으로부터 어떤 컬럼에 해당하는 값을 어떤 타입으로 뽑을건지 제시해야
				// db의 컬럼명 제시! (대소문자 가리지 않음)
				int tno = rset.getInt("TNO");
				String tname = rset.getString("tname");
				Date tdate = rset.getDate("TDATE");
				
				System.out.println(tno + ", " + tname + ", " + tdate);
				
			}
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				// 7) 다 쓴 JDBC용 객체 반납
				rset.close();
				stmt.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

 

 

OracleDriver 클래스를 찾지 못했습니다.

java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

해결 방법: jdbc 드라이버 등록

 

프로젝트 우클릭 후 Properties 클릭

Java Build Path 클릭 후 Add External JARs... 클릭 후 ojdbc.jar 추가

 

반응형

'Web' 카테고리의 다른 글

EL  (0) 2022.01.04
content directory WebContent과 webapp 차이  (0) 2022.01.04