JDBC API란?
자바 어플리케이션에서도 직접 관계형 DBMS를 제어할 수 있다. 그러한 역할을 돕는 API (Application, Programming Interface, library, 도구)가 JDBC(Java DataBase Connectivity) API이다. 다양한 관계형 DBMS를 자바에서 제어할 수 있는데, 이를 위해서는 각각에 맞는 JDBC 드라이버를 먼저 설치해야 한다. 위 개념을 간단한 모식도로 나타나면 다음과 같다.
JDBC API는 게임기 자체(닌X도 스X치), JDBC 드라이버는 게임칩(동X의 숲)이라고 생각하면 이해가 쉽다.
JDBC API는 기본적으로 설치되어 있지만, 각 DBMS에 맞는 JDBC 드라이버는 추가적으로 설치해야 한다. 이 포스팅에서는 MySQL에 접속하는 과정을 설명하고자 한다.
JDBC 드라이버 (for MySQL) 설치
JDBC 드라이버는 각각의 관계형 DBMS와 통신을 담당하는 Java 클래스로, MySQL에 대한 JDBC 드라이버는 아래 주소에서 다운받을 수 있다.
다운받은 후 압축을 풀고, 이클립스에 JAR 파일(mysql-connector-java-8.0.19.jar)을 등록시켜주면 사용이 가능하다.
등록하면 다음과 같이 Referenced Libraries에 등록이 된 것을 확인할 수 있다.
Java 코드를 이용한 DBMS 제어
크게 네 가지 단계로 구성된다.
1. JDBC 드라이버 로딩: Class.forName(“JDBC드라이버 이름”); 으로 JDBC 드라이버를 로딩한다.
- MySQL: “com.mysql.cj.jdbc.Driver”
- SQLite: “org.sqlite.JDBC”
- MariaDB: “org.mariadb.jdbc.Driver”
- SQL server: “com.microsoft.sqlserver.jdbc.SQLServerDriver”
2. Connection 객체 생성: 로드한 JDBC 드라이버를 통해 관계형 DBMS와 연결하는 단계이다.
- DriverManager: 관계형 DBMS와의 연결을 요청하는 method(getConnection)를 가짐.
- JDBC URL: DBMS와의 연결을 위한 식별값
- Connection: 관계형 DBMS와 통신하는 method로 구성.
3. Statement 객체 생성: 해당 객체는 쿼리를 생성 및 실행할 작업 영역을 제공한다.
4. 쿼리 수행
코드 예제
코드 예제는 아래와 같다.
주의해야할 점은 SELECT문의 경우 executeQuery()를 사용하고,
UPDATE, INSERT, DELETE문의 경우에는 executeUpdate()를 사용해야한다.
그렇지 않으면 "java.sql.SQLException: Can not issue data manipulation statements" 에러가 발생한다.
package user.database;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
public class AccessDB {
private static Connection getConnection(String databaseName){
try {
// JDBC 드라이버 로딩
Class.forName("com.mysql.cj.jdbc.Driver");
// Connection 객체 생성
String url = "jdbc:mysql://URL 주소/" + databaseName + "?serverTimezome=Asia/Seoul";
String user = "user";
String password = "password";
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
} catch (Exception e) {
// TODO: handle exception
System.out.println(e);
return null;
}
}
public static List<String> selectValueList(String databaseName, String columnLabel, String sql) {
Connection conn = getConnection(databaseName);
try {
// Statement 객체 생성
Statement stmt = conn.createStatement();
// 쿼리 수행
ResultSet rs = stmt.executeQuery(sql);
// 값 불러오기
List<String> valueList = new ArrayList<String>();
while(rs.next()) {
String value = rs.getString(columnLabel);
valueList.add(value);
}
return valueList;
} catch (Exception e) {
// TODO: handle exception
System.out.println(e);
return null;
}
}
public static int executeUpdate(String databaseName, String sql) {
Connection conn = getConnection(databaseName);
try {
// Statement 객체 생성
Statement stmt = conn.createStatement();
// 쿼리 수행 (변환된 행의 수 반환)
return stmt.executeUpdate(sql);
} catch (Exception e) {
// TODO: handle exception
System.out.println(e);
return -1;
}
}
}
Reference
'Computer Science > Database' 카테고리의 다른 글
[DBMS] 관계형 DBMS의 개념과 NoSQL과의 비교 (0) | 2021.02.15 |
---|---|
[Error] java.sql.SQLException: The server time zone value 'KST' is unrecognized (0) | 2021.02.10 |
[MySQL] Database 인덱스와 제약 조건 (Index, Constraint) (0) | 2021.02.09 |
[MySQL] 텍스트 검색 기능 (0) | 2021.02.09 |
[MySQL] 조인 (JOIN) 사용법 (0) | 2021.02.09 |