본문 바로가기
WEB/JSP Servlet

JDBC : 기초

by 노랑파랑 2016. 11. 21.
반응형




JDBC ( Java DataBase Connectivity )

* 자바에서 데이터베이스와 관련된 작업을 할 때 사용하는 API



1. JDBC 구조


* Java 어플리케이션에서 데이터베이스를 사용할 때에는 데이터베이스 종류와 상관ㅇ벗이 JDBC API를 이용해서 데이터베이스에 접근한다.

* 각종 DBMS들은 JDBC 드라이버를 제공하고있다. JDBC API는 이 드라이버를 거쳐 데이터베이스와 통신을 한다.

* 각 DBMS에 알맞은 JDBC 드라이버만 있다면 어떤 데이터베이스라도 사용할 수 있다.




2. JDBC 드라이버

*  JDBC 드라이버는 클래스 형태로 존재하고, 일반적으로 Jar 파일로 제공된다.

* MySQL을 예를 들면, Myslq을 설치한 폴더의 Connector 폴더를 살펴보면 mysql-connector-java-버전-bin.jar 파일을 찾을 수 있다.

* connector jar 파일이 없다면, JDBC 드라이버 다운로드 링크

* 웹 어플리케이션 폴더의 WebContent/WEB-INF/lib 폴더에 JDBC 드라이버를 복사하면 해당 드라이버를 사용할 수 있다.




3. JDBC 프로그래밍

* 실행 순서

1) JDBC 드라이버 로딩

Class.forName( " com.mysql.jdbc.Driver " );

MySQL : com.mysql.jdbc.Driver

오라클 : oracle.jdbc.driver.OracleDriver

MY SQL서버 : com.microsoft.sqlserver.jdbc.SQLServerDriver

MariaDB : org.mariadb.jdbc.Driver

2) 데이터베이스 커넥션 구함

conn = DriverManager.getConnection( jdbcDriver, dbUser, dbPass );

3) 쿼리 실행을 위한 Statement 객체 생성

stmt = conn.createStatement();

4) 쿼리 실행

rs = stmt.executeQuery(query);

5) 쿼리 실행 결과 사용 ( DB 쿼리 사용 )

6) Statement 종료

stmt.close();

7) 데이터베이스 커넥션 종료

conn.close();




3-1. JDBC URL

* 데이터베이스를 구분할 때 사용하는 URL과 비슷한 형식을 가진 것.

* 사용하는 JDBC 드라이버에 따라서 JDBC URL의 표현 방식이 차이가 난다.


* 일반적 사용

jdbc : [DBMS] : [데이터베이스 식별자]

1) MySQL

jdbc : mysql : //HOST[ : PORT] / DBNAME [?param = value & param2 = value2 & ...]

HOST : MySQL 서버 호스트 주소

DBNAME : DataBase 이름

PORT : MySQL 서버가 사용하는 포트 번호

[?param ...] : 추가 정보, ex) 한글 데이터를 올바르게 하기 위해서 아래를 추가한다.

?useUnicode=ture&characterEncoding=utf8

2) 오라클

jdbc : oracle : thin : @HOST : PORT : SID




3-2. 데이터베이스 커넥션

* JDBC를 사용하여 데이터베이스를 사용하기 위해 getConnection() 메소드를 사용해 DB와 연결된 Connection 객체를 리턴한다.

* 데이터베이스 커넥션 : java.sql.Connection 타입

* java.sql.DriverManager 클래스가 제공하는 getConnection() 메소드를 사용하여 커넥션을 구한다.

▷ DriverManager.getConnection( String jdbcURL )

▷ DriverManager.getConnection( String jdbcURL, String dbuser, String dbPassword )

* catch 블록을 사용해 익셉션 처리가 필요하다. 




3-3. Statement 쿼리 실행

*  Connection 객체 리턴 후 Connection 객체로부터 Statement를 생성하고 쿼리를 실행할 수 있다. 

* Connection 객체의 createStatement() 메소드를 사용해 Statement를 생성한다.

▷ ResultSet executeQuery( String query ) : SELECT 쿼리를 실행한다. 

