Top Description Fields Constructors Methods
org.springframework.jdbc.object

public Class BatchSqlUpdate

extends SqlUpdate
Class Inheritance
Imports
java.sql.PreparedStatement, .SQLException, java.util.ArrayDeque, .ArrayList, .Deque, .List, javax.sql.DataSource, org.springframework.dao.DataAccessException, org.springframework.jdbc.core.BatchPreparedStatementSetter

SqlUpdate subclass that performs batch update operations. Encapsulates queuing up records to be updated, and adds them as a single batch once flush is called or the given batch size has been met.

Note that this class is a non-thread-safe object, in contrast to all other JDBC operations objects in this package. You need to create a new instance of it for each use, or call reset before reuse within the same thread.

Authors
Keith Donald, Juergen Hoeller
Since
1.1
See Also
flush, reset

Field Summary

Modifier and TypeField and Description
private int
public static final int
DEFAULT_BATCH_SIZE

Default number of inserts to accumulate before committing a batch (5000).

private final Deque<Object[]>
private final List<Integer>
private boolean

Constructor Summary

AccessConstructor and Description
public
BatchSqlUpdate()

Constructor to allow use as a JavaBean.

public
BatchSqlUpdate(DataSource
the DataSource to use to obtain connections
ds
,
String
the SQL statement to execute
sql
)

Construct an update object with a given DataSource and SQL.

public
BatchSqlUpdate(DataSource
the DataSource to use to obtain connections
ds
,
String
the SQL statement to execute
sql
,
int[]
the SQL types of the parameters, as defined in the java.sql.Types class
types
)

Construct an update object with a given DataSource, SQL and anonymous parameters.

public
BatchSqlUpdate(DataSource
the DataSource to use to obtain connections
ds
,
String
the SQL statement to execute
sql
,
int[]
the SQL types of the parameters, as defined in the java.sql.Types class
types
,
int
the number of statements that will trigger an automatic intermediate flush
batchSize
)

Construct an update object with a given DataSource, SQL, anonymous parameters and specifying the maximum number of rows that may be affected.

Method Summary

Modifier and TypeMethod and Description
public int[]

Returns:

an array of the number of rows affected by each statement
flush
()

Trigger any queued update operations to be added as a final batch.

public int
getExecutionCount()

Return the number of already executed statements.

public int
getQueueCount()

Return the current number of statements or statement parameters in the queue.

public int[]

Returns:

an array of the number of rows affected by each statement
getRowsAffected
()

Return the number of affected rows for all already executed statements.

public void
reset()

Reset the statement parameter queue, the rows affected cache, and the execution count.

public void
setBatchSize(int batchSize)

Set the number of statements that will trigger an automatic intermediate flush.

public void
setTrackRowsAffected(boolean trackRowsAffected)

Set whether to track the rows affected by batch updates performed by this operation object.

protected boolean
supportsLobParameters()

Overrides org.springframework.jdbc.object.RdbmsOperation.supportsLobParameters.

BatchSqlUpdate does not support BLOB or CLOB parameters.

public int

Returns:

the number of rows affected by the update (always -1, meaning "not applicable", as the statement is not actually executed by this method)
update
(Object...
array of parameter objects
params
)

Overrides org.springframework.jdbc.object.SqlUpdate.update.

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

Inherited from org.springframework.jdbc.object.SqlUpdate:
checkRowsAffectedsetMaxRowsAffectedsetRequiredRowsAffectedupdateupdateupdateupdateupdateupdateupdateupdateupdateByNamedParamupdateByNamedParam

Field Detail

batchSizeback to summary
private int batchSize
DEFAULT_BATCH_SIZEback to summary
public static final int DEFAULT_BATCH_SIZE

Default number of inserts to accumulate before committing a batch (5000).

parameterQueueback to summary
private final Deque<Object[]> parameterQueue
rowsAffectedback to summary
private final List<Integer> rowsAffected
trackRowsAffectedback to summary
private boolean trackRowsAffected

Constructor Detail

BatchSqlUpdateback to summary
public BatchSqlUpdate()

Constructor to allow use as a JavaBean. DataSource and SQL must be supplied before compilation and use.

See Also
setDataSource, setSql
BatchSqlUpdateback to summary
public BatchSqlUpdate(DataSource ds, String sql)

Construct an update object with a given DataSource and SQL.

Parameters
ds:DataSource

the DataSource to use to obtain connections

sql:String

the SQL statement to execute

BatchSqlUpdateback to summary
public BatchSqlUpdate(DataSource ds, String sql, int[] types)

Construct an update object with a given DataSource, SQL and anonymous parameters.

Parameters
ds:DataSource

the DataSource to use to obtain connections

sql:String

the SQL statement to execute

types:int[]

the SQL types of the parameters, as defined in the java.sql.Types class

See Also
java.sql.Types
BatchSqlUpdateback to summary
public BatchSqlUpdate(DataSource ds, String sql, int[] types, int batchSize)

Construct an update object with a given DataSource, SQL, anonymous parameters and specifying the maximum number of rows that may be affected.

Parameters
ds:DataSource

the DataSource to use to obtain connections

sql:String

the SQL statement to execute

types:int[]

the SQL types of the parameters, as defined in the java.sql.Types class

batchSize:int

the number of statements that will trigger an automatic intermediate flush

See Also
java.sql.Types

Method Detail

flushback to summary
public int[] flush()

Trigger any queued update operations to be added as a final batch.

Returns:int[]

an array of the number of rows affected by each statement

getExecutionCountback to summary
public int getExecutionCount()

Return the number of already executed statements.

getQueueCountback to summary
public int getQueueCount()

Return the current number of statements or statement parameters in the queue.

getRowsAffectedback to summary
public int[] getRowsAffected()

Return the number of affected rows for all already executed statements. Accumulates all of flush's return values until reset is invoked.

Returns:int[]

an array of the number of rows affected by each statement

See Also
reset
resetback to summary
public void reset()

Reset the statement parameter queue, the rows affected cache, and the execution count.

setBatchSizeback to summary
public void setBatchSize(int batchSize)

Set the number of statements that will trigger an automatic intermediate flush. update calls or the given statement parameters will be queued until the batch size is met, at which point it will empty the queue and execute the batch.

You can also flush already queued statements with an explicit flush call. Note that you need to this after queueing all parameters to guarantee that all statements have been flushed.

setTrackRowsAffectedback to summary
public void setTrackRowsAffected(boolean trackRowsAffected)

Set whether to track the rows affected by batch updates performed by this operation object.

Default is "true". Turn this off to save the memory needed for the list of row counts.

See Also
getRowsAffected()
supportsLobParametersback to summary
protected boolean supportsLobParameters()

Overrides org.springframework.jdbc.object.RdbmsOperation.supportsLobParameters.

BatchSqlUpdate does not support BLOB or CLOB parameters.

Annotations
@Override
updateback to summary
public int update(Object... params) throws DataAccessException

Overrides org.springframework.jdbc.object.SqlUpdate.update.

Overridden version of update that adds the given statement parameters to the queue rather than executing them immediately. All other update methods of the SqlUpdate base class go through this method and will thus behave similarly.

You need to call flush to actually execute the batch. If the specified batch size is reached, an implicit flush will happen; you still need to finally call flush to flush all statements.

Parameters
params:Object[]

array of parameter objects

Returns:int

the number of rows affected by the update (always -1, meaning "not applicable", as the statement is not actually executed by this method)

Annotations
@Override
See Also
flush