일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 자바기초
- DB
- 자바예제
- Spring
- 패스트캠퍼스후기
- 패스트캠퍼스
- 재택근무
- DesignPattern
- String
- 자바연습문제
- 한번에끝내는JavaSpring웹개발마스터초격차패키지Online강의
- javabasic
- java기초
- 스프링
- 데이터베이스
- 자바기본
- 웹
- java
- 패캠챌린지
- 자바
- linux
- 직장인인강
- 한번에끝내는JavaSpring웹개발마스터초격차패키지Online
- ncs
- 디자인패턴
- 디자인
- 직장인자기계발
- js
- 리눅스
- 국비
- Today
- Total
FIF's 코딩팩토리
[Java] 정적쿼리와 동적쿼리 – Statement, PreparedStatement 본문
자바 정적쿼리와 동적쿼리 – Statement, PreparedStatement
자바에서 데이터베이스로 쿼리문을 전송할 때 사용할 수 있는 인터페이스가 2가지 있다.
Statement와 PreparedStatement이다.
둘다 쿼리 전송기능을 가지고 있지만 차이점이 있다.
어떤 점이 차이가 나고, 어느 인터페이스를 사용하는 것이 좋은지 자세하게 알아보자.
공통점
1. 두 인터페이스 모두 SQL 질의문을 전달하는 역할을 한다.
2. 사용시 반드시 try~catch문 또는 throw를 통해 exception처리를 해줘야 한다.
Statement 인터페이스
1. Statement 객체는 Statement 인터페이스를 구현한 객체를 Connection 클래스의 createStatment()메소드를 호출함으로써 얻어진다.
2. State 객체가 생성되면 executeQuery()메소드를 호출하여 SQL문을 실행시킬 수 있다.
메소드의 인수로 SQL문을 담은 String객체를 전달한다.
PreparedStatement 인터페이스
1. PreparedStatement객체는 Connection 객체의 preparedStatement()메소드를 사용해서 생성한다.
이 메소드는 인수로 SQL문을 담은 String 객체가 필요하다.
2. SQL문장이 미리 컴파일되고, 실행 시간동안 인수값을 위한 공간을 확보할 수 있다는 점에서 Statement객체와 다르다.
3. Statement객체의 SQL은 실행될 때 매번 분석해야 하는 반면, PreparedStatement객체는 한번 분석되면 재사용이 용이하다.
4. 각각의 인수에 대하 위치홀더(placeholder)를 사용하여 SQL문장을 정의할 수 있게 해준다. 위치홀더는 ? 로 표현한다.
5. 동일한 SQL문을 특정 값만 바꾸어 여러 번 실행해야 할 때, 인수가 많아서 SQL문을 정리해야 될 필요가 있을 때 사용하면 유용하다.
어떤 것을 사용하는 것이 좋은가?
PreparedStatement를 사용하는 것이 더 좋다.
PreparedStatement는 동적인 쿼리문을 처리할 수 있으므로 같은 SQL문에서 값만 변경하여 사용한다던가 인수가 많은 경우에 사용하기 좋다.
또한 미리 컴파일되기 때문에 수행속도가 Statement보다 빠른 장점이 있다.
Statement 사용 예
String sql = "select * from tableName"; //정적인 쿼리문
try{
Connection conn = getConnection();
Statement stmt = conn.createStatement();//statement객체생성
ResultSet rs = stmt.executeQuery(sql);
}catch(SQLException sqle){
sqle.printStackTrace();
}
PreparedStatement 사용 예
String sql = "select * from tableName where id=?"; // ?에 원하는 인자값을 동적으로 넣음
try{
Connection conn = getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql);//preparedstatement객체생성
pstmt.setString(1,"roybuchanun"); //1은 위치홀더
pstmt.executeQuery();
}catch(SQLException sqle){
sqle.printStackTrace();
}
'Back-End > Java(자바)' 카테고리의 다른 글
[Java]이터레이터(Iterator) 란? (1) | 2019.06.07 |
---|---|
JDBC : MariaDB-Java 이클립스 연동 (0) | 2019.05.27 |
정적분석 VS 동적분석 (0) | 2019.05.21 |
CheckStyle & FindBugs & PMD & ANT (0) | 2019.05.21 |
[Java]어댑터 패턴(Adapter pattern)을 이용한 통합 FTP,SFTP프로그램 (0) | 2019.05.14 |