jdbc

40
JDBC

Upload: lei

Post on 05-Jan-2016

32 views

Category:

Documents


2 download

DESCRIPTION

JDBC. JDBC 란 ?. JDBC 서버 언어를 이용한 응용 프로그램들이 DBMCS 에 연결하고 데이터를 검색할 수 있는 서버 패키지 JDBC 는 함수 호출용 SQL 인터페이스 JDBC 의 장점 개방성 배우고 사용하기가 쉽다. JDBC 구성. 4 요소 응용 프로그램 , 드라이버 매니저 , 드라이버 , DBMS 응용 프로그램 응용 프로그램은 JDBC 메소드를 호출해서 SQL 문은 DBMS 에 보내고 원하는 데이터를 검색 드라이버 매니저 응용 프로그램이 요청하는 드라이버를 로드 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: JDBC

JDBC

Page 2: JDBC

1장. 데이타베이스 개론- 2 -오라클중심의 SQL 배움터

JDBC 란 ?

JDBC 서버 언어를 이용한 응용 프로그램들이 DBMCS 에 연결하고

데이터를 검색할 수 있는 서버 패키지 JDBC 는 함수 호출용 SQL 인터페이스

JDBC 의 장점 개방성 배우고 사용하기가 쉽다 .

Page 3: JDBC

1장. 데이타베이스 개론- 3 -오라클중심의 SQL 배움터

JDBC 구성

4 요소 응용 프로그램 , 드라이버 매니저 , 드라이버 , DBMS

응용 프로그램• 응용 프로그램은 JDBC 메소드를 호출해서 SQL 문은 DBMS 에 보내고

원하는 데이터를 검색 드라이버 매니저

• 응용 프로그램이 요청하는 드라이버를 로드 드라이버

• 드라이버는 데이터베이스에 SQL 문을 전송하기도 하고 , 검색 결과를 응용 프로그램에 전달하기도 한다 .

DBMS• 데이터가 저장되어 있는 장소

Page 4: JDBC

1장. 데이타베이스 개론- 4 -오라클중심의 SQL 배움터

ORACLE DBMS

오라클은 국내에서 가장 널리 사용되는 DBMS 로서 업체 및 관공서 , 학교 등에서 많이 사용 모든 플랫폼 버전 제공 가격이 비쌈

오라클에서는 JDBC Thin 과 JDBC OCI 두 가지 타입의 JDBC 를 제공 JDBC Thin 은 자바로 작성된 네트워크 드라이버이고 JDBC OCI

는 네이티브 메소드로 작성된 드라이버 JDBC OCI 는 네이티브 메소드로 작성되었기 때문에

애플릿시에는 사용할 수 없음

Page 5: JDBC

1장. 데이타베이스 개론- 5 -오라클중심의 SQL 배움터

JDBC 구현

Page 6: JDBC

1장. 데이타베이스 개론- 6 -오라클중심의 SQL 배움터

JDBC 드라이버

JDBC 드라이버 매니저는 서버 응용 프로그램이 사용하는 데이타베이스에 맞는

드라이버를 찾아서 JDBC 를 초기화 함 JDBC 를 이용하여 데이타베이스에 SQL 문을 전송

그 결과는 응용 프로그램에 전달하는 역할을 하는 JDBC 드라이버는 4 가지 유형

다음 사이트를 방문하면 JDBC 드라이버를 제공하는 업체의 목록을 확인할 수 있음 http://java.sun.com/products/jdbc/industry.html 드라이버 찾기 http://servlet.java.sun.com/products/jdbc/drivers

Page 7: JDBC

1장. 데이타베이스 개론- 7 -오라클중심의 SQL 배움터

JDBC API

JDBC API 서버 응용 프로그램에서 데이터베이스를 연결하고 데이터를 제어하는 일련의 인터페이스와 클래스

• 관련 인터페이스와 클래스들은 JDK 의 “ java.sql” 패키지에 정의• JDBC 2.0 표준 이외의 몇가지 기능을 구현한 클래스들이 “ javax.sql”

