Table definition
drop table jdbc_batch_table; create table jdbc_batch_table (message_id number primary key, message_type varchar2(1), message varchar2(100)) / purge recyclebin; exit;
Spring DAO - JdbcBatchDAOImpl
package pas.au.gemfire.demo.cachewriter.dao.jdbcbatch;
import java.math.BigDecimal;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.sql.DataSource;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
public class JdbcBatchDAOImpl implements JdbcBatchDAO
{
private Logger logger = Logger.getLogger(this.getClass().getSimpleName());
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource)
{
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
@Override
public void storeBatch(final List<JdbcBatch> jdbcBatchEntries)
{
int[] updateCounts =
jdbcTemplate.batchUpdate
(Constants.INSERT_SQL,
new BatchPreparedStatementSetter()
{
public void setValues(PreparedStatement ps, int i) throws SQLException
{
ps.setBigDecimal(1, new BigDecimal(jdbcBatchEntries.get(i).getMessageId().toString()));
ps.setString(2, jdbcBatchEntries.get(i).getMessageType());
ps.setString(3, jdbcBatchEntries.get(i).getMessage());
}
public int getBatchSize()
{
return jdbcBatchEntries.size();
}
}
);
logger.log (Level.INFO,
String.format("Inserted %s records using spring jdbc batching", updateCounts.length));
}
}
Constants Interface
package pas.au.gemfire.demo.cachewriter.dao.jdbcbatch;
public interface Constants
{
public final String INSERT_SQL = "insert into jdbc_batch_table values (:1, :2, :3)";
}
Output showing the insertion of 100 records at a time
Sep 7, 2011 10:03:43 PM pas.au.gemfire.demo.cachewriter.dao.jdbcbatch.JdbcBatchDAOImpl storeBatch
INFO: Inserted 100 records using spring jdbc batching
Sep 7, 2011 10:03:43 PM pas.au.gemfire.demo.cachewriter.DBGatewayListener processEvents
INFO: Size of DBGatewayListener = 100
Sep 7, 2011 10:03:43 PM pas.au.gemfire.demo.cachewriter.dao.jdbcbatch.JdbcBatchDAOImpl storeBatch
INFO: Inserted 100 records using spring jdbc batching
Sep 7, 2011 10:03:43 PM pas.au.gemfire.demo.cachewriter.DBGatewayListener processEvents
INFO: Size of DBGatewayListener = 100
Sep 7, 2011 10:03:43 PM pas.au.gemfire.demo.cachewriter.dao.jdbcbatch.JdbcBatchDAOImpl storeBatch
INFO: Inserted 100 records using spring jdbc batching
Sep 7, 2011 10:03:43 PM pas.au.gemfire.demo.cachewriter.DBGatewayListener processEvents
INFO: Size of DBGatewayListener = 100
Sep 7, 2011 10:03:44 PM pas.au.gemfire.demo.cachewriter.dao.jdbcbatch.JdbcBatchDAOImpl storeBatch
INFO: Inserted 100 records using spring jdbc batching
Sep 7, 2011 10:03:44 PM pas.au.gemfire.demo.cachewriter.DBGatewayListener processEvents
INFO: Size of DBGatewayListener = 100
Sep 7, 2011 10:03:44 PM pas.au.gemfire.demo.cachewriter.dao.jdbcbatch.JdbcBatchDAOImpl storeBatch
INFO: Inserted 100 records using spring jdbc batching
More info on Spring JDBC can be found here.
http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/jdbc.html