/*
<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
}
}
}
}
*/