패키지에 포함되어 있음

Page 8: JDBC

1장. 데이타베이스 개론- 8 -오라클중심의 SQL 배움터

JDBC 를 이용한 프로그램의 기본 작업

먼저 사용하는 드라이버를 드라이버 매니저에 등록 Class.forName() 메소드를 사용 Driver 객체를 생성함으로써 registerDriver() 메소드를 자동으로 호출

드라이버 메니저를 이용하여 데이터베이스를 연결 드라이버와 관련된 작업을 하는 클래스는 DriverManager 이고 DriverManager 를 통해서 만들어진 Connect 클래스의 객체를 이용하여

Statement 객체를 만듦 . SQL 문을 서버에 전송

Statement 객체를 이용하여 SQL 문을 서버에 전송하고 SQL 문을 실행

서버는 SQL 결과를 클라이언트에 보내면 이제 그 결과를 가지고 원하는 작업을 하게 됨 . 결과를 ResultSet 이라는 객체를 통해서 받게 됨

DB 와 연결된 객체 종료

Page 9: JDBC

1장. 데이타베이스 개론- 9 -오라클중심의 SQL 배움터

JDBC 절차

드라이버 로드 Driver drv = new sun.jdbc.odbc.JdbcOdbcDriver(); DiverManager.registerDriver(drv);

데이터베이스 연결 Connection con = DriverManager.getConnection(URL);

질의 문장 생성

• Statement stmt = con.createStatement(); 질의

• Stmt.execute(“create table weater(city varchar(80), lo integer, hi integer, day date);”); ResultSet rs = stmt.executeQuery(“select * from weather”);

문장 닫기 stmt.close();

연결 닫기 con.close();

Page 10: JDBC

1장. 데이타베이스 개론- 10 -오라클중심의 SQL 배움터

드라이버 리스트에서 드라이버 등록

드라이버 매니저 메소드는 DriverManager.registerDriver() 호출 다른 방법으로는 Class.forName() 메소드를 이용하거나

클래스의 객체를 정의하여 드라이버를 로드할 때 자동으로 호출할 수 있음

3 가지 방법 Class.forName() Driver 객체를 생성함으로써 registerDriver() 메소드를 자동으로

호출 registerDriver() 메소드를 이용하여 드라이버를 등록함

Page 11: JDBC

1장. 데이타베이스 개론- 11 -오라클중심의 SQL 배움터

방법 1

Class.forName() 메소드릴 사용 registerDriver() 메소드를 자동으로 호출함 . Class.forName( 드라이버 이름 );

예 Driver drv = Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

• //JDBC-ODBC 드라이버

Driver drv = Class.forName(“org.gjt.mm.mysql.Driver”);• //MySql 드라이버

Driver drv = Class.forName(“oracle.jdbc.driver.OracleDriver”);• //Oracle Thin 드라이버

Driver drv = Class.forName(“com.inet.tds.TdsDriver”);• //SQL Server7 의 Spinta 드라이버

Driver drv = Class.forName(“con.internetcds.jdbc.tds.Driver”);• //SQL Server7 의 FreeTds 드라이버

Page 12: JDBC

1장. 데이타베이스 개론- 12 -오라클중심의 SQL 배움터

방법 2

Driver 객체를 생성함으로써 registerDriver() 메소드를 자동으로 호출함 new 드라이버이름 () 또는 Driver 객체 이름 = (Driver) new 드라이버이름 ();

예 1 ) Driver drv = (Driver) new postgress95.PGDriver();

New MsqlDriver();

Page 13: JDBC

1장. 데이타베이스 개론- 13 -오라클중심의 SQL 배움터

방법 3

registerDriver() 메소드를 이용하여 드라이버를 등록함 DriverManager.registerDriver(new 드라이버이름 ());

예 1 DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver

()); //for Oracle10G 예 2

Driver drv = new sun.jdbc.odbc.JdbcOdbcDriver(); DriverManager.registerDriver(drv);

Page 14: JDBC

1장. 데이타베이스 개론- 14 -오라클중심의 SQL 배움터

Connection

인터페이스 Connection DriverManger 클래스의 getConnection() 메소드를 실햄함으로서

정의 되며 데이타베이스와 연결된 세션 (session) 역할을 함 이 세션을 이용하여 데이타베이스에 SQL 을 전송하고 그 결과를

얻음

DriverManager 클래스의 getConnection() 메소드를 이용하여 Connection 객체를 정의하는 방법 JDBC URL 만을 지정함

• Connection 객체를 DriverManager.getConnection(JDBC_URL); JDBC URL 과 연결할 데이터베이스의 사용자 ID 와 암호를 지정

• Connection 객체 이름 =• DriverManager.getConnection(JDBC_URL, 사용자 ID, 암호 );

Page 15: JDBC

1장. 데이타베이스 개론- 15 -오라클중심의 SQL 배움터

Connection

오라클 import java.sql.*;

DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); //jdbc:oracle:thin 은 드라이버 , @ime114-15 은 컴퓨터 주소 , 15

21 은 포트 번호 String dbURL = “jdbc:oracle:thin:@//ime114-15:1521/orcl”; Connection con = DriverManager.getConnection(dbURL, “me”, “12

34”);

Page 16: JDBC

1장. 데이타베이스 개론- 16 -오라클중심의 SQL 배움터

JDBC URL 형태의 문법

jdbc:<subprotocol>:<subname> jdbc 란 JDBC 프로토콜을 의미

<subprotocol> subprotocal 은 사용될 JDBC 드라이버 이름이나 데이타베이스를

연결할 때 사용되는 메커니즘 이름 <subname>

subname 부분은 사용될 데이터베이스 이름• odbc 경우 지정된 DSN( 데이터원본 이름 )

subname 은 subprotocol 에 따라 변경될 수 있으며 드라이버를 작성하는 곳의 문법에 따라 subsubname 을 가질 수 있다 .

jdbc url 의 subname 형태• //hostname:port/subsubname• Mysql 경우

– //localhost:3306/bbs– 데이터베이스 이름 bbs

Page 17: JDBC

1장. 데이타베이스 개론- 17 -오라클중심의 SQL 배움터

ResultSet

getXXX() 메소드는 argument 로 열의 이름이나 열의 순서를 사용할 수 있다 .

열의 순서는 1 부터 시작 String s = rs.getString(“b”); String s = rs.getString(2);

Page 18: JDBC

1장. 데이타베이스 개론- 18 -오라클중심의 SQL 배움터

SQL 문 전송하기

Statement 생성 생성된 Statement 객체가 데이터베이스에게 SQL 문을

전송하는 방법 : 3 가지

방법 1) executeQuery() ResultSet 객체를 반환하는 SQL 문

방법 2) executeUpdate() DB 수정 SQL

방법 3) execute() SQL 문이 여러 개의 ResultSet 을 반환하거나 여러 개의 갱신된

로부 (row) 개수를 반환하는 경우 .

Page 19: JDBC

1장. 데이타베이스 개론- 19 -오라클중심의 SQL 배움터

오라클 예제

Page 20: JDBC

1장. 데이타베이스 개론- 20 -오라클중심의 SQL 배움터

실습

JDBC 드라이버를 이용하여 STUDENT 테이블의 모든 정보를 가져오는 SQL 문을 수행하는 자바 프로그램을 작성하시오

SELECT * FROM STUDENT

Page 21: JDBC

1장. 데이타베이스 개론- 21 -오라클중심의 SQL 배움터

executeUpdate() 의 반환 값

정수레코드 개수

INSERT, UPDATE, DELETE의 경우 0

CREATE, DROP, 그리고 ALTER 따라서 , executeUpdate() 가 0 을 반환

