본문 바로가기

Server Oriented/Java & JSP

PreparedStatement 의 clearParameters() 는 불필요..?

하나의 PreparedStatement 로,

여러개의 쿼리를 실행(또는 하나의 쿼리로 파라미터를 바꾸면서 여러번 실행)할 때..

이전에 세팅했던 파라미터를 모두 클리어 하는 용도입니다만..

 

필요가 없을듯 하네요.
물론, 넣어도 상관은 없는데..

동시 사용자가 갑자기 많아진다 했을 때,

이게 여러번 실행되면..

실행되지 않았을 때에 비해

아무래도 그 만큼의 퍼포먼스를 잡아 먹게 됩니다.

 

물론, GC 를 위해 사용한다는 분도 있던데, 불필요한 것은 마찬가지.

기술되는 순간 시스템은 그만큼 느려진다는..

 

다만, 파라미터 갯수가 바뀌는 시점에서는 사용해야 함.. ㅠ

 

다른 의견 있으시면, 댓글 바랍니다.

 

 

#1 finally 에서 각종 요소를 초기화 할 때..?

...

try{

  ...

}catch(Exception e){

  ...

}finally{

  ...

  preparedStatement.clearParameters(); // GC 를 위해 넣는다..? No, 그냥 close() 만 하세요.

  preparedStatement.close();

  preparedStatement = null; // 이건 개발자의 취향 차이 아닐까요. 물론 확인사살용으로 좋긴 합니다.

}

상기 문장에서 clearParameters() 는 불필요 하다는 겁니다.

 

 

#2 하나의 sql 문장에 파라미터를 바꿔가면서 여러번 실행할 때..?

preparedStatement = connection.prepareStatement(sql);

for(...){

  int i = 0;

  preparedStatement.clearParameters(); // 파라미터가 바뀌어서..? No, 그냥 close() 만 하세요.

  preparedStatement.setString(++i, ...);

  preparedStatement.setString(++i, ...);

  ...

  preparedStatement.executeUpdate(); // 또는 executeQuery()

  //preparedStatement.clearParameters(); // setString() 하기 전에 있거나, executeUpdate() 뒤에 있거나 무관

}

 

 

#3 상기 #2 를 batch 에 넣을 때..?

preparedStatement = connection.prepareStatement(sql);

for(...){

  int i = 0;

  preparedStatement.clearParameters(); // 파라미터가 바뀌어서..? No, 그냥 close() 만 하세요.

  preparedStatement.setString(++i, ...);

  preparedStatement.setString(++i, ...);

  ...

  preparedStatement.addBatch();
  //preparedStatement.clearParameters(); // setString() 하기 전에 있거나, addBatch() 뒤에 있거나 무관

}

preparedStatement.executeBatch();

preparedStatement.clearBatch(); // 명시적 GC

 

.Fine.