jdbc
DESCRIPTION
JDBC. JDBC 란 ?. JDBC 서버 언어를 이용한 응용 프로그램들이 DBMCS 에 연결하고 데이터를 검색할 수 있는 서버 패키지 JDBC 는 함수 호출용 SQL 인터페이스 JDBC 의 장점 개방성 배우고 사용하기가 쉽다. JDBC 구성. 4 요소 응용 프로그램 , 드라이버 매니저 , 드라이버 , DBMS 응용 프로그램 응용 프로그램은 JDBC 메소드를 호출해서 SQL 문은 DBMS 에 보내고 원하는 데이터를 검색 드라이버 매니저 응용 프로그램이 요청하는 드라이버를 로드 - PowerPoint PPT PresentationTRANSCRIPT
JDBC
1장. 데이타베이스 개론- 2 -오라클중심의 SQL 배움터
JDBC 란 ?
JDBC 서버 언어를 이용한 응용 프로그램들이 DBMCS 에 연결하고
데이터를 검색할 수 있는 서버 패키지 JDBC 는 함수 호출용 SQL 인터페이스
JDBC 의 장점 개방성 배우고 사용하기가 쉽다 .
1장. 데이타베이스 개론- 3 -오라클중심의 SQL 배움터
JDBC 구성
4 요소 응용 프로그램 , 드라이버 매니저 , 드라이버 , DBMS
응용 프로그램• 응용 프로그램은 JDBC 메소드를 호출해서 SQL 문은 DBMS 에 보내고
원하는 데이터를 검색 드라이버 매니저
• 응용 프로그램이 요청하는 드라이버를 로드 드라이버
• 드라이버는 데이터베이스에 SQL 문을 전송하기도 하고 , 검색 결과를 응용 프로그램에 전달하기도 한다 .
DBMS• 데이터가 저장되어 있는 장소
1장. 데이타베이스 개론- 4 -오라클중심의 SQL 배움터
ORACLE DBMS
오라클은 국내에서 가장 널리 사용되는 DBMS 로서 업체 및 관공서 , 학교 등에서 많이 사용 모든 플랫폼 버전 제공 가격이 비쌈
오라클에서는 JDBC Thin 과 JDBC OCI 두 가지 타입의 JDBC 를 제공 JDBC Thin 은 자바로 작성된 네트워크 드라이버이고 JDBC OCI
는 네이티브 메소드로 작성된 드라이버 JDBC OCI 는 네이티브 메소드로 작성되었기 때문에
애플릿시에는 사용할 수 없음
1장. 데이타베이스 개론- 5 -오라클중심의 SQL 배움터
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
1장. 데이타베이스 개론- 7 -오라클중심의 SQL 배움터
JDBC API
JDBC API 서버 응용 프로그램에서 데이터베이스를 연결하고 데이터를 제어하는 일련의 인터페이스와 클래스
• 관련 인터페이스와 클래스들은 JDK 의 “ java.sql” 패키지에 정의• JDBC 2.0 표준 이외의 몇가지 기능을 구현한 클래스들이 “ javax.sql”
패키지에 포함되어 있음
1장. 데이타베이스 개론- 8 -오라클중심의 SQL 배움터
JDBC 를 이용한 프로그램의 기본 작업
먼저 사용하는 드라이버를 드라이버 매니저에 등록 Class.forName() 메소드를 사용 Driver 객체를 생성함으로써 registerDriver() 메소드를 자동으로 호출
드라이버 메니저를 이용하여 데이터베이스를 연결 드라이버와 관련된 작업을 하는 클래스는 DriverManager 이고 DriverManager 를 통해서 만들어진 Connect 클래스의 객체를 이용하여
Statement 객체를 만듦 . SQL 문을 서버에 전송
Statement 객체를 이용하여 SQL 문을 서버에 전송하고 SQL 문을 실행
서버는 SQL 결과를 클라이언트에 보내면 이제 그 결과를 가지고 원하는 작업을 하게 됨 . 결과를 ResultSet 이라는 객체를 통해서 받게 됨
DB 와 연결된 객체 종료
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();
1장. 데이타베이스 개론- 10 -오라클중심의 SQL 배움터
드라이버 리스트에서 드라이버 등록
드라이버 매니저 메소드는 DriverManager.registerDriver() 호출 다른 방법으로는 Class.forName() 메소드를 이용하거나
클래스의 객체를 정의하여 드라이버를 로드할 때 자동으로 호출할 수 있음
3 가지 방법 Class.forName() Driver 객체를 생성함으로써 registerDriver() 메소드를 자동으로
호출 registerDriver() 메소드를 이용하여 드라이버를 등록함
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 드라이버
1장. 데이타베이스 개론- 12 -오라클중심의 SQL 배움터
방법 2
Driver 객체를 생성함으로써 registerDriver() 메소드를 자동으로 호출함 new 드라이버이름 () 또는 Driver 객체 이름 = (Driver) new 드라이버이름 ();
예 1 ) Driver drv = (Driver) new postgress95.PGDriver();
New MsqlDriver();
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);
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, 암호 );
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”);
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
1장. 데이타베이스 개론- 17 -오라클중심의 SQL 배움터
ResultSet
getXXX() 메소드는 argument 로 열의 이름이나 열의 순서를 사용할 수 있다 .
열의 순서는 1 부터 시작 String s = rs.getString(“b”); String s = rs.getString(2);
1장. 데이타베이스 개론- 18 -오라클중심의 SQL 배움터
SQL 문 전송하기
Statement 생성 생성된 Statement 객체가 데이터베이스에게 SQL 문을
전송하는 방법 : 3 가지
방법 1) executeQuery() ResultSet 객체를 반환하는 SQL 문
방법 2) executeUpdate() DB 수정 SQL
방법 3) execute() SQL 문이 여러 개의 ResultSet 을 반환하거나 여러 개의 갱신된
로부 (row) 개수를 반환하는 경우 .
1장. 데이타베이스 개론- 19 -오라클중심의 SQL 배움터
오라클 예제
1장. 데이타베이스 개론- 20 -오라클중심의 SQL 배움터
실습
JDBC 드라이버를 이용하여 STUDENT 테이블의 모든 정보를 가져오는 SQL 문을 수행하는 자바 프로그램을 작성하시오
SELECT * FROM STUDENT
1장. 데이타베이스 개론- 21 -오라클중심의 SQL 배움터
executeUpdate() 의 반환 값
정수레코드 개수
INSERT, UPDATE, DELETE의 경우 0
CREATE, DROP, 그리고 ALTER 따라서 , executeUpdate() 가 0 을 반환
SQL 문에 따라서 의미가 다름 .
1장. 데이타베이스 개론- 22 -오라클중심의 SQL 배움터
executeUpdate() 의 반환 값
1장. 데이타베이스 개론- 23 -오라클중심의 SQL 배움터
execute()
public boolean execute(String sql)복수의 결과를 돌려줄 가능성이 있는 SQL 문장첫번째 결과가 ResultSet 객체의 경우는 true, 갱신 카운트 또느
결과가 없는 경우 false Resultset 과 갱신된 레코드 개스를 함게 반환하는 SQL 문인
경우에도 해당 일반적으로 저장 포로시져를 실행하거나 전송하는 SQL 문을 코딩시에 예측할 수 없는 경우 사용 .
1장. 데이타베이스 개론- 24 -오라클중심의 SQL 배움터
결과 검색
ResultSet 클래스는 SQL 문장의 조건을 만족하는 데이터의 행들을 가지고 있으면서 , 일련의 getXXX() 메소드를 이용해서 현재 행에 포함된 데이터를 접근할 수 있는 기능을 제공
1장. 데이타베이스 개론- 25 -오라클중심의 SQL 배움터
ResultSet
executeQuery() 의 결과 SELECT 문의 executeQuery() 메서드를 실행한 다음 반환되는 레코드 셋을 저장함
레코드 셋은 데이터베이스 테이블 형태라고 생각할 수 있음레코드 셋은 집합이므로 공집합일 수 있음
next() 메소드 ResultSet 으로 부터 레코드를 읽어오기 위해서 사용 next() 메소드는 읽어올 레코드가 있으면 true 없으면 false 를 반환
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부분은 해당 열의 데이터타입
1장. 데이타베이스 개론- 27 -오라클중심의 SQL 배움터
필드 값 가져오기
커서의 이동 next() 메소드는 ResultSet 의 커서 ( 현재 레코드를 가리키는
포인터 ) 를 이동 시킬 뿐이고 , 커서가 가리키고 있는 현재 레코드로부터 (Column) 값을 읽어 오려면 필드 (Column)값의 유형에 따라서 getInt(), getString(), getDate(), getObject() 등을 사용함
ResultSet 의 포인터 초기 ResultSet 의 포인터는 첫 레코드 이전을 가리키고 있기
때문에 ResultSet 으로 부터 처음 레코드를 가져올 때 부터 next() 를 사용하여 첫 레코드 포인터를 이동시켜야 함 .
레코드 읽기 getXXX()
1장. 데이타베이스 개론- 28 -오라클중심의 SQL 배움터
ResultSet
1장. 데이타베이스 개론- 29 -오라클중심의 SQL 배움터
ResultSet
1장. 데이타베이스 개론- 30 -오라클중심의 SQL 배움터
JDBC 객체소멸
객체 소멸 데이타베이스를 다루기 위해 생성한 JDBC 객체 (Connection, St
atement, PreparedStatement, ResultSet) 는 사용이 끝난 다음 소멸 시킴
객체를 소멸 시킨다는 의미는 객체가 사용한 메모리를 시스템에 반환함으로써 더 이상 그 객체를 참조할 수 없도록 하는 것
Close 메소드 JDBC 객체를 소멸하려면 각 객체에 close() 메소드를 실행시킴 Statement 객체 .close(); Connection 객체 .close();
1장. 데이타베이스 개론- 31 -오라클중심의 SQL 배움터
JDBC 의 주요 클래스
1장. 데이타베이스 개론- 32 -오라클중심의 SQL 배움터
PreparedStatement 클래스
Statement 로 부터 상속 받은 객체 ( PreparedStatement 는 이미 컴파일 된 SQL 문을 포함함으로써 S
QL 을 미리 준비하도록 하는 것특정 형태의 SQL 문들을 전송하기 위한 클래스
특징 SQL 문의 조건에 사용될 값이나 필드가 상황에 따라서
결정되어질때 , SQL 문에 매개 변수를 포함하고 , 이후에 그 매개변수에 값을 지정함으로써 SQL 문을 완성
PreparedStatement 객체는 사전에 컴파일 되기 때문에 Statement 객체 보다 실행 속도가 빠르며 여러 번 수행되어질 SQL 문들의 효율을 높이기 위해서도 사용됨 .
1장. 데이타베이스 개론- 33 -오라클중심의 SQL 배움터
PreparedStatement
Statement 자체에 SQL 문을 포함하고 있지 않음 Parameter 로 SQL 문을 받음
PreparedStatement 이미 컴파일된 SQL 문을 포함하고 있음 . 따라서 , executeXXX() 메소드에서 인자로 SQL 문을 지정하지 않음
1장. 데이타베이스 개론- 34 -오라클중심의 SQL 배움터
PreparedStatement
예 1) Connection con = DriverManager.getConnection(“jdbc.odbc.mysq
l”); PreparedStatement ps = con.preparedStatement( “SELECT * FRO
M T1 WHERE zip = ?”);
1장. 데이타베이스 개론- 35 -오라클중심의 SQL 배움터
SQL 문의 매개 변수 설정
매개변수 설정 SQL 문에서 사용한 매개 변수 값을 설정하려면 , setXXX()
메소드를 이용 . Ex) 매게 변수에 지정할 데이터가 String 이면 , setString() 이용
setXXX() 2개의 인자
• 설정될 매개변수의 순서 번호• 매개 변수 설정 값
Ex) ps.setString(1, “15043);
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();
}
1장. 데이타베이스 개론- 37 -오라클중심의 SQL 배움터
callable statement 란 ? callable statement 를 이용한 자바 응용 프로그램 작성
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;/
1장. 데이타베이스 개론- 39 -오라클중심의 SQL 배움터
실습
PreparedStatement 를 이용하여 , 학번 (STUDNO) 이 10101 과 20101 학생의 이름을 출력하시오 .
1장. 데이타베이스 개론- 40 -오라클중심의 SQL 배움터
SQL EX