Search in sources :

Example 1 with AbstractInterruptibleBatchPreparedStatementSetter

use of org.springframework.jdbc.core.support.AbstractInterruptibleBatchPreparedStatementSetter in project spring-framework by spring-projects.

the class JdbcTemplateTests method testInterruptibleBatchUpdateWithBaseClassAndNoBatchSupport.

@Test
public void testInterruptibleBatchUpdateWithBaseClassAndNoBatchSupport() throws Exception {
    final String sql = "UPDATE NOSUCHTABLE SET DATE_DISPATCHED = SYSDATE WHERE ID = ?";
    final int[] ids = new int[] { 100, 200 };
    final int[] rowsAffected = new int[] { 1, 2 };
    given(this.preparedStatement.executeUpdate()).willReturn(rowsAffected[0], rowsAffected[1]);
    mockDatabaseMetaData(false);
    BatchPreparedStatementSetter setter = new AbstractInterruptibleBatchPreparedStatementSetter() {

        @Override
        protected boolean setValuesIfAvailable(PreparedStatement ps, int i) throws SQLException {
            if (i < ids.length) {
                ps.setInt(1, ids[i]);
                return true;
            } else {
                return false;
            }
        }
    };
    JdbcTemplate template = new JdbcTemplate(this.dataSource, false);
    int[] actualRowsAffected = template.batchUpdate(sql, setter);
    assertTrue("executed 2 updates", actualRowsAffected.length == 2);
    assertEquals(rowsAffected[0], actualRowsAffected[0]);
    assertEquals(rowsAffected[1], actualRowsAffected[1]);
    verify(this.preparedStatement, never()).addBatch();
    verify(this.preparedStatement).setInt(1, ids[0]);
    verify(this.preparedStatement).setInt(1, ids[1]);
    verify(this.preparedStatement).close();
    verify(this.connection, atLeastOnce()).close();
}
Also used : AbstractInterruptibleBatchPreparedStatementSetter(org.springframework.jdbc.core.support.AbstractInterruptibleBatchPreparedStatementSetter) PreparedStatement(java.sql.PreparedStatement) AbstractInterruptibleBatchPreparedStatementSetter(org.springframework.jdbc.core.support.AbstractInterruptibleBatchPreparedStatementSetter) Test(org.junit.Test)

Example 2 with AbstractInterruptibleBatchPreparedStatementSetter

use of org.springframework.jdbc.core.support.AbstractInterruptibleBatchPreparedStatementSetter in project spring-framework by spring-projects.

the class JdbcTemplateTests method testInterruptibleBatchUpdateWithBaseClass.

@Test
public void testInterruptibleBatchUpdateWithBaseClass() throws Exception {
    final String sql = "UPDATE NOSUCHTABLE SET DATE_DISPATCHED = SYSDATE WHERE ID = ?";
    final int[] ids = new int[] { 100, 200 };
    final int[] rowsAffected = new int[] { 1, 2 };
    given(this.preparedStatement.executeBatch()).willReturn(rowsAffected);
    mockDatabaseMetaData(true);
    BatchPreparedStatementSetter setter = new AbstractInterruptibleBatchPreparedStatementSetter() {

        @Override
        protected boolean setValuesIfAvailable(PreparedStatement ps, int i) throws SQLException {
            if (i < ids.length) {
                ps.setInt(1, ids[i]);
                return true;
            } else {
                return false;
            }
        }
    };
    JdbcTemplate template = new JdbcTemplate(this.dataSource, false);
    int[] actualRowsAffected = template.batchUpdate(sql, setter);
    assertTrue("executed 2 updates", actualRowsAffected.length == 2);
    assertEquals(rowsAffected[0], actualRowsAffected[0]);
    assertEquals(rowsAffected[1], actualRowsAffected[1]);
    verify(this.preparedStatement, times(2)).addBatch();
    verify(this.preparedStatement).setInt(1, ids[0]);
    verify(this.preparedStatement).setInt(1, ids[1]);
    verify(this.preparedStatement).close();
    verify(this.connection, atLeastOnce()).close();
}
Also used : AbstractInterruptibleBatchPreparedStatementSetter(org.springframework.jdbc.core.support.AbstractInterruptibleBatchPreparedStatementSetter) PreparedStatement(java.sql.PreparedStatement) AbstractInterruptibleBatchPreparedStatementSetter(org.springframework.jdbc.core.support.AbstractInterruptibleBatchPreparedStatementSetter) Test(org.junit.Test)

Aggregations

PreparedStatement (java.sql.PreparedStatement)2 Test (org.junit.Test)2 AbstractInterruptibleBatchPreparedStatementSetter (org.springframework.jdbc.core.support.AbstractInterruptibleBatchPreparedStatementSetter)2