728x90
  • JDBC란 무엇인가?

JDBC(Java Database Connectivity)는 자바에서 DB에 접속할 수 있도록 하는 자바의 API이다. JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공한다.

자바와 DBMS 사이에서 통역을 해주는 통역사의 역할을 수행한다.

JDBC를 사용하면 개발자는 DBMS를 신경쓰지 않고 JDBC만을 사용해서 개발을 할 수 있게 된다.

JDBC를 사용하기 위해서는 해당 DBMS의 JDBC 드라이버를 사용해야 한다.

 

 

  • JDBC Driver

mac을 사용하고 있기 때문에

 

https://dev.mysql.com/downloads/connector/j/

 

MySQL :: Download Connector/J

MySQL Connector/J 8.0 is highly recommended for use with MySQL Server 8.0, 5.7 and 5.6. Please upgrade to MySQL Connector/J 8.0.

dev.mysql.com

해당 사이트에서

Platform Independent를 선택해서 다운 받아준다.

 

다운로드 받은 후 압축을 풀어둔다.

 

이제 실습을 하기 위한 Intellij를 열어주자.

새로운 프로젝트를 생성하고 Project Structure에서 다운로드 받고 압축을 해제했던 connector를 추가해준다.

OK를 누르면 이제 JDBC를 사용할 준비가 된 것이다.

 

  • JDBC 기본코드

우선은 MySQL에서 받은 드라이버를 로드해야 한다.

 

그렇기에 드라이버를 로드하는 것이 가장 첫번째 코드이다.

Class.forName("com.mysql.cj.jdbc.driver");

이 코드로 MySQL 드라이버를 로드하자.

 

이렇게 드라이버를 로드하면 메모리에 잡히게 된다.

 

이 드라이버를 연결해 연결 객체를 얻어야 한다.

Connection connection = DriverManager.getConnection(...);

현재 로컬에 있는 데이터베이스에 연결할 것이기 때문에

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/DB명", "user", "password");

이렇게 연결하도록 하자.

 

실행도구를 생성한다.

Statement statement = connection.createStatement();

 

쿼리를 실행하고 결과를 받아온다.

ResultSet resultSet = statement.executeQuery(sql);

 

현재 ResultSet은 파일의 시작(Before of File)을 가르키고 있으며, 이 ResultSet은 ResultSet.next를 이용하여 다음 정보들을 넘겨 받게 된다.

그러다가 파일의 마지막(End of File)을 가르키면 더 이상 데이터를 반환하지 않게 된다.

 

ResultSet.getXXX("열이름") 메서드를 사용하면 현재 ResultSet이 가르키고 있는 행의 열 이름에 해당하는 정보를 가져오게 된다.

 

바로 실습을 해보도록 하자.

참고로 이 부분에 대한 코드는 거의 고정이니 외워서 사용하도록 하자.

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

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "12345678");

Statement statement = connection.createStatement();

ResultSet resultSet = statement.executeQuery("");
        
//
//
        
resultSet.close();
statement.close();
connection.close();

우선 DB에서 데이터를 가져오기 위해 데이터를 추가한다.

 

INSERT INTO NOTICE VALUES
(
    1,
    "hello",
    "sk",
    "aaa",
    SYSDATE(),
    0,
    ""
);

이렇게 NOTICE 테이블에 데이터를 대충 추가한 후

 

import java.sql.*;

public class Main {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {

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

        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "12345678");

        Statement statement = connection.createStatement();

        ResultSet resultSet = statement.executeQuery("SELECT * FROM NOTICE");



        if(resultSet.next()){
            String title = resultSet.getString("TITLE");
            System.out.println(title);
        }

        resultSet.close();
        statement.close();
        connection.close();
    }
}

ResultSet에서 다음 데이터를 가져온 후 title 열의 데이터를 출력해보면

 

이렇게 잘 출력이 되는 것을 볼 수 있다.

 

데이터를 하나 더 추가하여 while 문으로 모든 데이터를 출력한 모습이다.

당연히 MySQL과 마찬가지로 쿼리에 WHERE 문도 사용 할 수가 있다.

import java.sql.*;

public class Main {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {

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

        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc", "root", "12345678");

        Statement statement = connection.createStatement();

        ResultSet resultSet = statement.executeQuery("SELECT * FROM NOTICE WHERE ID > 1");

        while(resultSet.next()){
            int id = resultSet.getInt("ID");
            String title = resultSet.getString("TITLE");
            String writer_id = resultSet.getString("WRITER_ID");
            Date regDate = resultSet.getDate("REGDATE");
            String content = resultSet.getString("CONTENT");
            int hit = resultSet.getInt("HIT");

            System.out.printf("id: %d, title: %s, write_id: %s, regDate: %s, content: %s, hit: %d\n", id, title, writer_id, regDate, content, hit);
        }

        resultSet.close();
        statement.close();
        connection.close();
    }
}

'백엔드 > JDBC' 카테고리의 다른 글

JDBC 2일차  (0) 2023.03.14

+ Recent posts