JDBC란?

  • 데이터 베이스를 자바기반 어플리케이션에서 사용하기 위한 라이브러리.
  • Oracle, MS SQL, MySQL 등 각 언어마다 쿼리는 다르지만, 기능은 동일하다.
    • DB에 관계없이 자바 코드로 데이터 베이스를 작성할 수 있는 인터페이스이다.
  • Java DataBase Connectivity
  • 사용하는 데이터베이스를 교체해도 자바 코드를 바꾸지 않아도 된다.
  • JDBC가 실제 데이터 베이스를 동작시키기 위해 각 제조사에서 만들어놓은 JDBC Driver를 사용한다.
    • 실제 구동은 드라이버가 한다.

실행 과정

  1. 드라이버 로드하기
  2. 연결 생성
  3. 문장 실행
  4. 결과집합 사용하기

DB와 Driver 설치

현재 랩탑에 설치돼있는 mysql 8.0.25을 사용하겠다.

 

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

실습

데이터 조회

기본 코드 이해

  • 연결 단계
    • 이러한 순서로 진행된다.
      • new 연산자로 객체를 만들지 않는다.
    1. Class.forName("com.mysql.cj.jdbc.Driver");
      • 1번이 실행되면, 드라이버가 메모리에 올라간다.
    2. Connection con = DriverManager.getConnection(...);
      • 2번이 실행되면, 연결이 이루어진다. 드라이버 객체를 얻는다.
    3. Statement st = con.createStatement();
      • 3번이 실행되면, 쿼리를 실행한다.
        • 결과 집합이 만들어진다.
        • 레코드 단위로 한줄 씩 받아온다.
    4. ResultSet rs = st.executeQuery(sql);
    5. rs.next();
    6. String title = rs.getString("title");
      • 순회하면서 데이터를 얻는다.
public class Program {
    public static void main(String[] args) throws Exception {
        String url = "jdbc:mysql://localhost:3306/connectdb?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC";
        String sql = "SELECT * FROM employee";

        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection con = DriverManager.getConnection(url, "connectuser", "connect123!@#");
        Statement st = con.createStatement();
        ResultSet rs = st.executeQuery(sql);

        rs.next();
        String name = rs.getString("name");
        System.out.println(name);


        rs.close();
        st.close();
    }
}

데이터 추가

public class Program2 {
    public static void main(String[] args) throws Exception {
        String url = "jdbc:mysql://localhost:3306/connectdb?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC";
//        String sql = "INSERT INTO employee VALUES(1111, 'Choi', 'programmer', 7788, '2019-12-22', 9999.99, 300.00, 10)";
        String sql = "INSERT INTO employee VALUES(?,?,?,?,?,?,?,?)";

        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection con = DriverManager.getConnection(url, "connectuser", "connect123!@#");
//        Statement st = con.createStatement();
        PreparedStatement st = con.prepareStatement(sql);
        st.setInt(1, 1111);
        st.setString(2, "Choi");
        st.setString(3, "Pro");
        st.setInt(4, 7788);
        st.setString(5, "2019-12-22");
        st.setBigDecimal(6, BigDecimal.valueOf(9999.99));
        st.setBigDecimal(7, BigDecimal.valueOf(300.00));
        st.setInt(8, 10);

        int result = st.executeUpdate();

        st.close();
        con.close();
    }
}

데이터 수정

public class Program3 {
    public static void main(String[] args) throws Exception {
        String url = "jdbc:mysql://localhost:3306/connectdb?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC";
        String sql = "UPDATE EMPLOYEE SET job = 'CTO' WHERE name = 'Choi'";

        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection con = DriverManager.getConnection(url, "connectuser", "connect123!@#");
        PreparedStatement st = con.prepareStatement(sql);

        int result = st.executeUpdate();

        st.close();
        con.close();
    }
}

데이터 삭제

public class Program4 {
    public static void main(String[] args) throws Exception {
        String url = "jdbc:mysql://localhost:3306/connectdb?useSSL=false&characterEncoding=UTF-8&serverTimezone=UTC";
        String sql = "DELETE FROM employee WHERE name = 'Choi'";

        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection con = DriverManager.getConnection(url, "connectuser", "connect123!@#");
        PreparedStatement st = con.prepareStatement(sql);

        int result = st.executeUpdate();

        st.close();
        con.close();
    }
}

쿼리문만 바꿔서 데이터 CRUD를 할 수 있다.

어떤 조건을 걸때는 자바 단에서 하는 게 아니라 쿼리문에서 해주는 것이 시간,공간을 절약할 수 있다.

'Programming > 언어' 카테고리의 다른 글

[Kotlin] 표현식과 명령문  (0) 2023.02.12
Java 코드가 실행되는 과정  (0) 2021.12.26
Garbage Collector 찍먹하기  (0) 2021.12.26
객체지향에서 인터페이스란?  (0) 2021.12.26
Java 자잘한 실수 모음  (0) 2020.07.06

+ Recent posts