ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JDBC - Statement, Connection
    비전공자 공부일기/:: DB - SQL 2019. 5. 31. 19:16

    2019. 05. 31 필기

     

    ConnectionFactory => 권장하지 않음

    Statement 인스턴스 => 권장하지 않음

    : SQL 명령을 접속되어 있는 DBMS 서버에 전달하여 실행 결과를 반환하는 인스턴스
    --- 장점 : Statement 인스턴스 하나로 다수의 SQL 명령을 여러 개 전달하여 실행 가능
    --- 단점 : 1) SQL 명령에 변수값을 포함시킬 때 문자열 결합기능 이용 >> 가독성이 떨어져서 유지보수 효율성 떨어짐
                   2) InSQL 해킹 기술에 취약함

    InSQL : 값 대신 SQL 명령을 입력하는 기술(해킹기술)
       >> 즉 입력값은 SQL문과 결합되어 실행되는데, 이 때 결합된 문장의 where문을 무조건 참이 되도록 String을 입력할 수 있어서 사실상 where문을 무시하는 게 된다. >> 모든 정보가 다 출력됨(해킹됨)

     

    PreparedStatement 인스턴스 => 권장!

    --- 장점 : SQL 명령에 변수값을 포함하고자 할 경우 InParameter 이용
                 >> 입력값 대신 SQL 명령 사용 불가 >> InSQL 해킹공격이 불가능(모든 것을 값으로 받기 때문)
    --- 단점 : PreparedStatement 인스턴스 하나로 SQL 명령을 한 개만 전달하여 실행 가능

    Connection.prepareCall(String sql) : 
     => 저장 프로시저를 호출하는 명령이 저장된 CallableStatement 인스턴스를 반환하는 메소드
    [형식] {call 저장프로시저명(value, ...)}
    --- CallableStatement 인스턴스에 저장되는 명령 >> 저장 프로시저를 호출하는 명령
    --- 값 대신 InParameter 사용 가능 >> executeUpdate() 또는 executeQuery() 메소드로 명령 전달

     Statement 및 PreparedStatement

      - Statement 인스턴스 : 완성된 형태의 SQL 명령을 전달하는 인스턴스

        >> 하나의 인스턴스로 다수의 SQL 명령 전달 가능

      - PreparedStatement 인스턴스 : 미완성된 형태의 SQL 명령을 전달하는 인스턴스

        >> SQL 명령에 InParameter를 사용하며 setXXX() 메소드를 이용해 SQL 명령 완성

        >> 보안성이 우수하며 유지보수의 효율성 높다.



    < 컨넥션풀(ConnectionPool) 클래스 >

    - 컨넥션풀 클래스
     : Connection 인스턴스를 미리 만들어 저장하여 제공하기 위한 클래스

    - ConnectionPool을 만들어 주는 이유
        => 접속정보에 대한 유지보수 효율성 증가
        => 미리 Connection 객체를 만들어 필요한 경우 바로 사용 가능 - 빠른 실행 가능     
        => 컨넥션풀에 저장된 Connection 인스턴스의 개수 제어 가능
      
    - ConnectionPool을 사용하는 방법 

        => ConnectionPool 클래스 사용 또는 WAS(Apache) DBCP(DataBase ConnectionPool) 사용

    - ConnectionPool 클래스 사용
     
        주의) db.properties 파일을 src 디렉토리에 복사  

        주의) 생성자를 이용하여 ConnectionPool 객체 생성 불가 => 생성자가 private 접근지정자를 가지고 있기 때문

              ex) ConnectionPool pool=new ConnectionPool(); 

              왜??? ConnectionPool 객체가 여러 개 생성되는 것을 막기 위해 => SingleTon 기법

     

    < Connection을 만드는 데 필요한 요소들 >

    - PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource();
    : PoolDataSource 인스턴스를 반환하는 메소드

    - PoolDataSource
     : Connection 인스턴스를 저장하기 위한 인스턴스

    - PoolDataSource.setConnectionFactoryClassName(String driverName)
    : PoolDataSource 인스턴스의 Driver 클래스를 변경하는 메소드

    - PoolDataSource.setUser(String user)
    : PoolDataSource 인스턴스의 접속 사용자를 변경하는 메소드

    - PoolDataSource.setPassword(String password)
    : PoolDataSource 인스턴스의 접속 사용자의 비밀번호를 변경하는 메소드

    - PoolDataSource.setInitialPoolSize(int size)
    : PoolDataSource 인스턴스의 최초 생성되는 Connection 인스턴스

    - PoolDataSource.setMaxPoolSize(int size)
    : PoolDataSource 인스턴스의 최대 생성되는 Connection 인스턴스

    - PoolDataSource.getConnection() 
    : PoolDataSource 인스턴스에 저장된 Connection 인스턴스를 반환하는 메소드
    => PoolDataSource 인스턴스에 Connection 인스턴스가 없는 경우 생성하여 저장

    '비전공자 공부일기 > :: DB - SQL' 카테고리의 다른 글

    JDBC - 정규표현식  (3) 2019.06.04
    JDBC - DAO와 DTO  (4) 2019.06.03
    JDBC - ResultSet  (0) 2019.05.31
    오라클 DB 정리09-JDBC  (2) 2019.05.29
    오라클 DB 용어, 명령문 정리08-PL/SQL  (0) 2019.05.28

    댓글

coding wanee