Example usage for org.springframework.jdbc.object BatchSqlUpdate update

List of usage examples for org.springframework.jdbc.object BatchSqlUpdate update

Introduction

In this page you can find the example usage for org.springframework.jdbc.object BatchSqlUpdate update.

Prototype

@Override
public int update(Object... params) throws DataAccessException 

Source Link

Document

Overridden version of update that adds the given statement parameters to the queue rather than executing them immediately.

Usage

From source file:com.hmsinc.epicenter.tools.reclassifier.Reclassifier.java

@Transactional
public void save(Interaction interaction, Set<Classification> classifications, BatchSqlUpdate updater) {
    if (classifications != null) {
        for (Classification classification : classifications) {
            updater.update(new Object[] { interaction.getId(), classification.getId() });
        }//from www.  jav a  2s .  c o m
    }
}

From source file:anyframe.core.query.impl.QueryServiceImpl.java

/**
 * BatchSqlUpdate ? ? ? SQL?  Batch  .//w  ww  .j av a 2 s .  com
 * 
 * @param sql
 *            query statement.
 * @param types
 *            is matched with input parameters. A type must belong to fields
 *            defined java.sql.Types package.
 * @param targets
 *            object of class which is matched with specified table in XML
 *            files. is the List type of Object Array.
 * @return an array of the number of rows affected by each statement.
 */
protected int[] batchExecutor(final String sql, int[] types, final List targets) throws QueryServiceException {
    if (targets.size() <= 0)
        throw new QueryServiceException(getMessageSource(), "error.query.runtime.batch");

    BatchSqlUpdate sqlBatch = new BatchSqlUpdate();
    sqlBatch.setJdbcTemplate(jdbcTemplate);
    sqlBatch.setSql(sql);

    for (int i = 0; types != null && i < types.length; i++) {
        SqlParameter sp = new SqlParameter(types[i]);
        sqlBatch.declareParameter(sp);
    }
    sqlBatch.compile();

    for (int i = 0; i < targets.size(); i++) {
        Object obj = targets.get(i);
        if (obj instanceof Object[])
            sqlBatch.update((Object[]) obj);
    }
    return sqlBatch.flush();
}

From source file:org.springframework.jdbc.object.BatchSqlUpdateTests.java

private void doTestBatchUpdate(boolean flushThroughBatchSize) 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 };

    MockControl ctrlPreparedStatement = MockControl.createControl(PreparedStatement.class);
    PreparedStatement mockPreparedStatement = (PreparedStatement) ctrlPreparedStatement.getMock();
    mockPreparedStatement.getConnection();
    ctrlPreparedStatement.setReturnValue(mockConnection);
    mockPreparedStatement.setObject(1, new Integer(ids[0]), Types.INTEGER);
    ctrlPreparedStatement.setVoidCallable();
    mockPreparedStatement.addBatch();//from   w w w .  ja  v a2s  .co m
    ctrlPreparedStatement.setVoidCallable();
    mockPreparedStatement.setObject(1, new Integer(ids[1]), Types.INTEGER);
    ctrlPreparedStatement.setVoidCallable();
    mockPreparedStatement.addBatch();
    ctrlPreparedStatement.setVoidCallable();
    mockPreparedStatement.executeBatch();
    ctrlPreparedStatement.setReturnValue(rowsAffected);
    if (debugEnabled) {
        mockPreparedStatement.getWarnings();
        ctrlPreparedStatement.setReturnValue(null);
    }
    mockPreparedStatement.close();
    ctrlPreparedStatement.setVoidCallable();

    MockControl ctrlDatabaseMetaData = MockControl.createControl(DatabaseMetaData.class);
    DatabaseMetaData mockDatabaseMetaData = (DatabaseMetaData) ctrlDatabaseMetaData.getMock();
    mockDatabaseMetaData.supportsBatchUpdates();
    ctrlDatabaseMetaData.setReturnValue(true);

    mockConnection.prepareStatement(sql);
    ctrlConnection.setReturnValue(mockPreparedStatement);
    mockConnection.getMetaData();
    ctrlConnection.setReturnValue(mockDatabaseMetaData, 1);

    ctrlPreparedStatement.replay();
    ctrlDatabaseMetaData.replay();
    replay();

    BatchSqlUpdate update = new BatchSqlUpdate(mockDataSource, sql);
    update.declareParameter(new SqlParameter(Types.INTEGER));
    if (flushThroughBatchSize) {
        update.setBatchSize(2);
    }

    update.update(ids[0]);
    update.update(ids[1]);

    if (flushThroughBatchSize) {
        assertEquals(0, update.getQueueCount());
        assertEquals(2, update.getRowsAffected().length);
    } else {
        assertEquals(2, update.getQueueCount());
        assertEquals(0, update.getRowsAffected().length);
    }

    int[] actualRowsAffected = update.flush();
    assertEquals(0, update.getQueueCount());

    if (flushThroughBatchSize) {
        assertTrue("flush did not execute updates", actualRowsAffected.length == 0);
    } else {
        assertTrue("executed 2 updates", actualRowsAffected.length == 2);
        assertEquals(rowsAffected[0], actualRowsAffected[0]);
        assertEquals(rowsAffected[1], actualRowsAffected[1]);
    }

    actualRowsAffected = update.getRowsAffected();
    assertTrue("executed 2 updates", actualRowsAffected.length == 2);
    assertEquals(rowsAffected[0], actualRowsAffected[0]);
    assertEquals(rowsAffected[1], actualRowsAffected[1]);

    update.reset();
    assertEquals(0, update.getRowsAffected().length);

    ctrlPreparedStatement.verify();
    ctrlDatabaseMetaData.verify();
}