본문 바로가기
Programming/JAVA

이론_22. JDBC

by yoon9i 2024. 3. 6.
/*
    <JDBC>

    ◎ JDBC(Java Database Connector) 는 주로 java.sql 패키지 아래에 위치한 인터페이스 집합을 의미한다.
    ◎ 이 인터페이스들은 자바 언어를 활용하여 DBMS 에 접속, 쿼리를 실행하기 위해 요구되는 요건을 지닌
      인터페이스들이다.
    ◎ 각 다른 종류의 DBMS 는 이러한 JDBC 인터페이스를 각자의 DBMS 의 요구사항에 맞는 로직을 구현한 클래스들의
      집합을 가진다.

    ◎ MariaDB : MariaDB Java Client (org.mariadb.jdbc : mariadb-java-client)
    ◎ MySQL : MySQL Connector/J (com.mysql : mysql-connector-j)
    ◎ PostgreSQL : PostgreSQL JDBC Driver (org.postgresql - postgresql)
    ◎ MongoDB : MongoDB Java Driver (org.mongodb : mongodb-driver)
    ◎ 각 DBMS 마다 자바와 통신하는 규격(프로토콜) 이 다름으로 사실상 DBMS 종류의 개수만큼 JDBC 의존성이 존재한다고
      생각하면 된다.

    ◎ 자바에서 JDBC 를 이용하여 DBMS 에 접속하기 위한 공통된 주소 표현식은 아래와 같다.

        jdbc:[DBMS 코드]://[호스트]:[포트]/[접속 스키마]?

        가령, 로컬 호스틍서 3306번 포트를 이용하여 실행 중인 MariaDB 에 접속하기 위한 주소는 아래와 같다.

        jdbc:mariadb://localhost:3306/


    <객체>

    ◎ JDBC 를 이용하여 DBMS 에 접속하기 위한 주된 객체는 아래와 같다.

    - Connection
    : Connection (java.sql.Connection) 타입의 객체는 JVM 과 DBMS 간의 연결을 유지하고 있는 객체이다.
      DriverManager (java.sql.DriverManager) 로 부터 생성된다.

      -> prepareStatement(x)
         : 쿼리인 문자열 x 를 담고 있는 PreparedStatement(java.sql.PreparedStatement) 타입의 객체를 반환한다.

    - PreparedStatement
    : PreparedStatement(java.sql.PreparedStatement) 타입의 객체는 Connection 객체를 통해 실행할
      SQL 쿼리를 담고 있다. Connection(java.sql.Connection) 객체로 부터 생성된다.

      -> execute() : 쿼리를 실행하고 실행 결과가 ResultSet 인가의 여부(boolean)를 반환한다.
      -> executeUpdate() : 쿼리를 실행하고 실행 결과 영향을 받은 레코드의 개수(int)를 반환한다.
      -> executeQuery() : 쿼리를 실행하고 실행 결과인 레코드 세트를 가지는 ResultSet(java.sql.ResultSet)
         타입의 객체를 반환한다.
      -> setInt(...), setString(...), setBoolean(...) 등 : 쿼리가 가지고 있는 물음표(?) 자리에 값을
         이스케이프하여 대입한다.

    - ResultSet
    : ResultSet(java.sql.ResultSet) 타입의 객체는 SELECT 쿼리를 실행할 때에만 사용하며, 쿼리 실행 결과
      값들을 담고있다. Iterator 처럼 사용하며 레코드 별로 각 열의 값을 가지고 올수 있다.
      PreparedStatement(java.sql.PreparedStatement) 객체로 부터 생성된다.

      -> next() : 다음 레코드가 있는가의 여부를 반환(boolean) 하고 포인터를 다음 레코드로 옮긴다.
      -> getInt(...), getString(...), getBoolean(...) 등 : ResultSet 객체가 가지고 있는 데이터 중
         가리키고 있는 레코드의 열 값을 반환한다.


    <패턴>

    ◎ MariaDB에 접속하여 SELECT 를 포함하는 쿼리를 실행하기 위해 아래와 같은 패턴으로 작성한다.

        final String driverCLassName = "org.mariadb.jdbc.Driver";
        final String host = "localhost";
        final int port = 33061;
        final String username = "study";
        final String password = "test1234";
        final String url = String.format("jdbc:mariadb://%s:%d", host, port);
        Class.forName(driverClassName);
        try (Connection connection = DriverManager.getConnection(url, username, password)){
            String query = "SELECT 1 AS `value`";
            try (PreparedStatement statement = connection.prepareStatement(query)) {
                try(ResultSet resultSet = statement.executeQuery()){
                    while (resultSet.next()) {
                        int value = resultSet.getInt("value");
                        System.out.println(value);    //>>> 1
                    }
                }
            }
        }


*/

'Programming > JAVA' 카테고리의 다른 글

이론_24. 구조체  (0) 2024.03.06
이론_23. 의존성  (0) 2024.03.06
이론_21. 자료구조 관련 클래스  (0) 2024.03.06
이론_20. 자료구조  (0) 2024.03.06
이론_19. 제네릭  (0) 2024.03.06