1. JDBC란?
- JDBC는 데이터베이스를 다루기 위한 자바 API이다. 자바를 기반으로 하는 프로그램을 작성할 때 프로그래머에게 데이터베이스를 쉽게 다룰 수 있도록 해 주는 것이다.
- 앞서 말했듯이 DBMS의 종류는 많다. DBMS를 만든 회사들은 내부적으로 작동되는 방식이 서로 상이하다. 이렇게 많은 DBMS에 연동하기 위해서 프로그래머는 각각의 DBMS내부 작동방식을 이해해서 그 방식에 맞게 질의문을 던져야 원하는 데이터를 받아올 수 있다. 이런 방법은 DBMS가 달라질 경우 새롭게 프로그램을 작성해야 한다. 또한 특정 DBMS의 내부적인 작동방식을 이해해서 그 내부 구조에 맞게 프로그램을 작성하려면 너무도 많은 노력과 시간이 걸린다.
- 이를 해결하기 위한 기술이 바로 자바에서의 JDBC이다. JDBC를 통해서 어떠한 DBMS일지라도 질의문을 던져서 데이터를 가져올 수 있다.
- 내부적으로 이 JDBC는 자바 파일들로 작성되어져 있는데, JDBC 인터페이스와 JDBC 드라이버로 구성되어 있다. JDBC 인터페이스는 프로그래머에게 쉬운 데이터베이스와 연동되는 프로그램을 작성할 수 있게 하는 도구가 될 것이고, JDBC 드라이버는 JDBC 인터페이스를 구현하여 실제로 DBMS를 작동시켜서 질의를 던지고 결과를 받는다. JDBC를 통해서 DBMS에 질의르 던져 그 질의에 맞는 결과를 얻어내기 위해서 우선 JDBC 드라이버를 컴퓨터에 설치해야 한다.
2. JDBC 사용 시 설정 방법
우선 MySQL 사이트로 가서 Connector/J를 다운로드 받자!
MySQL :: MySQL Community Downloads
OS를 Platform Independent로 지정하면 압축된 라이브러리를 다운로드 받을 수 있다.
압축을 풀고, mysql-connector-java-8.0.28.jar 파일만 가져온다.
파일명은 버전에 따라 차이가 있을 수 있다.
자바 프로젝트에서 src > main > webapp > WEB-INF > lib 위치에 해당 파일을 복사해서 넣으면 된다.
Import를 하는 방식으로 추가해도 된다.
드라이브를 로드하는 부분이 가끔 문제가 되곤 하는데,
다음과 같이 설정하면 문제없이 작동이 된다.
Class.forName("com.mysql.cj.jdbc.Driver");
JDBC version 4 부터는 따로 로드방식을 지정하지 않아도 된다고 한다.
Loading JDBC Drivers | Baeldung
혹시나 위와 같은 방법으로 작성했다가 문제가 발생하게 된다면 드라이버만 따로 설정하는 방법으로 해보기 바란다.
아래 링크를 통해 드라이버를 다운로드 받고, Connector/J와 같은 위치에 추가해주시면 된다.
클래스 로드 경로도 아래와 같이 수정해 보기 바란다.
Class.forName("oracle.jdbc.driver.OracleDriver");
3. 데이터베이스 조작을 위한 자바 라이브러리
JDBC를 사용함에 있어서 전체적인 흐름은 데이터베이스에 연결하기, 질의 던지기, 그리고 질의에 대한 결과를 받아오는 과정, 마지막으로 연결해제의 단계를 가지고 있다. 이런 과정에서 핵심적으로 쓰이는 API들은 다음과 같다.
- Driver : 모든 드라이버 클래스들이 구현해야 하는 인터페이스
- DriverManager : 드라이버를 로드하고 데이터베이스에 연결
- Connection : 특정 데이터베이스와의 연결
- Statement : SQL문을 실행해 작성된 결과를 반환
- PreparedStatement : 사전에 컴파일 된 SQL문을 실행
- ResultSet : SQL문에 대한 결과를 얻어냄
4. JSP와 데이터베이스 연동
JDBC를 통한 데이터베이스의 연동은 기본적으로 다음의 단계를 따르게 된다.
위의 단계를 통해서 JDBC를 통한 데이터베이스 연동을 프로그래밍할 수 있다.
'JSP&Servlet' 카테고리의 다른 글
세션(Session)과 쿠키(Cookie)_추가 내용 (0) | 2022.03.22 |
---|---|
세션(Session)과 쿠키(Cookie) (0) | 2022.03.21 |
자바빈즈(JavaBeans) (0) | 2022.03.14 |
서블릿 기초 문법 (0) | 2022.03.11 |
JSP의 내장 객체 (0) | 2022.03.10 |