내가 맡은 업무의 코드에는 java PreparedStatement를 사용하는 코드들이 아주 많다.
근데 여기서 큰 문제점이 있었는데 PreparedStatement 를 재사용하는 방법이 잘못되어 있었다는 것이다.
for(int i = 0; i<5; i++) {
String sql = "select name, aget from testTable where condition ='"+value[i]+"'";
pstmt = conn.prepareStatement(sql);
pstmt.executeUpdate();
}
이런식으로 for문 안에서 객체를 재할당 해주고 마지막에 finally 문에서 pstmt를 close해주는 식이었다.
하지만 이런 방식으로 사용한다면 가장 마지막의 pstmt만 close 되고 앞에서 할당한 pstmt는 절대 close 될 수 없는 구조를 가진다.
String sql = "select name, aget from testTable where condition = ? ";
pstmt = conn.prepareStatement(sql);
for(int i = 0; i<5; i++) {
pstmt.setString(1, value[i]);
pstmt.executeUpdate();
pstmt.clearParameters();
}
이런식으로 객체 할당은 for문 밖에서 한번만 해주고 for 문을 돌면서 파라미터를 세팅해주는 방식으로 써야 올바른 사용법이다.
'개발공부' 카테고리의 다른 글
[트러블슈팅] 자바 Properties 파일을 못 읽는 현상 (0) | 2024.11.08 |
---|---|
[트러블슈팅] 실제 데이터 값과 MyBatis를 통해 select 한 값이 다른 문제 - 오라클 char 타입 유의할점 (0) | 2024.11.07 |
[트러블슈팅] jsch auth fail (1) | 2024.11.07 |
[백견불여일타] Spring Data JPA (0) | 2024.01.27 |
[백견불여일타] 프로젝트 생성 (0) | 2023.11.12 |