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