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