-
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