▷ int executeUpdate( String query ) : INSERT, DELETE, UPDATE 쿼리를 실행한다. 쿼리 결과로 변경된 레코드 개수 리턴


* ResultSet에서 값 읽어오기

▷ executeQuery() 메소드는 SELECT 쿼리 실행 후 결과값을 java.sql.ResultSet 객체에 저장 해서 반환한다. 

▷ ResultSet의 next() 메소드

: SELECT 결과의 존재 여부를 확인할 수 있다. 

: SELECT 쿼리 결과를 행으로 저장하며 커서를 통해서 각 행의 데이터에 접근한다.  ResultSet.next() 케소드는 커서의 다음 행이 존재하는 경우 true를 반환하고 커서를 그 행으로 이동시킨다. 이 ResultSet.next() 메소드를 계속해서 호출하면 위와 같이 순차적으로 다음 행으로 이동 후 마지막 행에 커서가 도착하면 ResultSet.next() 메소드는 false를 반환한다. 

▷ ResultSet 클래스의 주요 읽기 메소드

메소드 

리턴 타입 

설명 

getString(String name)

getString(int index) 

String 

지정한 칼럼 값을 String으로 읽어온다. 

getChracterStream(String name)

getCharacterStream(int index) 

java.io.Reader 

지정한 칼럼 값을 Stream 형태로 읽어온다. LONG, VARCHAR 타입을 읽어올때 사용. 

getInt(String name)

getInt(int index) 

int 

지정한 칼럼 값을 int 타입으로 읽어온다 

getLong(String name)

getLong(int index) 

long 

지정한 칼럼 값을 long 타입으로 읽어온다.  

getDouble(String name)

getDouble(int index) 

double 

지정한 칼럼 값을 double 타입으로 읽어온다. 

 getFloat(String name)

getFloat(int index)

float 

지정한 칼럼 값을 float 타입으로 읽어온다. 

getTimestamp(String name)

getTimestamp(int index) 

java.sql.Timestamp 

지정한 칼럼 값을 Timestamp 타입으로 읽어온다.  SQL TIMESTAMP 타입을 읽어올 때 사용한다.

 getDate(String name)
getDate(int index)

java.sql.Date 

지정한 칼럼 값을 Date 타입으로 읽어온다. SQL DATE 타입을 읽어올 때 사용한다. 

getTime(String name)

getTime(int index) 

java.sql.Time 

지정한 칼럼 값을 Time 타입으로 읽어온다. SQL TIME 타입을 읽어올 때 사용한다. 


* ResultSet에서 LONG VARCHAR 타입 읽어오기

▷ SQL의 LONGVARCHAR 타입을 대량의 텍스트 데이터를 저장할 때 사용한다. 

▷ getCharacterStream() 메소드를 사용한다.

rs = stmt.executeQuery(...);

String data = null;    //스트림으로 읽어온 데이터 저장 변수

java.io.Reader reader = null;    //LONG VARCHAR 데이터를 읽어올 스트림


try{

// 1. getCharacterStream()을 이용해 Reader를 구한다.

reader = rs.getCharacterStream("FILED");


if(reader != null){

// 3. 스트림에서 읽어온 데이터를 저장할 버퍼를 생성

StringBuilder buff = new StringBuilder();

char[] ch = new char[512];

int len = -1;


// 3. 스트림에서 데이터를 읽어와 버퍼에 저장

while( (len = reader.read(ch)) != -1){

buff.append(ch, 0, len)

}


// 4. 버퍼에 저장한 내용을 String으로 변환

data = buff.toString();

}

} catch(IOException e){

//5, IO 관련 처리 중 익셉션 발생 시 처리

} finally {

// 6. Reader를 종료

if(reader != null) try{ reader.close(); } catch(IOException e){}

}

// 7. 데이터 사용


반응형

'WEB > JSP Servlet' 카테고리의 다른 글

서블릿 : 초기화  (0) 2016.11.22
서블릿 : 기본  (0) 2016.11.21
커스텀 태그 : 기초, 태그 파일  (0) 2016.11.05
JDBC : 기초  (0) 2016.11.05
표현언어(EL) 비활성화 방법  (0) 2016.11.05