2014-12-31 2 views
0

Spring-Jdbc 템플릿을 사용할 때 Prepared Statement와 Connection (jt.getDataSource(). getConnection())을 닫아야합니까? 아니면 템플릿 메커니즘에 의해 닫힐까요? 방금 (문자열 SQL 객체 ... 인수)를 .update를를 사용하는 양식을하는 경우 기본적으로Spring-Jdbc 템플릿과 Prepared 문

public void updateRow() throws SQLException { 

     final int i = 100; 
     final int y = 2; 

     PreparedStatementCreator creator = new PreparedStatementCreator() { 
      @Override 
      public PreparedStatement createPreparedStatement(Connection con) throws SQLException { 
       PreparedStatement updateSales = con.prepareStatement(
       "update ignor set ignored_id=? where id=?"); 
       updateSales.setInt(1, i); 
       updateSales.setInt(2, y); 
       return updateSales; 
      } 
     }; 

     PreparedStatement updateIgnor = creator.createPreparedStatement(jt.getDataSource().getConnection()); 
     int k = updateIgnor.executeUpdate(); 
     System.out.println("rows updated = " + k); 

    } 
+0

쿼리를 한 번만 실행합니까? – SMA

+0

글쎄, 실제 응용 프로그램 에서이 방법은 여러 번 실행할 수 있습니다 ... – andy007

답변

1

은 JdbcTemplate과는 내부적으로 자신의 PreparedStatement 않습니다. Spring 및 데이터베이스가 컴파일 된 쿼리를 관리하므로 열기, 닫기, 리소스 보호 등에 대해 걱정할 필요가 없습니다.

0

JdbcTemplate 메서드를 호출하는 대신 PreparedStatementCreator을 사용하려는 경우 SQL 문을 매개 변수로 사용하는 경우 PreparedStatementCreator을 매개 변수로 사용하는 JdbcTemplate 메서드를 사용해야합니다.

귀하의 예를 들어, 제거에서

:

PreparedStatement updateIgnor = creator.createPreparedStatement(jt.getDataSource().getConnection()); 
int k = updateIgnor.executeUpdate(); 

과로 교체하십시오 JdbcTemplate가 문 및 연결 자원 플러스 트랜잭션 관리를 처리하고 필요에 따라 자원을 닫습니다

int k = jt.update(creator); 

그런 식으로.

0

스프링 JDBC 템플릿을 사용하면 연결을 닫거나 열 필요가 없습니다. 내부적으로 처리하고 예외를 처리합니다.

Object[] parameters={boolean_value,date_value,int_value}; 
int[] types={Types.BOOLEAN,Types.TIMESTAMP,Types.INTEGER}; 
rowsAffected=jdbcTemplate.update("insert into table(col1,col2,col3) values(?,?,?)",parameters,types);