[JDBC] JDBC (Java Database Connectivity)

2019. 3. 6. 19:13JAVA 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에 의존성을 추가해줍니다.


<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>


JDBC를 이용한 프로그래밍


1. import java.sql.*;

import java.sql.*;


2. JDBC드라이버를 load

Class.forName( "com.mysql.jdbc.Driver" );

Class.forName("JDBC 드라이버 이름");

MySQL : com.mysql.jdbc.Driver

MsSQL : com.microsoft.sqlserver.jdbc.SQLServerDriver

 등등 각각 데이터베이스 벤더에 맞는 드라이버를 사용하면 됩니다.


3. Connection 객체를 생성  //DB에 접속됐을 때 생성하는 객체. (DB에 접속완료)

String dburl = "jdbc:mysql://localhost/dbName";

Connection con = DriverManager.getConnection ( dburl, ID, PWD );

 Connection 객체를 얻을 때 사용되는 객체가 DriverManager 객체입니다. 따라서 DriverManager의 getConnection() 메소드를 이용하면 어떤 URL에 접근할 꺼냐? id? passward는? 입력해 접속하면됩니다.

예시

// 만약 MySQL이 아닌 Oracle을 이용할 시
public static Connection getConnection() throws Exception{
    String url = "jdbc:oracle:thin:@117.16.46.111:1521:xe";
    String user = "smu";
    String password = "smu";    
    Connection conn = null;
    Class.forName("oracle.jdbc.driver.OracleDriver"); // 오라클 벤더가 제공하는 클래스 이름
    conn = DriverManager.getConnection(url, user, password);
    return conn;
}


4. Statement 객체를 생성 및 query 수행 

INSERT , SELECT 등등 쿼리문을 사용하기 위해서 Statement라는 객체를 생성해야합니다.

그리고 Connect을 이용해(위에서 생성한 con) Statement를 얻어낼 수 있습니다.


Statement stmt = con.createStatement();


5. SQL에서 결과물이 있으면 ResultSet객체를 생성  

검색에 대한 결과가 있다면 ResultSet으로 결과를 받습니다.


ResultSet rs = stmt.executeQuery( "SELECT * FROM products" );
while ( rs.next() )
System.out.println( rs.getInt( "no") );

//실행 쿼리에 따라서 method가 조금씩 달라집니다.
stmt.execute("query"); //any SQL
stmt.executeQuery("query"); // SELECT
stmt.executeUpdate("query"); // INSERT, UPDATE. DELETE


6. 모든 객체를 닫습니다.  

사용이 끝나면 DB를 닫아줘야합니다. DB는 접속 수가 무한대가 아닙니다. 감당할 수 없을 만큼의 client의 요청이 들어오면 수행을 안합니다. 그래서 반드시 사용이 끝나면 객체를 닫아 DB와 연결을 종료해야합니다.

rs.close();

stmt.close();

con.close();


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 에 좋은 글이 있습니다:)

[ edwith - 웹프로그래밍 부스트코스 ] 를 개인적으로 공부하고 정리한 공간입니다. 잘못된 부분은 피드백 주시면 감사하겠습니다


'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