JDBC

JDBC 시작 (Java Database Connectivity)

Dodledd 2024. 3. 1. 21:05

JDBC란?

간단하게는 JAVA와 DB를 연결해야 할 때 둘 사이의 연결고리가 되어주는 역할이다.즉 자바에 있는 데이터를 데이터베이스로 저장, 업데이트 하거나 반대로 DB에서 JAVA로 데이터를 꺼내 올 때 필요한 API이다.이것을 연동하는 자바의  API이름이 JDBC라고 한다. = JDBC API

우리는 연동함으로 인해 자바에서 쿼리를 날려 DB를 조작할 수 있게된다.

 

설정법

먼저 JDBC를 사용하기위해서는 자바 프로젝트에 jdbc드라이버를 추가해 줘야한다.

Eclipse에 가서 적용할 프로젝트에 우클릭 또는 ALT+ENTER을 해서 Properties에 들어가준다.

빨간 테두리

 

그리고 테두리에 있는 것을 왼쪽부터 클릭하여 Add External JARs.. 를 누르면

 

이렇게 파일들이 있다.

여기서 파일을 가져오는 방법은 다양하다. 자기가 원하는 곳에 다운받아놓고 경로를 찾아가 적용하는 방법 또는

ojdbc6.jar
2.61MB

이것을 받아도 되고 오라클 홈페이지에가서 받아도 된다.

 

오라클을 설치한 경우  C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib\ojdbc6 경로로 가서 파일을 찾아도 된다.

 

그 다음 eclipse에 가서 상단 쪽 window를 누르고 Preferences를 누르고

1. General – Workspace – Text file encoding – other에서 UTF-8 선택

2. General – Editors – Text Editors – Spelling UTF-8 변경
까지 해주면 설정이 완료된다. (이미 되어 있는 사람도 있고 아닌 사람도 있겠지만 해주지 않으면 글자가 깨질 수 있다.)

 

그럼 이제 시작해보자.

 

JDBC용 객체 종류

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) 결과받기 > SLSECT문 실행 (6-1) => ResultSet객체(조회된 결과를 담아준다) =>객체가 반환됨,
                                                               DML(INSERT, UPDATE, DELETE)문 실행(6-2) => int 형 반환됨
       
6-1) ResultSet객체에 담겨있는 데이터들을 하나씩 추출해서 차근차근 옮겨담기[+ArrayList에 담기] 
6-2) 트랜잭션 처리(성공했다면 commit, 실패했다면 rollback 실행) 
7) 다 사용한 JDBC용 객체를 반드시 자원 반납(close) => 생성된 역순으로

 

 

먼저 내 데이터 베이스와 연결 되었는지 DB의 테이블에 insert 시켜보자.

	public static void main(String[] args) {
		
		// 1.각자의 pc(localhost)에 jdbc계정 연결 후 test테이블에 insert 해보자
		// insert => 처리된 행 수(int) => 트랜잭션 처리
		//필요한 변수 세팅하기
		int result = 0; //결과(처리된 행 수)를 받아줄 변수
		Connection conn = null; // DB의 연결정보를 보관할 객체
		Statement stmt = null; // sql문을 전달해서 실행 후 결과를 받는 객체
		
		Scanner sc = new Scanner(System.in);
		System.out.print("번호 : ");
		int num = sc.nextInt();
		sc.nextLine();
		
		System.out.print("이름 : ");
		String name = sc.next();
		sc.nextLine();
		
		// 실행할 sql문(완전한 상태로 만들어두기)(맨뒤에 세미콜론 없어야된다!!!!!!!!!)
		String sql = "INSERT INTO TEST VALUES(" + num + ", '" + name + "', SYSDATE)";
					 
		
		try {
			//1) JDBC Driver등록
			Class.forName("oracle.jdbc.driver.OracleDriver"); // ojdbc6.jar 파일을 추가하지 않았을까 확인 | 오타 => 에러
			System.out.println("OracleDriver 등록성공");
			
			//2) Connection생성(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(sql문) : int
			// 내가 실행할 sql문이 select문 -> stmt.executeQuery(select문) : ResultSet
			
			//6) 트랜잭션 처리
			if (result > 0) { // 요청 sql문 성공
				conn.commit();
			} else { // 요청 sql문 실패
				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) { // 요청 sql문 성공
			System.out.println("데이터 삽입 성공");
		} else { // 요청 sql문 실패
			System.out.println("데이터 삽입 실패");
		}
     }
 }

코드는 정형화 되있는 느낌이 있어서 그냥 사용법을 이해하고 외우는 느낌으로 진행하였다.

우리가 이해해야 할 것은 데이터가 어떻게 흘러가는지를 이해해야하고 사용법을 숙지하는 것이다.

sql 테이블 생성 쿼리 작성

 

DB에 잘 들어간 모습

sql에서 쿼리를 작성해주고 위 자바 코드를 실행시켜주면 잘 들어간 모습을 볼 수 있다 !

insert를 해줬으니 우리가 해야할 건 가져오는 것이다. ( select )

public class RunTest {
		public static void main(String[] args) {
		// 2. 내 pc db상에 jdbc계정에 TEST테이블에 모든 데이터 조회해보기
		// select문 => 결과 ResultSet(조회된 데이터가 담겨있다) => ResultSet으로부터 데이터 추출
		
		//필요한 변수들 세팅
		Connection conn = null;
		Statement stmt = null;
		ResultSet rset = null;
		
		//실행할 sql문 작성
		String sql = "SELECT * FROM TEST";
		
		
		try {
			//1) JDBC Driver등록
			Class.forName("oracle.jdbc.driver.OracleDriver"); // ojdbc6.jar 파일을 추가하지 않았을까 확인 | 오타 => 에러
			System.out.println("OracleDriver 등록성공");
			
			//2) Connection생성(url, 계정명, 비밀번호)
			conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "JDBC", "JDBC");
			
			//3) Statement생성
			stmt = conn.createStatement();
			
			// 4, 5) SQL문 전달해서 실행 후 결과 받기 (ResultSet)
			rset = stmt.executeQuery(sql);
			
			// rset.next() => rest의 다음행이 들어있는지 없는지 확인 후 결과반환 + 한행을 내려줍니다
			
			while(rset.next()) {
				//현재 참조하는 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 {
				rset.close();
				stmt.close();
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

위 코드를 실행하면

 

이렇게 콘솔창에 INSERT 해주었던 값이 나오는 것을 볼 수 있다 !

 


MVC

M(Model) : 데이터 처리담당(데이터를 담기위한 클래스(VO), 데이터들이 보관된 공간(db)과 직접적으로 접근해서 데이터 주고받기(dao))
V(View) : 화면을 담당(사용자가 보게되는 시각적인 요소, 출력및 입력)
C(Controller) : 사용자의 요청을 처리해주는 역할

 

이렇게 3개로 분할 하여 진행한다.

View <-> Controller <-> Model 로 왔다 갔다 하는 느낌이다.

 

 

 

이제 지금까지 배웠던 것들을 응용하여 MVC 까지 (프론트는 VIEW 클래스로 대체) 하여 혼자 미니프로젝트를 하려고 한다.