JDBC

VenusIM·2022년 2월 4일
0

BitCamp 수료

목록 보기
3/4

[Java Database Connectivity]

DBMS에 종속적인 개발이 아닌 java.sql.*에서 지원하는 Interface를 통해 .java와 data를 주고 받고, DBMS 제조사에서 제공해주는 OracleDriver(다운 받은Driver 경로.oracle.jdbc.driver.oracledriver)들을 통해 DBMS와 java.sql API의 Interface와 연결해준다

Third Part Library 인 JDBC

java 이외의 프로그램을 사용하기 위한 API, 사용하기 위해서는 해당 프로그램에서 제공하는 .jar파일을 class path에 학습 시킴으로서 불러올 수 있게 해준다.
우리가 사용하는 DBMS는 Oracle에서 제공하는 10g Version을 이용한다.

JDBC 절차

1. JDBC DRIVER 로딩

Class.forName("oracle.jdbc.driver.OracleDriver");

2. Connection

사용자가 login(id/pw), DBMS가 설치되어 있는 pc의 ip등을 입력 하는 것을 추상화 캡슐 화 한 Interface이다.

import java.sql.Connection;
    
OracleDriver od = new OracleDriver();
Properties info = new Properties();
info.put("user",user);
info.put("passoword",pwd);
Connection con = od.connect(url, info)
    
======================개선========================
    
Connection con = DriverManager.getConnection(url,user,pwd);
    
url
    
    
String url "jdbc:         // jdbc
    						oracle:       // DBMS Name
    						thin:         // 하단 설명
    						@127.0.0.1:   // 자신의 pc ip를 가르키는 고정 주소 local host
    						1521:         // 오라클 기본포트번호인 1521
    						xe            // dbms설정 이름
    
THIN  => 순수하게 자바 패키지(클래스들)만으로 바로 DB와 연결,   
범용성이 높다, 상대적으로 OCI보다 속도가 느리다.
    
OCI   => Oracle Call Interface
.DLL과 .SO 파일과 같이 특정 OS 내에서만 돌아가는 Native Module을 통해 DB에 연결한다.
    
Registered ports(1024번부터 49151번포트)
ICANN산하기관인 IANA에 등록된 포트번호들이다. 
등록은 되어있지만 Well-known ports들 처럼 직접 통제당하진 않은 포트번호들이다.
가장 유명한 포트번호로는 Mysql 기본포트번호인 3306 오라클 기본포트번호인 1521등이 있다.
웹프레임워크인 Django8000, Flask5000을 개발자서버 기본포트로 지정해두고있다.

3-1. Statement

  • Prompt 세팅
	Statement stmt = con.createStatement(); // Statement를 return해 준다.
  • QUERY 날리기
	stmt.executeQuery("SELECT ~ FROM ~") // ResultSet을 return해 준다.

위의 Statement Interface를 사용할 경우 DBMS에서 parsing, compile, run과정을
QUERY를 날릴 때 마다 계속해서 반복하여 비 효율적이다.

3-2 Prepared Statement

⇒ Statement Interface를 확장한 Interface로 유용한 기능이 추가된 Interface이다.

  • Prompt 세팅 / QUERY 세팅
    PreparedStatement pstmt = con.preparedStatement("SELECT ~ FROM ~(?) ~(?)~");
    pstmt.setXXX(index,value); 
    pstmt.setXXX(index,value);
    //Information Hiding 되어 있기 때문에 setter를 통해 값을 입력한다.
    					.
    					.
    					.
    
    //==> parsing과 compile과정을 미리 준비해 주어 값만 받는 대로 run을 하여 효율적이다.

동일한 QUERY를 날릴 때는 Prepared Statement가 효율적이나,
다른 QUERY를 날릴 때는 두 가지 모두 비슷하다.
유지 보수가 좋고, 개발자의 실수를 줄여주며, 우리에게 익숙한 setter, getter를 사용하기에 Prepared Statement 를 주로 사용한다.

4. Result Set

  • STATEMENT의 경우
    ResultSet rs = stmt.executeQuery("SELECT ~ FROM ~") 
    // executeQuery()은 ResultSet을 return해 준다.
  • Prepared Statement
    ResultSet rs = pstmt.executeQuery();
    // run 단계,  executeQuery()은 ResultSet을 return해 준다.

    while(rs.next()) 
    // ResultSet의 next() method는 boolean을 return해 주며,
    // 커서를 현재 위치에서 한 행 앞으로 이동시킨다. 다음 행이 없을 경우 false를 return
    SOP(rs.getXXX(index) + rs.getXXX(index) + ....);
    // ResultSet의 결과 값이 Information Hiding 되어 있기 때문에 getter를 통해
    // 값을 받아온다.
profile
주니어 개발자

0개의 댓글