헝D의 일기장

내가 맡은 업무의 코드에는 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 문을 돌면서 파라미터를 세팅해주는 방식으로 써야 올바른 사용법이다.

profile

헝D의 일기장

@헝D

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!