[TIL] JDBC 기초

배윤석·2022년 4월 22일
0

SQL

목록 보기
2/4

🥊 환경 정보

  • DBMS : MariaDB
  • Javac : JDK version: 11
  • JDBC : mariadb-java-client-2.7.3.jar
  • IDE : Eclipse Version: 2022-03 (4.23.0)

🥊 JDBC

약어

Java DataBase Connectivity

정의

자바에서 데이터베이스와 관련된 작업을 처리할때 사용하는 API.
자바는 DBMS의 종류와 상관없이 하나의 JDBC API를 사용해 데이터베이스 작업(SQL 구문)을 처리할 수 있다.

구조

JDBC API는 드라이버를 거쳐 데이터베이스와 통신을 한다.
이때 드라이버는 사용하는 DBMS의 제작사에서 개발하여 배포한다.

아래 사진을 보자.

자바는 기본적으로 JDBC API를 제공해준다.
API는 java.sql.* 이다.
JDBC 드라이버는 사용하려는 DB 업체가 제공하는 것을 사용해야 한다.

사유는 프로그램 최적화 때문이라고 한다.
(Java의 Exceptionthrows로 처리하는 것이 아니라, try ~ catch 구문으로 처리하는 것과 비슷한 이유인듯함)

JDBC 드라이버 다운

나는 현재 MariaDB를 사용 중이다.
MariaDB Download Site를 들어가보자.

Download Site

좌측의 메뉴항목은 아래 사진과 같다.
이중 Connector/J를 클릭해보자.

그럼 MariaDB JDBC 드라이버의 버전이 나온다.
작성일2022-04-22 기준으로 가장 최신 버전은 Release date 2021-05-05 / 3.0.0 버전이지만, 안정화가 되지 않은 Alpha 상태이다.
따라서 Stable 상태인 2.7.3 버전을 사용하고자 한다.

Eclipse IDE에 API 추가


[API 추가하려는 프로젝트] 에 마우스 우클릭 ➡ Build Path ➡ Configure Build Path...


Classpath 선택 ➡ Add External JARS... 클릭


API 파일 선택 ➡ 열기 클릭


Apply and Close 클릭


Referenced Libraries 에 API가 추가되었는지 확인


🥊 JDBC 문법

구현 순서

다음 7가지의 단계를 거쳐 코딩을 진행한다.

  1. JDBC 드라이버 로딩
  2. Database 연결
  3. Query 실행을 위한 Statement 객체 생성
  4. Query 실행
  5. Query 실행 결과 사용
  6. Statement 종료
  7. Database 연결 해제

대략적인 순서는 이렇게 진행된다.
이제 하나하나 알아보도록 하자.

MariaDB ↔ JAVA 사용 코드

1. JDBC 드라이버 로딩

Class.forName("org.mariadb.jdbc.Driver");
try {	
	Class.forName("org.mariadb.jdbc.Driver");
} catch(ClassNotFoundException e) {	
	// 지정 클래스가 존재하지 않을 경우 Exeption 처리
}

2. Database 연결

"jdbc:mysql://아이피(도메인):(포트):/(데이터베이스명)"
Connection conn = DriverManager.getConnection(url,user,password);

JDBC를 통해 root권한으로 접속하면 보안문제가 발생할 가능성이 높아지니 조심하자.
사유 : 아래와 코드와 같이 포트 및 비밀번호가 그대로 노출된다.(보호 X)

현재는 예제라서 편의상 이렇게 진행한다.
보통 현장에서는 작업하려는 Database에만 접근 권한을 가진 사용자를 추가하고,
해당 사용자로 접속한다고 한다.

String url = "jdbc:mysql://localhost:3306/sample";
// 접속할 아이피, 포트, 데이터베이스명(생략가능) 지정
String user = "root";
// 접속할 사용자 지정
String password = "!123456";
// 비밀번호 입력

Connection conn = null;

System.out.println();
try {
	conn = DriverManager.getConnection(url,user,password);
} catch (SQLException e) {
	// 접속 실패시 SQL Exception 처리
}

3. Query 실행을 위한 Statement 객체 생성

Statement stmt = Connection.createStatement();
Statement stmt = null;
try {
	stmt = conn.createStatement();
} catch (SQLException e) {
	// 객체 생성 실패시 SQL Exception 처리
}

4. Query 실행

Statement.excuteUpdate( "SQL구문" );
int row = Statement.excuteUpdate( "SQL구문" );

INSERT / UPDATE / DELETE 사용시 사용한다.
DATABASEDATA를 변경할 시 사용.

int row = Statement.excuteUpdate( "SQL구문" );

위의 구문으로 사용해도 실행 결과는 동일하게 DATABASEDATA가 변경된다.
재밌는 점은 Returnint 자료형이라는 점이다.
int 자료형으로 받으면 해당 SQL 구문으로 몇 개의 행(row)이 변경되었는지 알려준다.

System.out.println("Query Complete : "+row+" row");

위의 Return 받은 row를 가지고 출력을 해보았다.
이렇게 작성하면 몇개의 row가 변경되었는지 console창으로 출력되어 쉽게 확인할 수 있다.

ResultSet = Statement.excuteQuery( "SQL구문"  );

// SELECT 사용시 사용한다.
// DATABASEDATA를 읽을 시 사용.

Statement stmt = null;
ResultSet rs = null;

try {
	stmt = conn.createStatement();
    if (select 사용시) {
    	rs = stmt.executeQuery( SQL );
    } else (select 제외 나머지) {
    	rs = stmt.executeQuery( SQL );
    }
} catch (SQLException e) {
}

5. Query 실행 결과 사용

ResultSet 클래스의 Method를 이용해 결과를 출력할 수 있다.
관련 Document Site를 공유한다.

Document Site

영어가 약해서 일단은 한글이 조금이라도 더 포함된 사이트로 공유함.

6. Statement 종료

Statement.close();
Statement stmt = null;
ResultSet rs = null;
try {
	stmt = conn.createStatement();
    rs = stmt.executeQuery( SQL );
} catch (SQLException e) {
} finally {
	if(rs!=null) try {rs.close();} catch (SQLException e) {}
	if(stmt!=null) try {stmt.close();} catch (SQLException e) {}
    // 구문 완료 후 statement 닫아줘야 한다
}

7. Database 연결 해제

Connection.close();
Connection conn = null;

System.out.println();
try {
	conn = DriverManager.getConnection(url,user,password);
} catch (SQLException e) {
} finally {
	if(conn!=null) try {conn.close();} catch (SQLException e) {}
    // 구문 완료 후 Connection 닫아줘야 한다
}
profile
차근차근 한 걸음씩 걸어나가는 개발자 꿈나무.

0개의 댓글