본문 바로가기

Programming

[JDBC] JDBC 기본 with MySql

JDBC (Java DataBase Connectivity)

자바 언어로 짜여진 응용프로그램에서 데이터베이스에 접근할 수 있게 해주는 드라이버

더 많은 언어를 지양하고 대부분의 응용프로그램의 데이터베이스 연결을 돕기 위한

ODBC(Open DataBase Connectivity)라는 인터페이스가 존재 (마이크로소프트 주도)

최대한 많은 벤더에서 제공하는 DBMS를 지원하는 것을 목표로 함

- 오라클에서 API를 인터페이스를 제공하고 구체적인 구현은 벤더에서 수행

java.sql javax.sql 패키지를 사용

ANSI SQL 지원 노력 (표준을 지원하려고 노력)

 

/*벤더 : db회사 (ex 오라클)

최대한 많은 db를 지원해야 하므로 가능한 표준을 지키려 함*/

 

JDBC  Connection

JDBC 드라이버 필요 (이클립스에서 라이브러리 설정해야 이용 가능)

Connection 객체 생성 (DBMS쪽 인터페이스를 제공하는 객체)

DriverManager getConnection 함수에 넣어야 할 문자열의 형식

- jdbc:<드라이버 프로토콜>:<드라이버 커넥션 관련 인자>

- 오라클의 경우 jdbc:oracle:thin@호스트주소:포트번호:SID이름 으로 접근 가능

Database 

JDBC URL 

MS SQL Server 

jdbc:odbc:DemoDSN 

Oracle 

jdbc:oracle:thin@myserver:1521:demodb 

MySQL 

jdbc:mysql://localhost:3306/demodb 


JDBC  Statement

문장의 종류

- Statement

- 문자열을 기반으로 하여 정적 SQL 질의 실행

- 문자열을 이어붙이는 형식으로 SQL 질의를 수행할 수 있으나 이러한 방법은

추천되지 않음

- PreparedStatement

- 일반적으로 Statement보다 좀 더 나은 수행속도를 보장 (캐싱)

- 실제적인 인자를 함수를 통해 지정하여 SQL Injection을 예방

- ? 파라미터의 값이 들어갈 장소(parameter placeholder)로 사용 가능 (동적 SQL)

- set[자료형] 함수를 호출하여 값 지정 가능 (setInt, setString, setFloat, ... )

- 배치 모드로 실행 가능 (파라미터만 바꿔서 여러 문장 실행하기)

- CallableStatement

- DB에 저장 프로시저, 함수를 실행시키기 위해서 사용됨

 

/*정적 SQL : “select * from student”

동적 SQL : “select “+”*”+”student”+” where id=“+userID

Statement만 사용해도 좋지만 SQL Injection때문에 preparedStatement를 예방할 수 없다.(입력받는 곳에 delete from student 같은 명령을 넣으면 큰일남)*/

 

JDBC  execute

실행 함수의 종류

- execute

- 일반적인 상황에 두루 사용

- boolean 값을 리턴

- true 값 리턴 - 해당 쿼리의 결과로 인하여 ResultSet이 반환됨

- false 값 리턴 - 해당 쿼리의 결과로 인하여 int값이 반환됨

- executeUpdate

- SELECT를 제외한 DML, DDL문에 사용

- int 값을 리턴

- 리턴받은 정수값의 의미 (영향 받은 행의 개수)

- executeQuery

- SELECT 구문에 사용 (여러 행의 결과값을 받아와야 하므로)

- ResultSet 객체를 리턴

 

/*Execute-bool-true:resultSet

-false:int(실행된 행의 개수)

 

executeUpdate-int(실행된 행의 개수)

 

executeQuery-resultSet*/

 

JDBC  Transaction

트랜잭션 실행 시 setAutoCommit false로 지정 필요

(Connection은 기본적으로 모든 질의에 대하여 자동으로 commit 진행)

추가적으로 commit, rollback 명령어 실행 필요

 

JDBC - SQL 처리 순서

1. Connection 클래스 이용하여 데이터베이스 연결

2. 문장 (Statement) 생성

3. 문장 (Statement) 실행

4. 정상 실행된 결과 혹은 예외 처리 (ResultSet과 같은 객체 이용)

5. 데이터베이스 객체들을 close하여 메모리 확보

 

DAO

싱글턴 DAO 인스턴스를 통해 DB 접근

DAO는 일종의 DB 접근을 위한 인터페이스처럼 작동

DAO에서는 관련된 객체에 대한 CRUD 연산을 지원

사용되는 객체는 DTO(Data Transfer Object) 혹은 VO(Value Object)라고 불리움

Factory 패턴을 적용하여 사용하기도 함 (다른 DBMS와의 호환을 위해서) 

'Programming' 카테고리의 다른 글

[JSP] 액션태그 기초  (0) 2019.01.01
[JSP] 디렉티브 기초  (0) 2019.01.01
[SQL] SQL 기본 with MySql  (0) 2019.01.01
[Algorithm] 달팽이 배열  (0) 2018.03.28
[Algorithm] Binary Counting으로 subset구하기  (0) 2018.03.27