|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.springframework.jdbc.support.JdbcAccessor org.springframework.jdbc.core.JdbcTemplate
This is the central class in the JDBC core package. It simplifies the use of JDBC and helps to avoid common errors. It executes core JDBC workflow, leaving application code to provide SQL and extract results. This class executes SQL queries or updates, initiating iteration over ResultSets and catching JDBC exceptions and translating them to the generic, more informative exception hierarchy defined in the org.springframework.dao package.
Code using this class need only implement callback interfaces, giving them a clearly defined contract. The PreparedStatementCreator callback interface creates a prepared statement given a Connection provided by this class, providing SQL and any necessary parameters. The RowCallbackHandler interface extracts values from each row of a ResultSet.
Can be used within a service implementation via direct instantiation with a DataSource reference, or get prepared in an application context and given to services as bean reference. Note: The DataSource should always be configured as a bean in the application context, in the first case given to the service directly, in the second case to the prepared template.
The motivation and design of this class is discussed in detail in Expert One-On-One J2EE Design and Development by Rod Johnson (Wrox, 2002).
Because this class is parameterizable by the callback interfaces and the SQLExceptionTranslator interface, it isn't necessary to subclass it. All SQL issued by this class is logged.
ResultSetExtractor
,
RowCallbackHandler
,
RowMapper
,
org.springframework.dao
,
org.springframework.jdbc.datasource
,
org.springframework.jdbc.object
Field Summary | |
protected Log |
logger
|
Constructor Summary | |
JdbcTemplate()
Construct a new JdbcTemplate for bean usage. |
|
JdbcTemplate(DataSource dataSource)
Construct a new JdbcTemplate, given a DataSource to obtain connections from. |
Method Summary | |
int[] |
batchUpdate(String sql,
BatchPreparedStatementSetter pss)
Issue multiple updates on a single PreparedStatement, using JDBC 2.0 batch updates and a BatchPreparedStatementSetter to set values. |
Map |
call(CallableStatementCreator csc,
List declaredParameters)
Execute a SQL call using a CallableStatementCreator to provide SQL and any required parameters. |
Object |
execute(CallableStatementCreator csc,
CallableStatementCallback action)
Execute the action specified by the given action object within a JDBC CallableStatement. |
Object |
execute(PreparedStatementCreator psc,
PreparedStatementCallback action)
Execute the action specified by the given action object within a JDBC PreparedStatement. |
Object |
execute(StatementCallback action)
Execute the action specified by the given action object within a JDBC Statement. |
void |
execute(String sql)
Issue a single SQL execute, typically a DDL statement. |
Object |
execute(String callString,
CallableStatementCallback action)
Execute the action specified by the given action object within a JDBC CallableStatement. |
Object |
execute(String sql,
PreparedStatementCallback action)
Execute the action specified by the given action object within a JDBC PreparedStatement. |
protected Map |
extractOutputParameters(CallableStatement cs,
List parameters)
Extract output parameters from the completed stored procedure. |
protected Map |
extractReturnedResultSets(CallableStatement cs,
List parameters,
int updateCount)
Extract returned ResultSets from the completed stored procedure. |
int |
getFetchSize()
Return the current fetch size specified for this JdbcTemplate. |
boolean |
getIgnoreWarnings()
Deprecated. in favor of isIgnoreWarnings |
NativeJdbcExtractor |
getNativeJdbcExtractor()
Return the current NativeJdbcExtractor implementation. |
boolean |
isIgnoreWarnings()
Return whether or not we ignore SQLWarnings. |
protected Map |
processResultSet(ResultSet rs,
ResultSetSupportingSqlParameter param)
Process the given ResultSet from a stored procedure. |
protected Object |
query(PreparedStatementCreator psc,
PreparedStatementSetter pss,
ResultSetExtractor rse)
Query using a prepared statement, allowing for a PreparedStatementCreator and a PreparedStatementSetter. |
Object |
query(PreparedStatementCreator psc,
ResultSetExtractor rse)
Query using a prepared statement. |
List |
query(PreparedStatementCreator psc,
RowCallbackHandler rch)
Query using a prepared statement, reading the ResultSet on a per-row basis with a RowCallbackHandler (potentially implementing the ResultReader sub-interface that provides a result List). |
List |
query(PreparedStatementCreator psc,
RowMapper rowMapper)
Query using a prepared statement, mapping each row to a Java object via a RowMapper. |
Object |
query(String sql,
Object[] args,
int[] argTypes,
ResultSetExtractor rse)
Query given SQL to create a prepared statement from SQL and a list of arguments to bind to the query, reading the ResultSet on a per-row basis with a RowCallbackHandler (potentially implementing the ResultReader sub-interface that provides a result List). |
List |
query(String sql,
Object[] args,
int[] argTypes,
RowCallbackHandler rch)
Query given SQL to create a prepared statement from SQL and a list of arguments to bind to the query, reading the ResultSet on a per-row basis with a RowCallbackHandler (potentially implementing the ResultReader sub-interface that provides a result List). |
List |
query(String sql,
Object[] args,
int[] argTypes,
RowMapper rowMapper)
Query given SQL to create a prepared statement from SQL and a list of arguments to bind to the query, mapping each row to a Java object via a RowMapper. |
Object |
query(String sql,
Object[] args,
ResultSetExtractor rse)
Query given SQL to create a prepared statement from SQL and a list of arguments to bind to the query, reading the ResultSet on a per-row basis with a RowCallbackHandler (potentially implementing the ResultReader sub-interface that provides a result List). |
List |
query(String sql,
Object[] args,
RowCallbackHandler rch)
Query given SQL to create a prepared statement from SQL and a list of arguments to bind to the query, reading the ResultSet on a per-row basis with a RowCallbackHandler (potentially implementing the ResultReader sub-interface that provides a result List). |
List |
query(String sql,
Object[] args,
RowMapper rowMapper)
Query given SQL to create a prepared statement from SQL and a list of arguments to bind to the query, mapping each row to a Java object via a RowMapper. |
Object |
query(String sql,
PreparedStatementSetter pss,
ResultSetExtractor rse)
Query using a prepared statement, reading the ResultSet with a ResultSetExtractor. |
List |
query(String sql,
PreparedStatementSetter pss,
RowCallbackHandler rch)
Query given SQL to create a prepared statement from SQL and a PreparedStatementSetter implementation that knows how to bind values to the query, reading the ResultSet on a per-row basis with a RowCallbackHandler (potentially implementing the ResultReader sub-interface that provides a result List). |
List |
query(String sql,
PreparedStatementSetter pss,
RowMapper rowMapper)
Query given SQL to create a prepared statement from SQL and a PreparedStatementSetter implementation that knows how to bind values to the query, mapping each row to a Java objec via a RowMapper. |
Object |
query(String sql,
ResultSetExtractor rse)
Execute a query given static SQL, reading the ResultSet with a ResultSetExtractor. |
List |
query(String sql,
RowCallbackHandler rch)
Execute a query given static SQL, reading the ResultSet on a per-row basis with a RowCallbackHandler (potentially implementing the ResultReader sub-interface that provides a result List). |
List |
query(String sql,
RowMapper rowMapper)
Execute a query given static SQL, mapping each row to a Java object via a RowMapper. |
int |
queryForInt(String sql)
Execute a query that results in an int value, given static SQL. |
int |
queryForInt(String sql,
Object[] args)
Query given SQL to create a prepared statement from SQL and a list of arguments to bind to the query, resulting in an int value. |
List |
queryForList(String sql)
Execute a query for a result list, given static SQL. |
List |
queryForList(String sql,
Object[] args)
Query given SQL to create a prepared statement from SQL and a list of arguments to bind to the query, expecting a result list. |
long |
queryForLong(String sql)
Execute a query that results in a long value, given static SQL. |
long |
queryForLong(String sql,
Object[] args)
Query given SQL to create a prepared statement from SQL and a list of arguments to bind to the query, resulting in a long value. |
Object |
queryForObject(String sql,
Class requiredType)
Execute a query for a result object, given static SQL. |
Object |
queryForObject(String sql,
Object[] args,
Class requiredType)
Query given SQL to create a prepared statement from SQL and a list of arguments to bind to the query, expecting a result object. |
void |
setFetchSize(int fetchSize)
Set the fetch size for this JdbcTemplate. |
void |
setIgnoreWarnings(boolean ignoreWarnings)
Set whether or not we want to ignore SQLWarnings. |
void |
setNativeJdbcExtractor(NativeJdbcExtractor extractor)
Set a NativeJdbcExtractor to extract native JDBC objects from wrapped handles. |
int |
update(PreparedStatementCreator psc)
Issue an update using a PreparedStatementCreator to provide SQL and any required parameters. |
int |
update(PreparedStatementCreator psc,
KeyHolder generatedKeyHolder)
Issue an update using a PreparedStatementCreator to provide SQL and any required parameters. |
protected int |
update(PreparedStatementCreator psc,
PreparedStatementSetter pss)
|
int |
update(String sql)
Issue a single SQL update. |
int |
update(String sql,
Object[] args)
Issue an update via a prepared statement, binding the given arguments. |
int |
update(String sql,
Object[] args,
int[] argTypes)
Issue an update via a prepared statement, binding the given arguments. |
int |
update(String sql,
PreparedStatementSetter pss)
Issue an update using a PreparedStatementSetter to set bind parameters, with given SQL. |
Methods inherited from class org.springframework.jdbc.support.JdbcAccessor |
afterPropertiesSet, getDataSource, getExceptionTranslator, setDataSource, setExceptionTranslator |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Methods inherited from interface org.springframework.beans.factory.InitializingBean |
afterPropertiesSet |
Field Detail |
protected final Log logger
Constructor Detail |
public JdbcTemplate()
JdbcAccessor.setDataSource(javax.sql.DataSource)
public JdbcTemplate(DataSource dataSource)
dataSource
- JDBC DataSource to obtain connections fromMethod Detail |
public void setNativeJdbcExtractor(NativeJdbcExtractor extractor)
public NativeJdbcExtractor getNativeJdbcExtractor()
public void setIgnoreWarnings(boolean ignoreWarnings)
public boolean isIgnoreWarnings()
public boolean getIgnoreWarnings()
isIgnoreWarnings
isIgnoreWarnings()
public void setFetchSize(int fetchSize)
Default is 0, indicating to use the driver's default.
public int getFetchSize()
public Object execute(StatementCallback action)
JdbcOperations
execute
in interface JdbcOperations
action
- callback object that specifies the action
public void execute(String sql) throws DataAccessException
JdbcOperations
execute
in interface JdbcOperations
sql
- static SQL to execute
DataAccessException
- if there is any problempublic Object query(String sql, ResultSetExtractor rse) throws DataAccessException
JdbcOperations
Uses a JDBC Statement, not a PreparedStatement. If you want to execute a static query with a PreparedStatement, use the overloaded query method with a null PreparedStatementSetter as a parameter.
query
in interface JdbcOperations
sql
- SQL query to executerse
- object that will extract all rows of results
DataAccessException
- if there is any problem executing the queryJdbcOperations.query(String, PreparedStatementSetter, ResultSetExtractor)
public List query(String sql, RowCallbackHandler rch) throws DataAccessException
JdbcOperations
Uses a JDBC Statement, not a PreparedStatement. If you want to execute a static query with a PreparedStatement, use the overloaded query method with null as PreparedStatementSetter argument.
query
in interface JdbcOperations
sql
- SQL query to executerch
- object that will extract results (potentially a ResultReader),
one row at a time
DataAccessException
- if there is any problem executing the queryJdbcOperations.query(String, PreparedStatementSetter, RowCallbackHandler)
public List query(String sql, RowMapper rowMapper) throws DataAccessException
JdbcOperations
Uses a JDBC Statement, not a PreparedStatement. If you want to execute a static query with a PreparedStatement, use the overloaded query method with null as PreparedStatementSetter argument.
query
in interface JdbcOperations
sql
- SQL query to executerowMapper
- object that will map one object per row
DataAccessException
- if there is any problem executing the queryJdbcOperations.query(String, PreparedStatementSetter, RowCallbackHandler)
public List queryForList(String sql) throws DataAccessException
JdbcOperations
Uses a JDBC Statement, not a PreparedStatement. If you want to execute a static query with a PreparedStatement, use the overloaded queryForList method with null as argument array.
This method is useful for running static SQL with a known outcome. The results will be mapped to an ArrayList (one entry for each row) of HashMaps (one entry for each column using the column name as the key).
queryForList
in interface JdbcOperations
sql
- SQL query to execute
DataAccessException
- if there is any problem executing the queryJdbcOperations.queryForList(String, Object[])
public Object queryForObject(String sql, Class requiredType) throws DataAccessException
JdbcOperations
Uses a JDBC Statement, not a PreparedStatement. If you want to execute a static query with a PreparedStatement, use the overloaded queryForObject method with null as argument array.
This method is useful for running static SQL with a known outcome. The query is expected to be a single row/single column query; the returned result will be directly mapped to the corresponding object type.
queryForObject
in interface JdbcOperations
sql
- SQL query to executerequiredType
- the type that the result object is expected to match
DataAccessException
- if there is any problem executing the queryJdbcOperations.queryForObject(String, Object[], Class)
public long queryForLong(String sql) throws DataAccessException
JdbcOperations
Uses a JDBC Statement, not a PreparedStatement. If you want to execute a static query with a PreparedStatement, use the overloaded queryForLong method with null as argument array.
This method is useful for running static SQL with a known outcome. The query is expected to be a single row/single column query that results in a long value.
queryForLong
in interface JdbcOperations
sql
- SQL query to execute
DataAccessException
- if there is any problem executing the queryJdbcOperations.queryForLong(String, Object[])
public int queryForInt(String sql) throws DataAccessException
JdbcOperations
Uses a JDBC Statement, not a PreparedStatement. If you want to execute a static query with a PreparedStatement, use the overloaded queryForInt method with null as argument array.
This method is useful for running static SQL with a known outcome. The query is expected to be a single row/single column query that results in an int value.
queryForInt
in interface JdbcOperations
sql
- SQL query to execute
DataAccessException
- if there is any problem executing the queryJdbcOperations.queryForInt(String, Object[])
public int update(String sql) throws DataAccessException
JdbcOperations
update
in interface JdbcOperations
sql
- static SQL to execute
DataAccessException
- if there is any problem.public Object execute(PreparedStatementCreator psc, PreparedStatementCallback action)
JdbcOperations
execute
in interface JdbcOperations
psc
- object that can create a PreparedStatement given a Connectionaction
- callback object that specifies the action
public Object execute(String sql, PreparedStatementCallback action)
JdbcOperations
execute
in interface JdbcOperations
sql
- SQL to executeaction
- callback object that specifies the action
protected Object query(PreparedStatementCreator psc, PreparedStatementSetter pss, ResultSetExtractor rse) throws DataAccessException
psc
- Callback handler that can create a PreparedStatement given a
Connectionpss
- object that knows how to set values on the prepared statement.
If this is null, the SQL will be assumed to contain no bind parameters.rse
- object that will extract results.
DataAccessException
- if there is any problempublic Object query(PreparedStatementCreator psc, ResultSetExtractor rse)
JdbcOperations
query
in interface JdbcOperations
psc
- object that can create a PreparedStatement given a Connectionrse
- object that will extract results
public Object query(String sql, PreparedStatementSetter pss, ResultSetExtractor rse) throws DataAccessException
JdbcOperations
query
in interface JdbcOperations
sql
- SQL to executepss
- object that knows how to set values on the prepared statement.
If this is null, the SQL will be assumed to contain no bind parameters.
Even if there are no bind parameters, this object may be used to
set fetch size and other performance options.rse
- object that will extract results
DataAccessException
- if there is any problempublic Object query(String sql, Object[] args, int[] argTypes, ResultSetExtractor rse)
JdbcOperations
query
in interface JdbcOperations
sql
- SQL to executeargs
- arguments to bind to the queryargTypes
- SQL types of the arguments (constants from java.sql.Types)rse
- object that will extract results
Types
public Object query(String sql, Object[] args, ResultSetExtractor rse)
JdbcOperations
query
in interface JdbcOperations
sql
- SQL to executeargs
- arguments to bind to the query
(leaving it to the PreparedStatement to guess the respective SQL type)rse
- object that will extract results
public List query(PreparedStatementCreator psc, RowCallbackHandler rch) throws DataAccessException
JdbcOperations
query
in interface JdbcOperations
psc
- object that can create a PreparedStatement given a Connectionrch
- object that will extract results (potentially a ResultReader),
one row at a time
DataAccessException
- if there is any problempublic List query(String sql, PreparedStatementSetter pss, RowCallbackHandler rch) throws DataAccessException
JdbcOperations
query
in interface JdbcOperations
sql
- SQL to executepss
- object that knows how to set values on the prepared statement.
If this is null, the SQL will be assumed to contain no bind parameters.
Even if there are no bind parameters, this object may be used to
set fetch size and other performance options.rch
- object that will extract results (potentially a ResultReader),
one row at a time
DataAccessException
- if the query failspublic List query(String sql, Object[] args, int[] argTypes, RowCallbackHandler rch) throws DataAccessException
JdbcOperations
query
in interface JdbcOperations
sql
- SQL to executeargs
- arguments to bind to the queryargTypes
- SQL types of the arguments (constants from java.sql.Types)rch
- object that will extract results (potentially a ResultReader),
one row at a time
DataAccessException
- if the query failsTypes
public List query(String sql, Object[] args, RowCallbackHandler rch) throws DataAccessException
JdbcOperations
query
in interface JdbcOperations
sql
- SQL to executeargs
- arguments to bind to the query
(leaving it to the PreparedStatement to guess the respective SQL type)rch
- object that will extract results (potentially a ResultReader),
one row at a time
DataAccessException
- if the query failspublic List query(PreparedStatementCreator psc, RowMapper rowMapper) throws DataAccessException
JdbcOperations
query
in interface JdbcOperations
psc
- object that can create a PreparedStatement given a ConnectionrowMapper
- object that will map one object per row
DataAccessException
- if there is any problempublic List query(String sql, PreparedStatementSetter pss, RowMapper rowMapper) throws DataAccessException
JdbcOperations
query
in interface JdbcOperations
sql
- SQL to executepss
- object that knows how to set values on the prepared statement.
If this is null, the SQL will be assumed to contain no bind parameters.
Even if there are no bind parameters, this object may be used to
set fetch size and other performance options.rowMapper
- object that will map one object per row
DataAccessException
- if the query failspublic List query(String sql, Object[] args, int[] argTypes, RowMapper rowMapper) throws DataAccessException
JdbcOperations
query
in interface JdbcOperations
sql
- SQL to executeargs
- arguments to bind to the queryargTypes
- SQL types of the arguments (constants from java.sql.Types)rowMapper
- object that will map one object per row
DataAccessException
- if the query failsTypes
public List query(String sql, Object[] args, RowMapper rowMapper) throws DataAccessException
JdbcOperations
query
in interface JdbcOperations
sql
- SQL to executeargs
- arguments to bind to the query
(leaving it to the PreparedStatement to guess the respective SQL type)rowMapper
- object that will map one object per row
DataAccessException
- if the query failspublic List queryForList(String sql, Object[] args) throws DataAccessException
JdbcOperations
This method is useful for running static SQL with a known outcome. The results will be mapped to an ArrayList (one entry for each row) of HashMaps (one entry for each column using the column name as the key).
queryForList
in interface JdbcOperations
sql
- SQL to executeargs
- arguments to bind to the query
(leaving it to the PreparedStatement to guess the respective SQL type)
DataAccessException
- if the query failsJdbcOperations.queryForList(String)
public Object queryForObject(String sql, Object[] args, Class requiredType) throws DataAccessException
JdbcOperations
This method is useful for running static SQL with a known outcome. The query is expected to be a single row/single column query; the returned result will be directly mapped to the corresponding object type.
queryForObject
in interface JdbcOperations
sql
- SQL to executeargs
- arguments to bind to the query
(leaving it to the PreparedStatement to guess the respective SQL type)requiredType
- the type that the result object is expected to match
DataAccessException
- if the query failsJdbcOperations.queryForObject(String, Class)
public long queryForLong(String sql, Object[] args) throws DataAccessException
JdbcOperations
This method is useful for running static SQL with a known outcome. The query is expected to be a single row/single column query that results in a long value.
queryForLong
in interface JdbcOperations
sql
- SQL to executeargs
- arguments to bind to the query
(leaving it to the PreparedStatement to guess the respective SQL type)
DataAccessException
- if the query failsJdbcOperations.queryForLong(String)
public int queryForInt(String sql, Object[] args) throws DataAccessException
JdbcOperations
This method is useful for running static SQL with a known outcome. The query is expected to be a single row/single column query that results in an int value.
queryForInt
in interface JdbcOperations
sql
- SQL to executeargs
- arguments to bind to the query
(leaving it to the PreparedStatement to guess the respective SQL type)
DataAccessException
- if the query failsJdbcOperations.queryForInt(String)
protected int update(PreparedStatementCreator psc, PreparedStatementSetter pss) throws DataAccessException
DataAccessException
public int update(PreparedStatementCreator psc) throws DataAccessException
JdbcOperations
update
in interface JdbcOperations
psc
- object that provides SQL and any necessary parameters
DataAccessException
- if there is any problem issuing the updatepublic int update(PreparedStatementCreator psc, KeyHolder generatedKeyHolder) throws DataAccessException
JdbcOperations
update
in interface JdbcOperations
psc
- object that provides SQL and any necessary parametersgeneratedKeyHolder
- KeyHolder that will hold the generated keys
DataAccessException
- if there is any problem issuing the updatepublic int update(String sql, PreparedStatementSetter pss) throws DataAccessException
JdbcOperations
update
in interface JdbcOperations
sql
- SQL, containing bind parameterspss
- helper that sets bind parameters. If this is null
we run an update with static SQL.
DataAccessException
- if there is any problem issuing the updatepublic int update(String sql, Object[] args, int[] argTypes) throws DataAccessException
JdbcOperations
update
in interface JdbcOperations
sql
- SQL, containing bind parametersargs
- arguments to bind to the queryargTypes
- SQL types of the arguments (constants from java.sql.Types)
DataAccessException
- if there is any problem issuing the updatepublic int update(String sql, Object[] args) throws DataAccessException
JdbcOperations
update
in interface JdbcOperations
sql
- SQL, containing bind parametersargs
- arguments to bind to the query
(leaving it to the PreparedStatement to guess the respective SQL type)
DataAccessException
- if there is any problem issuing the updatepublic int[] batchUpdate(String sql, BatchPreparedStatementSetter pss) throws DataAccessException
JdbcOperations
Will fall back to separate updates on a single PreparedStatement if the JDBC driver does not support batch updates.
batchUpdate
in interface JdbcOperations
sql
- defining PreparedStatement that will be reused.
All statements in the batch will use the same SQL.pss
- object to set parameters on the PreparedStatement
created by this method
DataAccessException
- if there is any problem issuing the updatepublic Object execute(CallableStatementCreator csc, CallableStatementCallback action)
JdbcOperations
execute
in interface JdbcOperations
csc
- object that can create a CallableStatement given a Connectionaction
- callback object that specifies the action
public Object execute(String callString, CallableStatementCallback action)
JdbcOperations
execute
in interface JdbcOperations
callString
- the SQL call string to executeaction
- callback object that specifies the action
public Map call(CallableStatementCreator csc, List declaredParameters) throws DataAccessException
JdbcOperations
call
in interface JdbcOperations
csc
- object that provides SQL and any necessary parametersdeclaredParameters
- list of declared SqlParameter objects
DataAccessException
- if there is any problem issuing the updateprotected Map extractReturnedResultSets(CallableStatement cs, List parameters, int updateCount) throws SQLException
cs
- JDBC wrapper for the stored procedureparameters
- Parameter list for the stored procedure
SQLException
protected Map extractOutputParameters(CallableStatement cs, List parameters) throws SQLException
cs
- JDBC wrapper for the stored procedureparameters
- parameter list for the stored procedure
SQLException
protected Map processResultSet(ResultSet rs, ResultSetSupportingSqlParameter param) throws SQLException
rs
- the ResultSet to processparam
- the corresponding stored procedure parameter
SQLException
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |