n Driver l java sql Driver implement Driver

  • Slides: 21
Download presentation

드라이버 n Driver 클래스 l 모든 드라이버는 java. sql. Driver를 implement한 Driver 클래스를 제공해야

드라이버 n Driver 클래스 l 모든 드라이버는 java. sql. Driver를 implement한 Driver 클래스를 제공해야 한다. l Driver. Manager 클래스에 등록되며 관리된다. n Driver 클래스 예 l Oracle : oracle. jdbc. driver. Oracle. Driver l My. SQL : org. gjt. mm. mysql. Driver l Mini-SQL : com. imaginary. sql. msql. Msql. Driver l ODBC : sun. jdbc. odbc. Jdbc. Odbc. Driver 4

Driver. Manager(2) n Driver. Manager 클래스 중요 메소드 l public static void register. Driver

Driver. Manager(2) n Driver. Manager 클래스 중요 메소드 l public static void register. Driver (Driver driver) throws SQLException ü 사용 가능한 드라이버 세트에 드라이버를 등록하고, 드라이버가 로딩될 때 무조건 호출된다. l public static Connection get. Connection (String url, String user, String pw) throws SQLExcpetion ü 클라이언트가 Connection 을 구할 때 호출한다. Driver. Manager 는 드라이버 세트에서 사용되는 해당 드라이버를 찾은 후에 그 드라이버의 Connection 객체를 리턴한다. 6

Driver. Manager와 데이터베이스 연결(1) n Driver. Manager 를 이용하여 데이터베이스에 연결하는 순서 l 1)

Driver. Manager와 데이터베이스 연결(1) n Driver. Manager 를 이용하여 데이터베이스에 연결하는 순서 l 1) JDBC 드라이버 로딩 ü Class. for. Name(“JDBC 드라이버명”); 또는 ü Driver. Manager. register. Driver(“JDBC 드라이버명”); l 2) JDBC 드라이버를 이용한 데이터베이스 연결 ü Connection con = Driver. Manager. get. Connection (“JDBC URL”, ” 사용자 계정”, “비밀번호”); – JDBC URL = jdbc: <subprotocol>: <subname> 7

Driver. Manager와 데이터베이스연결(2) n 예 : 오라클의 경우 l 1) JDBC 드라이버 로딩 ü

Driver. Manager와 데이터베이스연결(2) n 예 : 오라클의 경우 l 1) JDBC 드라이버 로딩 ü Class. for. Name(“oracle. jdbc. driver. Oracle. Driver”); ü 또는 Driver. Manager. register. Driver(neworacle. jdbc. driver. Oracle. Driver()); l 2) JDBC 드라이버를 이용한 데이터베이스 연결 ü thin 드라이버의 경우 ü Connection con = Driver. Manager. get. Connection (“jdbc: oracle: thin: @server. Name: 1521: SID”, ” 사용자 계정”, “비밀번호”); – server. Name : 예) db. sd. ac. kr – SID : 예) ora 9 8

Statement 객체로 SQL 명령문 실행(1) n Statement 역할 : SQL 구문의 실행 n 생성

Statement 객체로 SQL 명령문 실행(1) n Statement 역할 : SQL 구문의 실행 n 생성 l 전진과 읽기만 가능한 Result. Set 생성 ü Statement stmt = con. create. Statement(); l 스크롤과 수정 가능한 Result. Set 생성 ü create. Statment 내에 옵션 지정 – 스크롤 옵션 » TYPE_FORWARD_ONLY(디폴트) » TYPE_SCROLL_INSENSITIVE » TYPE_SCROLL_SENSITIVE – 동시성 옵션(다른 트랜잭션의 수정에 영향을 받는지 여부) » CONCUR_READ_ONLY » CONCUR_UPDATABLE : 10

Statement 객체로 SQL 명령 문 실행(2) n 실행 l Result. Set execute. Query(String sql)

Statement 객체로 SQL 명령 문 실행(2) n 실행 l Result. Set execute. Query(String sql) ü SQL 문 중 select문만 가능 ü select를 통해 추출한 값들을 Resultset형태로 리턴 ü예 Statement stmt = con. create. Statement(); String sql = “select * from enroll”; Result. Set rs = stmt. execute. Query(sql); l Int execute. Update(String sql) ü SQL 문 중 select문 이외의 SQL 명령문 ü 명령문이 영향을 끼친 row 개수(변경 개수)를 리턴 ü예 Statement stmt = con. create. Statement(); String sql = “insert into enroll (s_id, c_id_no, e_year, e_semester) values (‘ 123’, ’C 400’, 3, 2004, 1)”; Int res = stmt. execute. Update(sql); 11

Statement 객체로 SQL 명령 문 실행(3) n 실행(Cont’d) l boolean execute(String sql) ü 모든

Statement 객체로 SQL 명령 문 실행(3) n 실행(Cont’d) l boolean execute(String sql) ü 모든 종류의 SQL문 ü 첫번째 결과가 Result. Set이면 true, 결과가 없거나 변경 개수이면 false 리턴 ü 실행 후, 결과에 따라 다음 명령문 추가 실행 – Result. Set get. Result. Set() – Int get. Update. Count() ü 예 if (stmt. execute(query) == false) { int num = stmt. get. Update. Count(); System. out. println(num + “ rows affected”); } else { Result. Set rs = stmt. get. Result. Set(); /* print rs */ } 12

Result. Set 객체로 데이터 가져 오기(2) n 명시된 데이터 타입으로 컬럼 데이터 가져오기 l

Result. Set 객체로 데이터 가져 오기(2) n 명시된 데이터 타입으로 컬럼 데이터 가져오기 l xxx get. Xxx(String column. Name) ü 예: result. Set. get. Int(“Store. ID”) l xxx get. Xxx(int column. Position) ü 이 때, column. Position값은 0이 아니라 1로 시작 ü 예 : result. Set. get. Int(1); 14

Result. Set 객체로 데이터 가져오기(4) n 자바 데이터 타입과 SQL 데이터 타입의 맵핑 SQL

Result. Set 객체로 데이터 가져오기(4) n 자바 데이터 타입과 SQL 데이터 타입의 맵핑 SQL 타입 자바 타입 BIT boolean DATE java. sql. Date TINYINT byte TIME java. sql. Time SMALLINT short TIMESTAMP java. sql. Timestamp INTEGER int BINARY byte[] BIGINT long VARBINARY byte[] REAL float LONGVARBINARY byte[] FLOAT double BLOB java. sql. Blob DOUBLE double CLOB java. sql. Clob NUMERIC java. math. Big. Decimal ARRAY java. sql. Array CHAR java. math. Big. Decimal REF java. sql. Ref VARCHAR java. lang. String STRUCT java. sql. Struct LOGVARCHAR java. lang. String 16

JDBC Example (1) import java. sql. *; import oracle. jdbc. driver. *; class JDBCVersion

JDBC Example (1) import java. sql. *; import oracle. jdbc. driver. *; class JDBCVersion { public static void main (String args[]) throws SQLException { // Load the Oracle JDBC driver Driver. Manager. register. Driver (new oracle. jdbc. driver. Oracle. Driver()); Connection conn = Driver. Manager. get. Connection ("jdbc: oracle: thin: @localhost: 1521: oraclets", "scott", "tiger"); // // Create Oracle Database. Meta. Data object Database. Meta. Data meta = conn. get. Meta. Data(); // gets driver info: System. out. println("JDBC driver version is " + meta. get. Driver. Version()); } } 19

JDBC Example (2) import java. sql. *; import java. io. *; class SQLExample {

JDBC Example (2) import java. sql. *; import java. io. *; class SQLExample { public static void main(String[] args) throws SQLException, IOException { System. out. println("Hello World!"); Connection my. Conn = null; Statement stmt = null, my. SQL = null; Driver. Manager. register. Driver (new oracle. jdbc. driver. Oracle. Driver()); 20

my. Conn = Driver. Manager. get. Connection ("jdbc: oracle: thin: @localhost: 1521: oraclets", "scott",

my. Conn = Driver. Manager. get. Connection ("jdbc: oracle: thin: @localhost: 1521: oraclets", "scott", "tiger"); stmt = my. Conn. create. Statement(); Result. Set my. Result. Set = stmt. execute. Query("select ename from emp"); while ( my. Result. Set. next() ) System. out. println(my. Result. Set. get. String(1)); stmt. close(); my. Conn. close(); } } 21