2019. 3. 6. 19:13ㆍJAVA Back-End
JDBC (Java Database Connectivity)란?
JDBC는 JAVA에서 DB에 접속할 수 있도록 연결해주는 자바API 입니다. JDBC는 DB에서 자료를 query하거나 업데이트하는 방법을 제공합니다.
(DB 종류에 상관없습니다! 단지 자바에서 DB를 조작할 수 있도록 코딩하기 위해 사용되는 api입니다)
[출처] https://ko.wikipedia.org/wiki/JDBC
- JAVA를 이용해서 DB 접속과 SQL문장을 실행하고 실행 결과로 얻어진 데이터의 핸들링을 제공하는 방법과 절차에 관한 규약입니다.
- JAVA 프로그램 내에서 SQL문을 실행하기 위한 자바 API입니다.
- SQL프로그래밍 언어의 통합 접근 중 한 형태 입니다.
JAVA는 표준 Interface인 JDBC API를 제공합니다.
DB벤더 , 또는 기타 써드파티에서는 JDBC인터페이스를 구현한 드라이버를 제공합니다.
수많은 사용자가 웹 사이트를 이용하는데 매번 Query를 일일히 날려줄 수 없습니다. 그래서 프로그램이 어떤 Event에 대한 테이블 변경을 대신할 수 있게 만들어줘야하는 데 이 떄 JDBC가 통로 역할을 합니다.
( JDBC클래스는 자바 패키지 java.sql 과 javax.sql에 포함되어 있습니다. )
JDBC 환경 구성
1. JDK 설치. (당연히 JDK가 있어야됩니다ㅎㅎ)
2. JDBC 드라이버 설치
- Maven에 의존성을 추가해줍니다.
JDBC를 이용한 프로그래밍
1. import java.sql.*;
2. JDBC드라이버를 load
Class.forName("JDBC 드라이버 이름");
MySQL : com.mysql.jdbc.Driver
MsSQL : com.microsoft.sqlserver.jdbc.SQLServerDriver
등등 각각 데이터베이스 벤더에 맞는 드라이버를 사용하면 됩니다.
3. Connection 객체를 생성 //DB에 접속됐을 때 생성하는 객체. (DB에 접속완료)
Connection 객체를 얻을 때 사용되는 객체가 DriverManager 객체입니다. 따라서 DriverManager의 getConnection() 메소드를 이용하면 어떤 URL에 접근할 꺼냐? id? passward는? 입력해 접속하면됩니다.
예시
4. Statement 객체를 생성 및 query 수행
INSERT , SELECT 등등 쿼리문을 사용하기 위해서 Statement라는 객체를 생성해야합니다.
그리고 Connect을 이용해(위에서 생성한 con) Statement를 얻어낼 수 있습니다.
5. SQL에서 결과물이 있으면 ResultSet객체를 생성
검색에 대한 결과가 있다면 ResultSet으로 결과를 받습니다.
6. 모든 객체를 닫습니다.
사용이 끝나면 DB를 닫아줘야합니다. DB는 접속 수가 무한대가 아닙니다. 감당할 수 없을 만큼의 client의 요청이 들어오면 수행을 안합니다. 그래서 반드시 사용이 끝나면 객체를 닫아 DB와 연결을 종료해야합니다.
JDBC 드라이버 : DMBS와 통신하기 위한 자바클래스로 DMBS별로 각기 다른 JDBC드라이버가 필요합니다. 각각의 DBMS에 알맞는 클라이언트라 생각하시면 좋겠습니다
JDBC클래스의 생성 관계
우리가 비지니스 로직으로 DB테이블 접근을 할 때 ORM을 씁니다. Hibernate / JPA 같은 ORM 기술들이 이 JDBC를 기본으로 사용합니다.
(JPA나 Hibernate는 공부해서 따로 포스팅하겠습니다. ORM은 node.js - MongoDB의 orm인 mongoose를 사용하고, node.js - mysql을 접근하는 squalize를 사용해본 적은 있었네요)
ORM과 SQL Mapper에 대한 개념과 기타 참조는 https://gmlwjd9405.github.io/2018/12/25/difference-jdbc-jpa-mybatis.html 에 좋은 글이 있습니다:)
'JAVA Back-End' 카테고리의 다른 글
[REST API] REST API인가? Web API인가? (0) | 2019.03.09 |
---|---|
[JDBC] MySQL에서 JDBC 사용 (0) | 2019.03.09 |
[Servlet]Maven이란? (0) | 2019.03.05 |
[JSP/Servlet] JSTL (JSP Standard Tag Library) (0) | 2019.03.02 |
[JSP/Servlet] EL(Expression Language) (0) | 2019.03.01 |