SQL 문에 따라서 의미가 다름 .

Page 22: JDBC

1장. 데이타베이스 개론- 22 -오라클중심의 SQL 배움터

executeUpdate() 의 반환 값

Page 23: JDBC

1장. 데이타베이스 개론- 23 -오라클중심의 SQL 배움터

execute()

public boolean execute(String sql)복수의 결과를 돌려줄 가능성이 있는 SQL 문장첫번째 결과가 ResultSet 객체의 경우는 true, 갱신 카운트 또느

결과가 없는 경우 false Resultset 과 갱신된 레코드 개스를 함게 반환하는 SQL 문인

경우에도 해당 일반적으로 저장 포로시져를 실행하거나 전송하는 SQL 문을 코딩시에 예측할 수 없는 경우 사용 .

Page 24: JDBC

1장. 데이타베이스 개론- 24 -오라클중심의 SQL 배움터

결과 검색

ResultSet 클래스는 SQL 문장의 조건을 만족하는 데이터의 행들을 가지고 있으면서 , 일련의 getXXX() 메소드를 이용해서 현재 행에 포함된 데이터를 접근할 수 있는 기능을 제공

Page 25: JDBC

1장. 데이타베이스 개론- 25 -오라클중심의 SQL 배움터

ResultSet

executeQuery() 의 결과 SELECT 문의 executeQuery() 메서드를 실행한 다음 반환되는 레코드 셋을 저장함

레코드 셋은 데이터베이스 테이블 형태라고 생각할 수 있음레코드 셋은 집합이므로 공집합일 수 있음

next() 메소드 ResultSet 으로 부터 레코드를 읽어오기 위해서 사용 next() 메소드는 읽어올 레코드가 있으면 true 없으면 false 를 반환

Page 26: JDBC

1장. 데이타베이스 개론- 26 -오라클중심의 SQL 배움터

ResultSet

ResultSet 을 이용해서 결과 집합에서 현재 행의 각 열의 값을 얻어오는 예제 Connect con = DriverManager.getConnection(); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(“select a,b,c from Table1”); while(rs.next()){

• int i = rs.getint(“a”);• String s = rs.getString(“b”);• float f = rs.getFloat(“c”);• System.out.println(“ROW = “ + i+ “”+s+””+f);

}각 열의 데이터 타입에 따라서 getXXX() 메소드를 호출 getXXX() 메소드에서 XXX부분은 해당 열의 데이터타입

Page 27: JDBC

1장. 데이타베이스 개론- 27 -오라클중심의 SQL 배움터

필드 값 가져오기

커서의 이동 next() 메소드는 ResultSet 의 커서 ( 현재 레코드를 가리키는

포인터 ) 를 이동 시킬 뿐이고 , 커서가 가리키고 있는 현재 레코드로부터 (Column) 값을 읽어 오려면 필드 (Column)값의 유형에 따라서 getInt(), getString(), getDate(), getObject() 등을 사용함

ResultSet 의 포인터 초기 ResultSet 의 포인터는 첫 레코드 이전을 가리키고 있기

때문에 ResultSet 으로 부터 처음 레코드를 가져올 때 부터 next() 를 사용하여 첫 레코드 포인터를 이동시켜야 함 .

레코드 읽기 getXXX()

Page 28: JDBC

1장. 데이타베이스 개론- 28 -오라클중심의 SQL 배움터

ResultSet

Page 29: JDBC

1장. 데이타베이스 개론- 29 -오라클중심의 SQL 배움터

ResultSet

Page 30: JDBC

1장. 데이타베이스 개론- 30 -오라클중심의 SQL 배움터

JDBC 객체소멸

객체 소멸 데이타베이스를 다루기 위해 생성한 JDBC 객체 (Connection, St

atement, PreparedStatement, ResultSet) 는 사용이 끝난 다음 소멸 시킴

객체를 소멸 시킨다는 의미는 객체가 사용한 메모리를 시스템에 반환함으로써 더 이상 그 객체를 참조할 수 없도록 하는 것

