🌝 자바 데이터베이스 프로그래밍 (JDBC)
JDBC 란?
- Java Database Connectivity
- 자바 프로그램에서 다른 기종 간의 데이터베이스를 표준화된 방법으로 접속할 수 있도록 만든 API(Application Programming Interface) 이다.
JDBC Driver
- 데이터베이스에 대한 연결(Connnection)을 제공하고 클라이언트와 데이터베이스 간에 쿼리 및 결과를 전송하는 기능을 제공한다.
- 클라이언트에 JDBC 드라이버를 설치한다.
🌑 MySQL JDBC Driver 다운로드
- Go to Download Page > 를 클릭한다.
![](https://velog.velcdn.com/images/yongseok0419/post/058b146e-d45a-4832-bc59-2637a9fab4fe/image.png)
- Windows (x86, 32-bit), MSI Installer 의 Download 를 클릭하여 다운로드 받는다.
![](https://velog.velcdn.com/images/yongseok0419/post/1c7afaaf-6297-4937-b0ee-c3bfeff23f2b/image.png)
- mysql-connector-java-8.0.26.zip 파일을 다운로드 한 후 압축을 풀면 폴더 안에 mysql-connector-java-8.0.26.jar 라는 파일이 MySQL JDBC Driver 이다.
![](https://velog.velcdn.com/images/yongseok0419/post/42a785d4-4113-47cc-b14c-1ee2ea20d9ea/image.png)
- mysql-connector-java-8.0.26.jar 파일로 자바와 DB를 연결할 수 있다.
🌒 JAVA 버전 확인
![](https://velog.velcdn.com/images/yongseok0419/post/2e9f2294-3862-4874-ab8b-51b17071ef68/image.png)
🌓 PATH 확인
![](https://velog.velcdn.com/images/yongseok0419/post/38050b54-0bc9-48f9-bdf6-56102b96cef2/image.png)
🌔 JDBC 만을 위한 폴더 생성 후 Workspace 잡기
![](https://velog.velcdn.com/images/yongseok0419/post/9ba87b42-2464-4c2d-92bd-ae12fd06570f/image.png)
![](https://velog.velcdn.com/images/yongseok0419/post/3c1e7886-4c80-4333-8d90-f259215ba8ea/image.png)
🌕 Eclipse Compiler 11 버전으로 맞추기
![](https://velog.velcdn.com/images/yongseok0419/post/9859508d-563f-4ccc-bee1-01c9d0460506/image.png)
![](https://velog.velcdn.com/images/yongseok0419/post/73e43b06-9045-4794-8d25-be058e5f77ad/image.png)
🌖 jre 변경
- File -> New -> Other... 를 클릭한다.
![](https://velog.velcdn.com/images/yongseok0419/post/b99d1739-91ad-4f4f-a40d-0c30565bc4db/image.png)
![](https://velog.velcdn.com/images/yongseok0419/post/871de1e1-9364-4217-b5db-ea751ad2d417/image.png)
- Configure JREs... 를 클릭한다.
![](https://velog.velcdn.com/images/yongseok0419/post/f7c40683-45ad-468a-b711-6ee07af1fc5a/image.png)
- 현재 잡혀있는 jre 17 버전을 Remove 를 클릭한다.
![](https://velog.velcdn.com/images/yongseok0419/post/9cf444a4-0b74-4790-aa5e-b53e4f445746/image.png)
- jre 버전을 11 버전으로 다시 잡아주기위해 Add... 를 클릭한다.
![](https://velog.velcdn.com/images/yongseok0419/post/98607fad-6d6a-42a1-9fef-09c370bae1d2/image.png)
- Default로 잡혀있는 Standard VM 에서 Next > 를 클릭한다.
![](https://velog.velcdn.com/images/yongseok0419/post/b022e374-0b60-4cc8-ac63-d95beef1ecca/image.png)
- Directory... 를 클릭하여 jdk 11 버전의 path를 잡아준다.
![](https://velog.velcdn.com/images/yongseok0419/post/fb48b915-7a35-4b00-ad7b-dded8553e0a2/image.png)
![](https://velog.velcdn.com/images/yongseok0419/post/4ed91d26-f288-4e50-b55f-f8ca3ee1e07b/image.png)
![](https://velog.velcdn.com/images/yongseok0419/post/71c87871-dc97-4751-9de7-39d9825e3140/image.png)
- jre 환경을 jdk 11 버전으로 변경된 것을 확인하고 Apply and Close 한다.
![](https://velog.velcdn.com/images/yongseok0419/post/ce1530d5-a4eb-4f2c-a7b6-7ab75af2f9c9/image.png)
- 계속 Next를 클릭하고 마지막에 우리는 Open Perspective 를 사용할 것이기때문에 클릭해준다.
![](https://velog.velcdn.com/images/yongseok0419/post/f073e8e8-13d7-4d1e-afbb-13891fe038c2/image.png)
🌗 Eclipse - MySQL JDBC Driver 설정
1단계 jar 파일 추가하기
- 생성한 프로젝트에 마우스 우클릭한다음 Build Path -> Configure Build Path... 를 클릭한다.
![](https://velog.velcdn.com/images/yongseok0419/post/0213f756-ef00-4225-a205-30fd4fca0cd1/image.png)
- Libraries 탭에서 Classpath 를 선택한 후 Add External JARs... 를 클릭한다.
![](https://velog.velcdn.com/images/yongseok0419/post/52d7f75f-a1e3-4c73-bd83-5d85d73f502e/image.png)
![](https://velog.velcdn.com/images/yongseok0419/post/22e4aadb-27ab-471d-ac48-d106ae7e3dad/image.png)
- 추가된 jar 파일을 확인하고 Apply and Close 를 클릭한다.
![](https://velog.velcdn.com/images/yongseok0419/post/75d67d12-e424-4868-b15c-8529e44e3349/image.png)
2단계 명령프롬프트창에서 net start 명령어로 MySQL 서비스가 실행되고 있는지 확인한다.
![](https://velog.velcdn.com/images/yongseok0419/post/cb727173-c1cb-4261-9a76-f78e6c8c8956/image.png)
🌘 JDBC 단계별 사용방법
1단계 MySQL Driver Loading
![](https://velog.velcdn.com/images/yongseok0419/post/dd7b2c28-a865-475f-abc5-2586737e3efc/image.png)
- 드라이버 로딩이 잘 되었는지 확인하는데 아래와 같은 에러가 생긴다면 Compiler 가 11버전인지 다시 확인하고, 아니라면 11버전으로 다시 변경해준다.
![](https://velog.velcdn.com/images/yongseok0419/post/a0b6d636-342a-4d0e-8914-f3a6b1488e94/image.png)
![](https://velog.velcdn.com/images/yongseok0419/post/4ad51657-621a-476e-944a-48e023d63b69/image.png)
2단계 Database Connection
- 드라이버 로드가 완료됐다면 연결 객체를 얻는다.(DriverManager 클래스에 있는 getConnection(String url, String user, String password) 을 사용한다.)
![](https://velog.velcdn.com/images/yongseok0419/post/f02835f7-9850-4703-99a5-939aaa2e26b0/image.png)
- Surround with try/catch 를 클릭하여 예외 처리한다.
![](https://velog.velcdn.com/images/yongseok0419/post/48c99c05-f403-4df3-b0b1-be52a5c248a2/image.png)
![](https://velog.velcdn.com/images/yongseok0419/post/bea45526-e8fe-4cb6-bd56-cbe647ad8d54/image.png)
- 1단계 & 2단계까지 잘 실행되는지 확인한다.
![](https://velog.velcdn.com/images/yongseok0419/post/e94210c1-214b-4600-843f-0ac713a64a7e/image.png)
3단계 Statement 객체 만들기
- Ctrl + Shift + O 단축키를 이용하여 우리가 사용할 java.sql.Statement Interface를 import 한다.
![](https://velog.velcdn.com/images/yongseok0419/post/67895c42-a830-4637-ab75-03da10083a09/image.png)
![](https://velog.velcdn.com/images/yongseok0419/post/df0ca72e-76e8-4292-ae34-d0f86d0de7b2/image.png)
- 연결이 완료 됐다면 실행도구(conn.createStatement)를 생성한다.
![](https://velog.velcdn.com/images/yongseok0419/post/3d26e859-fe31-4f1d-a7dc-0e5ce41f99b4/image.png)
- 실행도구도 Surround with try/catch 를 클릭하여 예외 처리를 해준다.
![](https://velog.velcdn.com/images/yongseok0419/post/118a2788-f538-4100-a0ec-ca15985a6186/image.png)
4단계 SQL 질의문 사용하기
- Database에 질의할 SELECT 문을 입력한다.
![](https://velog.velcdn.com/images/yongseok0419/post/98b97fb4-4ac2-47f1-84c0-ef804f06d4b9/image.png)
- 쿼리를 실행 한 뒤 결과를 rs 변수에 얻는다.(ResultSet은 Statement의 executeQuery() 메서드가 반환하는 결과로 얻은 데이터를 의미한다.)
![](https://velog.velcdn.com/images/yongseok0419/post/09287ca6-750b-4b5e-823a-4948ab0cd453/image.png)
![](https://velog.velcdn.com/images/yongseok0419/post/2531d46f-ce6a-42a7-99e3-1f75475edbd5/image.png)
executeQuery와 executeUpdate 의 차이?
- executeQuery 는 Database에 질의문을 전달할 때 사용하는 DML문의 SELECT 명령어를 사용할 때만 사용한다.
- 그 외 나머지 INSERT, DELETE, UPDATE는 모두 executeUpdate() 를 사용한다.
자바의 Index와 SQL의 INDEX 차이?
- 자바에서 배열을 예로들면, index의 시작은 언제나 0이다.
- 하지만, 자바의 JDBC는 Database의 INDEX는 0번이 아닌 1번부터 시작하기때문에 자바에서 유일하게 인덱스가 1번부터 시작한다.
5단계 결과값 처리하기
- Database의 Column의 데이터타입에 따라 결과값을 가져올 때, 자바에서 사용하는 데이터타입과 다르므로 자바에서 사용하는 데이터타입으로 변환하여 받아줘야한다.(즉, DB와 자바의 데이터타입을 동일하게 맞춰줘야한다.)
![](https://velog.velcdn.com/images/yongseok0419/post/9d1e791f-7836-4fa2-a0af-29972a6f1b35/image.png)
rs.next() 란?
- Database의 데이터는 하나의 레코드씩 정보가 저장되어있는데, rs.next()를 실행하기전까지는 Database를 가리키는 Cursor가 맨 위에 위치하다가 rs.next()를 만나면서 한칸 아래로 이동한다.
- 우리는 SQL 질의문을 작성할 때, 딱 한 레코드의 정보만 가져오면 되는걸 알기때문에 rs.next()를 한 번만 사용한 것이다. but, 다른 질의문을 통해 Database에서 데이터를 가져올 때, 레코드의 수가 몇개인지 모를 때는 반복문을 사용해야하는데 횟수를 알 지 못하기때문에 for문보다는 while문을 사용해야한다.(ResultSet의 return 값이 boolean type이기때문에 더 이상 레코드가 존재하지않는다면 false를 반환하기때문에 반복문을 빠져나오게되는 구조이다.)
![](https://velog.velcdn.com/images/yongseok0419/post/e1439f27-27c5-496e-8ee5-1f7ac71eba39/image.png)
6단계 Database Close
- Database의 결과값을 정상적으로 가져왔다면 사용했던 자원을 반납해야한다.
- 자원을 닫을 때는 사용했던 순서의 반대로 닫아준다.
- 자원을 반납할 때도 Surround with try/catch 를 클릭하여 예외 처리를 해야한다.
![](https://velog.velcdn.com/images/yongseok0419/post/9d16ff13-4b85-428e-9181-e6e8f9037dbb/image.png)
- 사용했던 순서의 반대로(rs(ResultSet) -> stmt(Statement) -> conn(Connection)) 자원을 반납한다.
![](https://velog.velcdn.com/images/yongseok0419/post/06b2ecef-b5d7-4e87-8d87-b45a279a03a4/image.png)
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