2014-12-31 2 views
0

Нужно ли закрывать готовое заявление и соединение (jt.getDataSource(). GetConnection()) при использовании шаблона Spring-Jdbc? Или они будут закрыты Template mechanizm?Spring-Jdbc Template and Prepared statement

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 внутри, если вы просто использовать .update (строка SQL, объект ... арг) форму. Spring и ваша база данных будут обрабатывать скомпилированный запрос для вас, поэтому вам не нужно беспокоиться об открытии, закрытии, защите ресурсов и т. Д.

0

Если вы хотите использовать PreparedStatementCreator, вместо вызова методов JdbcTemplate которые принимают оператор SQL в качестве параметра, вы должны использовать метод JdbcTemplate, который принимает ваш PreparedStatementCreator в качестве параметра.

В вашем примере Вытащите:

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

и заменить его:

int k = jt.update(creator); 

этак JdbcTemplate будет обрабатывать высказыванием и подключение ресурсов плюс любое управление транзакциями и закрыть ресурсы по мере необходимости.

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);