Close 메소드 JDBC 객체를 소멸하려면 각 객체에 close() 메소드를 실행시킴 Statement 객체 .close(); Connection 객체 .close();

Page 31: JDBC

1장. 데이타베이스 개론- 31 -오라클중심의 SQL 배움터

JDBC 의 주요 클래스

Page 32: JDBC

1장. 데이타베이스 개론- 32 -오라클중심의 SQL 배움터

PreparedStatement 클래스

Statement 로 부터 상속 받은 객체 ( PreparedStatement 는 이미 컴파일 된 SQL 문을 포함함으로써 S

QL 을 미리 준비하도록 하는 것특정 형태의 SQL 문들을 전송하기 위한 클래스

특징 SQL 문의 조건에 사용될 값이나 필드가 상황에 따라서

결정되어질때 , SQL 문에 매개 변수를 포함하고 , 이후에 그 매개변수에 값을 지정함으로써 SQL 문을 완성

PreparedStatement 객체는 사전에 컴파일 되기 때문에 Statement 객체 보다 실행 속도가 빠르며 여러 번 수행되어질 SQL 문들의 효율을 높이기 위해서도 사용됨 .

Page 33: JDBC

1장. 데이타베이스 개론- 33 -오라클중심의 SQL 배움터

PreparedStatement

Statement 자체에 SQL 문을 포함하고 있지 않음 Parameter 로 SQL 문을 받음

PreparedStatement 이미 컴파일된 SQL 문을 포함하고 있음 . 따라서 , executeXXX() 메소드에서 인자로 SQL 문을 지정하지 않음

Page 34: JDBC

1장. 데이타베이스 개론- 34 -오라클중심의 SQL 배움터

PreparedStatement

예 1) Connection con = DriverManager.getConnection(“jdbc.odbc.mysq

l”); PreparedStatement ps = con.preparedStatement( “SELECT * FRO

M T1 WHERE zip = ?”);

Page 35: JDBC

1장. 데이타베이스 개론- 35 -오라클중심의 SQL 배움터

SQL 문의 매개 변수 설정

매개변수 설정 SQL 문에서 사용한 매개 변수 값을 설정하려면 , setXXX()

메소드를 이용 . Ex) 매게 변수에 지정할 데이터가 String 이면 , setString() 이용

setXXX() 2개의 인자

• 설정될 매개변수의 순서 번호• 매개 변수 설정 값

Ex) ps.setString(1, “15043);

Page 36: JDBC

1장. 데이타베이스 개론- 36 -오라클중심의 SQL 배움터

PreparedStatement

Connect con = DriverManager.getConnect(..); PreparedStatement ps = con.preparedStatement(“UPATE

T SET si =? WHERE zip = ? “); ps.setString( 1, “seoul”); for(int I =0; I < 10 ; i++){

Ps.setInt(2, i); Int rowCount = ps.executeUpdate();

}

Page 37: JDBC

1장. 데이타베이스 개론- 37 -오라클중심의 SQL 배움터

callable statement 란 ? callable statement 를 이용한 자바 응용 프로그램 작성

Page 38: JDBC

1장. 데이타베이스 개론- 38 -오라클중심의 SQL 배움터

DB 에 Procedure 만들기

SQL* Plus 에서create or replace procedure increase(x in number, y in number) is PHEIGHT number;

beginselect height into PHEIGHTfrom studentwhere idnum = x;PHEIGHT := PHEIGHT+y;update studentset height = PHEIGHTwhere idnum = x;end;/

Page 39: JDBC

1장. 데이타베이스 개론- 39 -오라클중심의 SQL 배움터

실습

PreparedStatement 를 이용하여 , 학번 (STUDNO) 이 10101 과 20101 학생의 이름을 출력하시오 .

Page 40: JDBC

1장. 데이타베이스 개론- 40 -오라클중심의 SQL 배움터

SQL EX