Java 기반 클라우드 융합 개발자 과정 - KH 정보교육원/5월

22.05.18 - jdbc ( Connection, Statement, ResultSet )

giggs 2022. 5. 19. 15:31

 

JDBC로 JAVA와 DB 연결하기

 

  • JDBC 파일 다운로드와 환경설정은  ==  플러스알파 챕터 확인
  • java – db 연결을 하기 위해 jdbc를 배운다
  • jdbc를 이용해서 java에서 쿼리를 만들어서 DB로 날려줄 수 있다.

 

 

 

 

JDBC를 이용해 JAVA에서 DB로 쿼리 날려보기

  1.  java에서 종이 statement를 만들어서 sql 입력
  2. 이것을 DB로 날려줘서 실행해줘 한다.
  3. DB에서 실행하고 나면 result set이 나온다. 
  4. 이것을 java에게 다시 돌려준다.

 

 

 

 

 

 

 

  • insert 해서 1개행 추가되면 DB에서 1개행 추가했어 결과 나온다
  • 1이란 값을 java에게 전달해주는 이런 것도 가능

 

 

 


 

 

 

 

JAVA와 DB를 연결하기 위해선 Connection 을 얻어야 한다!

 

  • Connection을 얻는 과정을 배워보자

 

 

 

 

 


 

 

 

0. 드라이버 준비 // ojdbc.jar 파일

 

 

 

  • 사용할 프로젝트에서 우클릭 - Properties에서 환경설정을 해주면 준비 끝! 

 

 


 

 

 

1. 연결 정보 준비 // (id, pwd, ip, port, sid)

 

 

 

 

 

 

 

 


 

 

 

 

2. 드라이버 등록 // Class.forName(~~~)

 

 

Class.forName("oracle.jdbc.driver.OracleDriver");

  • 이 작업의 의미 – 어떤 클래스 파일을 등록하겠다. -
  • 누가 만들어 놓은 OracleDriver파일을 사용하겠다는 의미
  • ex) java.util.Scanner 해서 Scanner 사용하는 것처럼 
  • oracel 패키지 하위에 jdbc하위에 driver 하위에 OracleDriver 클래스 사용하겠다!

 

 

  • Scanner는 JRE System Library에 있는 ~~.jar안에 존재했던 애다. -java에 기본으로 존재하는 아이다.
  • OracleDriver 클래스는 어디에 있나?
  • -내가 방금 다운로드한 jar 파일 안에 들어있다.
  • 이클립스에게 이런 jar 파일 있으니까 참조해서 작업해라 알려준 것이다.

 

 

 

 

 

 

 

  • jar 파일 하위에는 OracleDriver 외에도 수많은 클래스 존재하는데 OracleDriver를 사용하겠다고 등록해주면
  • 이 Driver를 사용하는데 필요한 모든 클래스들도 사용할 수 있게 된다.

 

 

 

 

### jar

  • -java 코드를 압축하면 jar파일이 된다.
  • -여러 개의 클래스들을 압축한 것

 

### library

  • jar파일을 모아놓은 것
  • jar 하나하나가 책 같은 느낌

 

 

 


 

 

 

 

3. Connection 얻기 // DriverManager.getConnection()

 

  • -ex) 컴퓨터 본체랑 내 키보드 연결되어있죠.
  • 이게 왜 가능하냐면? 내 컴퓨터 안에 ~~~driver가 설치되어있을 것이다.
  • 이런 것처럼 서로 연결시켜주는 것이 driver

 

 


 

OracleDriver

  • -java 프로세스랑 – DB를 연결시켜주는 driver
  • 현재 참조할 수 있는 상태지만 – 아직 프로세스로 올라온 상태는 아니다.
  • 등록을 직접 해줘야 사용할 수 있다.
  • ClassLoader라는 애들이 클래스 파일을 자바 프로그램으로 가져오는 애들인데 driver 등록해주어서 걔네들한테 일하라고 명령해주는 것.

 

 


 

 

 

  • 접속 dirver 사용 – getConnection() - Connection 타입의 값 return 해준다.

 

 

 

 

 

 

 

메서드 오버로딩 3가지 중에 - 인자 값 3개 받는 애로 사용

  • url == java에서 DB로 접속할 때 필요한 정보
  • user == id
  • pwd == pwd

 

 


 

 

 

 

 

 

 

### url

  • == @ 뒤에다가 내 컴퓨터 정보(ip:port:sid)들 써주는 거고
  • @앞에다가 저렇게 써주어야 java랑 oracle 연결되는구나 이해하기...

 

 

 

### DriverManager

  • 이용해서 커넥션 얻어오기 가능하다.
  • java에서 DriverManager가 url/id/pwd를 가지고 DB에 가 가지고 연결을 해온다.
  • 연결을 하면 Connection이라는 객체가 생긴다.
  • 이 얻은 커넥션을 활용해서 DB에 접속 가능!
  • sql 날리는 작업하는 것이다.

 

 

 


 

 

 

코드로 실습해보기!

 

 

연결 정보 준비하고

 

 

 

 


 

 

드라이버 등록 및 커넥션 얻기

+ Statement 생성해서 쿼리 입력 - 날려주기

+ 받은 ResultSet 중에서 조건에 맞는 칼럼 값 가져오기

 

 

 

 

 


 

 

### check

Connection ---- DriverManager.getConnection( 연결정보 );

