JDBC (Java Database Connectivity)

Lee Yong Seok·2022년 5월 31일
0
post-thumbnail

🌝 자바 데이터베이스 프로그래밍 (JDBC)

JDBC 란?

  • Java Database Connectivity
  • 자바 프로그램에서 다른 기종 간의 데이터베이스를 표준화된 방법으로 접속할 수 있도록 만든 API(Application Programming Interface) 이다.

JDBC Driver

  • 데이터베이스에 대한 연결(Connnection)을 제공하고 클라이언트와 데이터베이스 간에 쿼리 및 결과를 전송하는 기능을 제공한다.
  • 클라이언트에 JDBC 드라이버를 설치한다.

🌑 MySQL JDBC Driver 다운로드

  • Go to Download Page > 를 클릭한다.

  • Windows (x86, 32-bit), MSI Installer 의 Download 를 클릭하여 다운로드 받는다.

  • mysql-connector-java-8.0.26.zip 파일을 다운로드 한 후 압축을 풀면 폴더 안에 mysql-connector-java-8.0.26.jar 라는 파일이 MySQL JDBC Driver 이다.

  • mysql-connector-java-8.0.26.jar 파일로 자바와 DB를 연결할 수 있다.

🌒 JAVA 버전 확인

🌓 PATH 확인

🌔 JDBC 만을 위한 폴더 생성 후 Workspace 잡기

🌕 Eclipse Compiler 11 버전으로 맞추기

🌖 jre 변경

  • File -> New -> Other... 를 클릭한다.

  • Java Project 를 생성한다.

  • Configure JREs... 를 클릭한다.

  • 현재 잡혀있는 jre 17 버전을 Remove 를 클릭한다.

  • jre 버전을 11 버전으로 다시 잡아주기위해 Add... 를 클릭한다.

  • Default로 잡혀있는 Standard VM 에서 Next > 를 클릭한다.

  • Directory... 를 클릭하여 jdk 11 버전의 path를 잡아준다.

  • Finish 를 클릭한다.

  • jre 환경을 jdk 11 버전으로 변경된 것을 확인하고 Apply and Close 한다.

  • 계속 Next를 클릭하고 마지막에 우리는 Open Perspective 를 사용할 것이기때문에 클릭해준다.

🌗 Eclipse - MySQL JDBC Driver 설정

1단계 jar 파일 추가하기

  • 생성한 프로젝트에 마우스 우클릭한다음 Build Path -> Configure Build Path... 를 클릭한다.

  • Libraries 탭에서 Classpath 를 선택한 후 Add External JARs... 를 클릭한다.

  • 해당 위치의 Jar 파일을 Add 한다.

  • 추가된 jar 파일을 확인하고 Apply and Close 를 클릭한다.

2단계 명령프롬프트창에서 net start 명령어로 MySQL 서비스가 실행되고 있는지 확인한다.

🌘 JDBC 단계별 사용방법

1단계 MySQL Driver Loading

  • 드라이버 로딩이 잘 되었는지 확인하는데 아래와 같은 에러가 생긴다면 Compiler 가 11버전인지 다시 확인하고, 아니라면 11버전으로 다시 변경해준다.

2단계 Database Connection

  • 드라이버 로드가 완료됐다면 연결 객체를 얻는다.(DriverManager 클래스에 있는 getConnection(String url, String user, String password) 을 사용한다.)

  • Surround with try/catch 를 클릭하여 예외 처리한다.

  • 1단계 & 2단계까지 잘 실행되는지 확인한다.

3단계 Statement 객체 만들기

  • Ctrl + Shift + O 단축키를 이용하여 우리가 사용할 java.sql.Statement Interface를 import 한다.

  • 연결이 완료 됐다면 실행도구(conn.createStatement)를 생성한다.

  • 실행도구도 Surround with try/catch 를 클릭하여 예외 처리를 해준다.

4단계 SQL 질의문 사용하기

  • Database에 질의할 SELECT 문을 입력한다.

  • 쿼리를 실행 한 뒤 결과를 rs 변수에 얻는다.(ResultSet은 Statement의 executeQuery() 메서드가 반환하는 결과로 얻은 데이터를 의미한다.)

executeQuery와 executeUpdate 의 차이?

  1. executeQuery 는 Database에 질의문을 전달할 때 사용하는 DML문의 SELECT 명령어를 사용할 때만 사용한다.
  2. 그 외 나머지 INSERT, DELETE, UPDATE는 모두 executeUpdate() 를 사용한다.

자바의 Index와 SQL의 INDEX 차이?

  1. 자바에서 배열을 예로들면, index의 시작은 언제나 0이다.
  2. 하지만, 자바의 JDBC는 Database의 INDEX는 0번이 아닌 1번부터 시작하기때문에 자바에서 유일하게 인덱스가 1번부터 시작한다.

5단계 결과값 처리하기

  • Database의 Column의 데이터타입에 따라 결과값을 가져올 때, 자바에서 사용하는 데이터타입과 다르므로 자바에서 사용하는 데이터타입으로 변환하여 받아줘야한다.(즉, DB와 자바의 데이터타입을 동일하게 맞춰줘야한다.)

rs.next() 란?

  • Database의 데이터는 하나의 레코드씩 정보가 저장되어있는데, rs.next()를 실행하기전까지는 Database를 가리키는 Cursor가 맨 위에 위치하다가 rs.next()를 만나면서 한칸 아래로 이동한다.
  • 우리는 SQL 질의문을 작성할 때, 딱 한 레코드의 정보만 가져오면 되는걸 알기때문에 rs.next()를 한 번만 사용한 것이다. but, 다른 질의문을 통해 Database에서 데이터를 가져올 때, 레코드의 수가 몇개인지 모를 때는 반복문을 사용해야하는데 횟수를 알 지 못하기때문에 for문보다는 while문을 사용해야한다.(ResultSet의 return 값이 boolean type이기때문에 더 이상 레코드가 존재하지않는다면 false를 반환하기때문에 반복문을 빠져나오게되는 구조이다.)

6단계 Database Close

  • Database의 결과값을 정상적으로 가져왔다면 사용했던 자원을 반납해야한다.
  • 자원을 닫을 때는 사용했던 순서의 반대로 닫아준다.
  • 자원을 반납할 때도 Surround with try/catch 를 클릭하여 예외 처리를 해야한다.

  • 사용했던 순서의 반대로(rs(ResultSet) -> stmt(Statement) -> conn(Connection)) 자원을 반납한다.

SELECT문은 앞서했던 6단계의 모든 과정을 밟아야하지만, 그 외(INSERT, DELETE, UPDATE) DML문은 5단계에서 executeQuery() 대신 executeUpdate를 사용한다.(즉, 데이터를 다시 받아오지않아도 되기때문에 ResultSet은 사용하지 않는다.)

🔍 Reference

JDBC

https://github.com/kimsinok/JAVA/blob/main/%EC%9E%90%EB%B0%94%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D.pdf

profile
Today I Learned 🌙

0개의 댓글