JDBC (Java Database Connectivity)
JDBC (Java Database Connectivity) is the Java API that manages connecting to a database, issuing queries and commands, and handling result sets obtained from the database.
JDBC(자바 데이터베이스 연결)는 데이터베이스 연결과 쿼리 및 명령 실행 그리고 데이터베이스로부터 얻은 결과 집합 처리를 관리하는 Java API입니다.
JDBC Driver
JDBC 드러이버는 자바 프로그램의 요청을 DBMS(Database Management System - 데이터베이스 관리 시스템)가 이해할 수 있는 Protocol(프로토콜)로 변환해 주는 Client-Side Adapter (클라이언트 사이드 어댑터)입니다.
Oracle, MySQL, MariaDB의 JDBC Driver는 다음 링크에서 직접 다운로드할 수 있습니다.
Oracle Database JDBC driver - https://www.oracle.com/kr/database/technologies/appdev/jdbc-downloads.html
MySQL Connectors (JDBC driver) - https://www.mysql.com/products/connector/
MariaDB Connector/J (JDBC driver) - https://mariadb.com/kb/en/about-mariadb-connector-j/
Client-Side Adapter (클라이언트 사이드 어댑터)는 Adapter Pattern (어댑터 패턴)으로 개발된 Adapter (어댑터)입니다.
Adapter Pattern (어댑터 패턴)이란 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴입니다.
그래서, JDBC 드러이버는 데이터베이스가 달라도 Adapter Pattern (어댑터 패턴)으로 개발된 Adapter (어댑터)로 동일한 함수로 동일하게 동작되게 해 줍니다.
Maven Spring Project에 MariaDB JDBC(MariaDB Java Client) 적용하기
1. 메이븐 리포지토리(https://mvnrepository.com)에서 "mariadb-java-client"으로 검색합니다. 검색된 결과 중에 "org.mariadb.jdbc > mariadb-java-client"인 MariaDB Java Client를 선택합니다.
2. "Version"중에서 "3.0.5"를 선택합니다. 그리고 [Maven] 탭을 선택하고 복사합니다. 블로그 작성 당시 최신 버전은 "3.0.7"입니다. 최신 버전을 선택하셔도 됩니다.
<!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client -->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>3.0.5</version>
</dependency>
3. 메이븐 프로젝트에서 pom.xml 파일을 오픈하고 복사한 내용을 붙여 넣기하고 저장합니다.
그러면 자동으로 MariaDB JDBC Driver 라이브러리 파일(JAR)들이 다운로드됩니다.
mariadb-java-client-3.0.5.jar
MariaDB JDBC Driver 로드 테스트 하기
MariaDB JDBC Driver의 클래스 이름은 "org.mariadb.jdbc.Driver"입니다.
"Project Explorer"에서 다운로드된 "mariadb-java-client-3.0.5.jar"파일을 클릭하여 펼쳐보면 "org.mariadb.jdbc"에 "Driver.class"파일이 있는 것을 확인할 수 있습니다.
MariaDB JDBC Driver를 테스트하기 위해 Class.forName 함수(Java에서 클래스를 동적으로 로딩하는 함수)로 테스트해 보겠습니다.
@RequestMapping("/index")
public String mainIndex(HttpServletRequest request, HttpServletResponse response, ModelMap model) {
try {
Class<?> dbDriver = Class.forName("org.mariadb.jdbc.Driver");
System.out.println("마리아디비 드라이버(" + dbDriver.toString() + ")가 로딩됨");
} catch (ClassNotFoundException e) {
e.printStackTrace();
System.out.println("마리아디비 드라이버가 로딩되지 않음");
}
}
[Console]
마리아디비 드라이버(class org.mariadb.jdbc.Driver)가 로딩됨
정상적으로 MariaDB JDBC Driver가 로딩되는 것을 확인할 수 있습니다.
위의 코드는 테스트를 위한 코드입니다. 테스트 후 코드는 삭제하시면 됩니다.
그럼 MariaDB 접속 테스트를 위해 MariaDB에 Database를 생성하고 향후에 테스트할 Table도 생성하겠습니다.
MariaDB에 Database 생성 및 Table 생성하기
1. Database는 study로 생성하겠습니다.
CREATE DATABASE study;
2. Table은 INT_BOARD_TB로 생성하겠습니다.
CREATE TABLE study.INT_BOARD_TB (
BRD_SEQ BIGINT auto_increment NOT NULL COMMENT '게시판 시퀀스',
BRD_SUBJECT VARCHAR(250) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '게시판 제목',
BRD_CONTENT TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '게시판 내용',
REG_ID varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '등록자 아이디',
REG_DTM DATETIME DEFAULT NOW() NOT NULL COMMENT '등록 일자',
MOD_ID varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '변경자 아이디',
MOD_DTM DATETIME NULL COMMENT '변경 일자',
CONSTRAINT INT_BOARD_TB_PK PRIMARY KEY (BRD_SEQ)
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8
COLLATE=utf8_general_ci
COMMENT='board';
3. INT_BOARD_TB에 테스트 데이터를 추가합니다.
INSERT INTO study.INT_BOARD_TB (BRD_SUBJECT, BRD_CONTENT, REG_ID) VALUES ("테스트 제목 1", "테스트 내용 1", "testid1");
INSERT INTO study.INT_BOARD_TB (BRD_SUBJECT, BRD_CONTENT, REG_ID) VALUES ("테스트 제목 2", "테스트 내용 2", "testid2");
INSERT INTO study.INT_BOARD_TB (BRD_SUBJECT, BRD_CONTENT, REG_ID) VALUES ("테스트 제목 3", "테스트 내용 3", "testid1");
INSERT INTO study.INT_BOARD_TB (BRD_SUBJECT, BRD_CONTENT, REG_ID) VALUES ("테스트 제목 4", "테스트 내용 4", "testid3");
INSERT INTO study.INT_BOARD_TB (BRD_SUBJECT, BRD_CONTENT, REG_ID) VALUES ("테스트 제목 5", "테스트 내용 5", "testid2");
INSERT INTO study.INT_BOARD_TB (BRD_SUBJECT, BRD_CONTENT, REG_ID) VALUES ("테스트 제목 6", "테스트 내용 6", "testid2");
INSERT INTO study.INT_BOARD_TB (BRD_SUBJECT, BRD_CONTENT, REG_ID) VALUES ("테스트 제목 7", "테스트 내용 7", "testid3");
INSERT INTO study.INT_BOARD_TB (BRD_SUBJECT, BRD_CONTENT, REG_ID) VALUES ("테스트 제목 8", "테스트 내용 8", "testid1");
INSERT INTO study.INT_BOARD_TB (BRD_SUBJECT, BRD_CONTENT, REG_ID) VALUES ("테스트 제목 9", "테스트 내용 9", "testid3");
INSERT INTO study.INT_BOARD_TB (BRD_SUBJECT, BRD_CONTENT, REG_ID) VALUES ("테스트 제목 10", "테스트 내용 10", "testid1");
MariaDB 접속 테스트 하기
1. MariaDB에 접속하기 위해서 데이터베이스의 접속 URL를 생성합니다.
jdbc:mariadb://{host}[:{port}]/[{database}]
- {host}는 MariaDB의 호스명이나 IP를 입력합니다. PC에 설치되어 있는 MariaDB에 접속함으로 "localhost" 또는 "127.0.0.1"으로 입력합니다.
- {port}는 MariaDB의 접속 포트를 입력합니다. 기본 포트는 "3306"입니다. 만약 설치 시 "Port"를 변경하셨다면 변경된 포트번호를 입력합니다.
- {database}는 MariaDB에 접속할 데이터베이스명을 입력합니다. 위에서 생성한 Database인 "study"를 입력합니다.
jdbc:mariadb://localhost:3306/study
2. DriverManager의 getConnection 메서드를 이용하여 접속하고 Connection를 가져오고 close 하게 코딩합니다.
Connection DriverManager.getConnection(String url, String user, String password)
- url은 연결할 데이터베이스의 접속 URL임으로 위에서 생성한 데이터베이스의 접속 URL를 입력합니다.
- user는 데이터베이스의 접속 계정을 입력합니다.
- password는 데이터베이스의 접속 패스워드를 입력합니다.
@RequestMapping("/index")
public String mainIndex(HttpServletRequest request, HttpServletResponse response, ModelMap model) {
Connection connection = null;
String databaseConn = "jdbc:mariadb://localhost:3306/study";
try {
connection = DriverManager.getConnection(databaseConn, "root", "password");
System.out.println("마리아디비에 연결됨");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("마리아디비에 연결하지 못함");
} finally {
if (null != connection) {
try {
connection.close();
System.out.println("마리아디비에서 연결을 종료함");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("마리아디비에서 연결을 종료하지 못함");
}
}
}
}
[Console]
마리아디비에 연결됨
마리아디비에서 연결을 종료함
정상적으로 MariaDB에 접속되는 것을 확인할 수 있습니다.
위의 코드는 테스트를 위한 코드입니다. 테스트 후 코드는 삭제하시면 됩니다.
이어서, DataSource를 만들겠습니다.
'Spring > Maven Project' 카테고리의 다른 글
Spring에 MyBatis 적용 (MyBatis 3.5.10, MyBatis-Spring 2.0.7, spring-jdbc 5.2.22) (0) | 2022.09.24 |
---|---|
Spring에 DataSource (Apache Common DBCP2 - 2.9.0) 적용 (0) | 2022.09.17 |
Spring에 SiteMesh 적용 (SiteMesh 3.0.1) (0) | 2022.09.11 |
Spring에 Filter 적용 (javax.servlet.Filter) (0) | 2022.09.11 |
Spring에 JSTL(JavaServer Pages Standard Tag Library) 적용 (JSTL 1.2) (0) | 2022.09.11 |