Statement ----  커넥션 . createStatement()

ResultSet -----  스테이트먼트 . executeQuery()

 

 

 

끝 ~!

이면 좋겠지만..

 

 

 


 

 

 

 

코드 부분별로 알아보기

  • 연결 정보 준비하고 // 드라이버 등록 및 커넥션 얻기 // 17~38번 line 은 위의 내용으로 대체 

 

 

 

 

새로운 부분  Check

 

 

 

1 - Statemenet를 만들고 실행해서 ResultSet을 받아오는 부분 

 

 

 

 

 

 

 

 

 

Statement 변수 - 얻은커넥션.createStatement();

  • 비유적으로 설명 : Statement를 워크시트라고 생각해라
  • createStatement 하면 어떤 statement가 생길 것이고 그것을 Statement 타입 변수에 담아준다.
  • 이 statement에 내가 원하는 쿼리문 1개 넣어준다. - 비유적으로 워크시트라 했는데 statement는 1개의 쿼리만 가능

 

 

 

 

ResultSet 변수 = 스테이트먼트 . executeQuery();

  • executeQuery() - 만든 Statement를 실행해라 - 입력된 쿼리를 실행해줘라
  • 쿼리를 실행하면 resultSet이 나온다. 이것을 ResultSet 타입 변수에 담아준다.

 

 

 

 

 

 


 

 

 

 

 

 

2 - 받아 온 ResultSet 을 읽는 부분

 

 

  • 쿼리 실행 결과로 DB로부터 받은 ResultSet을 rs변수에 저장해놓았는데
  • ResultSet 읽어보기

 

 

 

 

 

 

 

 

  • 무엇인가 들어있기는 한데 ( null로 안 나옴 ) 객체에 대한 정보만 출력되고, 내용은 확인 불가능

 

 

 

 

방법은?

 

 

 

 

 

 

 

1. 읽을 라인으로 커서를 이동시켜주고 데이터가 있는지 확인 - next() 메서드 활용 - 40번 라인

  • rs.next() 는 커서 이동시켰을 때 데이터 있는지 없는지 확인
  • resultSet은 커서를 포함하고 잇는데. 
  • 아무것도 안 가리키고 있던 커서를 다음칸으로 이동시켜주는 것이 next() 메서드
  • next() 메서드 호출할 때마다 커서가 한 칸씩 아래로 내려간다.
  • 내려가는 것은 ok 내려가면서 어떤 일이?
  • 커서가 내려가서 다음행을 갔는데 데이터가 있더라 하면 true 값 반환 
  • 커서가 내려가서 다음행을 갔는데 데이터가 없다 하면 false 값 반환

 

 

 

 

2. 데이터가 있다면 읽으려는 데이터의 타입에 맞춰서 읽어온다. -- 43~44번 라인

  • [ get데이터 타입 () ] 메서드로  칼럼을 이용해서 읽으면 된다! -

 

 

 

 

 

 

 


 

 

 

 

 

코드 다듬기와 예외처리

 

 

 

 

 

1.

next() 메서드의 반환 값이 boolean 이므로  rs.next() 메서드 자체를 while문 조건문으로 넣어주자.

 

 

2.

OracleDriver등록과 Connection 얻는 부분에서 예외상황이 발생하는데 

OracleDriver 등록 부분에서 예외 발생이 되어서 등록이 안되면 Connection 작업도 이루어지지 않는다

즉, 2개의 작업은 한 몸! try 하나로 묶어 주자. 

+ 드라이버 등록 / 커넥션 얻기 이후에 이루어지는 쿼리 날리고 resultSet 얻어오는 부분도 당연히 

앞부분이 잘 되지 않으면 이루어지지 않을 작업 이므로 try문으로 싹 묶어주기

 

 

3.

무슨 일이 있더라도 사용한 자원은 반납 필요 finally { .close }

하나의 try문으로 묶어주지 않은 이유?

-> conn.close 하다가 예외 발생하면 나머지 애들 일 안 하고 넘어간다.

하나의 자원 반납 시 문제 생겨도 다른 자원은 반납 이루어지도록 각각 try/catch문 작성

 

 

 

### 지금은 이렇게 하는데 뒤에 배울 내용으로 깔끔하게 정리 가능~~

템플릿? 아무튼..

 

 

 

 


 

 

 




REVIEW


드디어 JAVA와 DB를 연결하는 JDBC에 대해서 교육 시작했다!
이클립스에서 처음 system.out.println("hellow world"); 를 했던
기억이 떠오르는.. 

드라이버, 스테이트먼트, 커넥션의 개념과
Class.for.name(), url,
getConnection, executeQuery 같은 코드들
새로운 개념과 코드들이 너무 많았다.

앞으로 웹 개발자로 일하게 되면
자주 다루게 되는 java와 db를 연결하는 jdbc
Dao 부분인 만큼 개념과 흐름을 정확하게
파악해야겠다.

오늘 배운 내용을 가지고 이제 
DB에 회원정보 table을 만들어놓고
이클립스에서 쿼리를 날려서 데이터를 가져온 다음에
가져온 데이터의 id / pwd가 입력받은 것과
일치하면 로그인 성공을 불일치하면 로그인 실패를
출력해주는 것도 가능하겠다! 해보자! ㅎㅎ 
복습도 필수! 복습 복습! 고고