public class QueryRunner
extends java.lang.Object
ResultSet
s. This class is thread safe.ResultSetHandler
Modifier and Type | Field and Description |
---|---|
protected javax.sql.DataSource |
ds
The DataSource to retrieve connections from.
|
Constructor and Description |
---|
QueryRunner()
Constructor for QueryRunner.
|
QueryRunner(javax.sql.DataSource ds)
Constructor for QueryRunner.
|
Modifier and Type | Method and Description |
---|---|
int[] |
batch(java.sql.Connection conn,
java.lang.String sql,
java.lang.Object[][] params)
Execute a batch of SQL INSERT, UPDATE, or DELETE queries.
|
int[] |
batch(java.sql.Connection conn,
java.lang.String sql,
java.lang.Object[][] params,
int[] paramTypes)
Execute a batch of SQL INSERT, UPDATE, or DELETE queries.
|
int[] |
batch(java.lang.String sql,
java.lang.Object[][] params)
Execute a batch of SQL INSERT, UPDATE, or DELETE queries.
|
int[] |
batch(java.lang.String sql,
java.lang.Object[][] params,
int[] paramTypes)
Execute a batch of SQL INSERT, UPDATE, or DELETE queries.
|
protected void |
close(java.sql.Connection conn)
Close a
Connection . |
protected void |
close(java.sql.ResultSet rs)
Close a
ResultSet . |
protected void |
close(java.sql.Statement stmt)
Close a
Statement . |
protected void |
fillStatement(java.sql.PreparedStatement stmt,
java.lang.Object[] params)
Fill the
PreparedStatement replacement parameters with
the given objects. |
protected void |
fillStatement(java.sql.PreparedStatement stmt,
java.lang.Object[] params,
int[] paramTypes)
Fill the
PreparedStatement replacement parameters with
the given objects. |
javax.sql.DataSource |
getDataSource()
Returns the
DataSource this runner is using. |
protected java.sql.Connection |
prepareConnection()
Factory method that creates and initializes a
Connection object. |
protected java.sql.PreparedStatement |
prepareStatement(java.sql.Connection conn,
java.lang.String sql)
Factory method that creates and initializes a
PreparedStatement object for the given SQL. |
<T> T |
query(java.sql.Connection conn,
java.lang.String sql,
java.lang.Object[] params,
int[] paramTypes,
ResultSetHandler<T> rsh)
Execute an SQL SELECT query with replacement parameters.
|
<T> T |
query(java.sql.Connection conn,
java.lang.String sql,
java.lang.Object[] params,
ResultSetHandler<T> rsh)
Execute an SQL SELECT query with replacement parameters.
|
<T> T |
query(java.sql.Connection conn,
java.lang.String sql,
java.lang.Object param,
ResultSetHandler<T> rsh)
Execute an SQL SELECT query with a single replacement parameter.
|
<T> T |
query(java.sql.Connection conn,
java.lang.String sql,
ResultSetHandler<T> rsh)
Execute an SQL SELECT query without any replacement parameters.
|
<T> T |
query(java.lang.String sql,
java.lang.Object[] params,
int[] paramTypes,
ResultSetHandler<T> rsh)
Executes the given SELECT SQL query and returns a result object.
|
<T> T |
query(java.lang.String sql,
java.lang.Object[] params,
ResultSetHandler<T> rsh)
Executes the given SELECT SQL query and returns a result object.
|
<T> T |
query(java.lang.String sql,
java.lang.Object param,
ResultSetHandler<T> rsh)
Executes the given SELECT SQL with a single replacement parameter.
|
<T> T |
query(java.lang.String sql,
ResultSetHandler<T> rsh)
Executes the given SELECT SQL without any replacement parameters.
|
protected void |
rethrow(java.sql.SQLException cause,
java.lang.String sql,
java.lang.Object[] params)
Throws a new exception with a more informative error message.
|
void |
setDataSource(javax.sql.DataSource dataSource)
Sets the
DataSource this runner will use to get
database connections from. |
int |
update(java.sql.Connection conn,
java.lang.String sql)
Execute an SQL INSERT, UPDATE, or DELETE query without replacement
parameters.
|
int |
update(java.sql.Connection conn,
java.lang.String sql,
java.lang.Object param)
Execute an SQL INSERT, UPDATE, or DELETE query with a single replacement
parameter.
|
int |
update(java.sql.Connection conn,
java.lang.String sql,
java.lang.Object[] params)
Execute an SQL INSERT, UPDATE, or DELETE query.
|
int |
update(java.sql.Connection conn,
java.lang.String sql,
java.lang.Object[] params,
int[] paramTypes)
Execute an SQL INSERT, UPDATE, or DELETE query.
|
int |
update(java.lang.String sql)
Executes the given INSERT, UPDATE, or DELETE SQL statement without
any replacement parameters.
|
int |
update(java.lang.String sql,
java.lang.Object param)
Executes the given INSERT, UPDATE, or DELETE SQL statement with
a single replacement parameter.
|
int |
update(java.lang.String sql,
java.lang.Object[] params)
Executes the given INSERT, UPDATE, or DELETE SQL statement.
|
int |
update(java.lang.String sql,
java.lang.Object[] params,
int[] paramTypes)
Executes the given INSERT, UPDATE, or DELETE SQL statement.
|
protected java.sql.ResultSet |
wrap(java.sql.ResultSet rs)
Wrap the
ResultSet in a decorator before processing it. |
public QueryRunner()
public QueryRunner(javax.sql.DataSource ds)
Connection
parameter will retrieve connections from this
DataSource
.ds
- The DataSource
to retrieve connections from.public int[] batch(java.sql.Connection conn, java.lang.String sql, java.lang.Object[][] params) throws java.sql.SQLException
conn
- The Connection to use to run the query. The caller is
responsible for closing this Connection.sql
- The SQL to execute.params
- An array of query replacement parameters. Each row in
this array is one set of batch replacement values.java.sql.SQLException
- if a database access error occurspublic int[] batch(java.sql.Connection conn, java.lang.String sql, java.lang.Object[][] params, @Nullable int[] paramTypes) throws java.sql.SQLException
conn
- The Connection to use to run the query. The caller is
responsible for closing this Connection.sql
- The SQL to execute.params
- An array of query replacement parameters. Each row in
this array is one set of batch replacement values.paramTypes
- Query replacement parameters types; null
is a valid
value to pass in.java.sql.SQLException
- if a database access error occurspublic int[] batch(java.lang.String sql, java.lang.Object[][] params) throws java.sql.SQLException
Connection
is retrieved from the DataSource
set in the constructor. This Connection
must be in
auto-commit mode or the update will not be saved.sql
- The SQL to execute.params
- An array of query replacement parameters. Each row in
this array is one set of batch replacement values.java.sql.SQLException
- if a database access error occurspublic int[] batch(java.lang.String sql, java.lang.Object[][] params, @Nullable int[] paramTypes) throws java.sql.SQLException
Connection
is retrieved from the DataSource
set in the constructor. This Connection
must be in
auto-commit mode or the update will not be saved.sql
- The SQL to execute.params
- An array of query replacement parameters. Each row in
this array is one set of batch replacement values.paramTypes
- Query replacement parameters types; null
is a valid
value to pass in.java.sql.SQLException
- if a database access error occursprotected void fillStatement(java.sql.PreparedStatement stmt, java.lang.Object[] params) throws java.sql.SQLException
PreparedStatement
replacement parameters with
the given objects.stmt
- PreparedStatement to fillparams
- Query replacement parameters; null
is a valid
value to pass in.java.sql.SQLException
- if a database access error occursprotected void fillStatement(java.sql.PreparedStatement stmt, @Nullable java.lang.Object[] params, @Nullable int[] paramTypes) throws java.sql.SQLException
PreparedStatement
replacement parameters with
the given objects.stmt
- PreparedStatement to fillparams
- Query replacement parameters; null
is a valid
value to pass in.paramTypes
- Query replacement parameters types; null
is a valid
value to pass in.java.sql.SQLException
- if a database access error occurs@Nullable public javax.sql.DataSource getDataSource()
DataSource
this runner is using.
QueryRunner
methods always call this method to get the
DataSource
so subclasses can provide specialized
behavior.protected java.sql.PreparedStatement prepareStatement(java.sql.Connection conn, java.lang.String sql) throws java.sql.SQLException
PreparedStatement
object for the given SQL.
QueryRunner
methods always call this method to prepare
statements for them. Subclasses can override this method to provide
special PreparedStatement configuration if needed. This implementation
simply calls conn.prepareStatement(sql)
.conn
- The Connection
used to create the
PreparedStatement
sql
- The SQL statement to prepare.PreparedStatement
.java.sql.SQLException
- if a database access error occursprotected java.sql.Connection prepareConnection() throws java.sql.SQLException
Connection
object. QueryRunner
methods
always call this method to retrieve connections from its DataSource.
Subclasses can override this method to provide
special Connection
configuration if needed. This
implementation simply calls ds.getConnection()
.Connection
.java.sql.SQLException
- if a database access error occurspublic <T> T query(java.sql.Connection conn, java.lang.String sql, java.lang.Object param, ResultSetHandler<T> rsh) throws java.sql.SQLException
conn
- The connection to execute the query in.sql
- The query to execute.param
- The replacement parameter.rsh
- The handler that converts the results into an object.java.sql.SQLException
- if a database access error occurspublic <T> T query(java.sql.Connection conn, java.lang.String sql, @Nullable java.lang.Object[] params, ResultSetHandler<T> rsh) throws java.sql.SQLException
conn
- The connection to execute the query in.sql
- The query to execute.params
- The replacement parameters.rsh
- The handler that converts the results into an object.java.sql.SQLException
- if a database access error occurspublic <T> T query(java.sql.Connection conn, java.lang.String sql, @Nullable java.lang.Object[] params, @Nullable int[] paramTypes, ResultSetHandler<T> rsh) throws java.sql.SQLException
conn
- The connection to execute the query in.sql
- The query to execute.params
- The replacement parameters.paramTypes
- The query replacement parameter types.rsh
- The handler that converts the results into an object.java.sql.SQLException
- if a database access error occurspublic <T> T query(java.sql.Connection conn, java.lang.String sql, ResultSetHandler<T> rsh) throws java.sql.SQLException
conn
- The connection to execute the query in.sql
- The query to execute.rsh
- The handler that converts the results into an object.java.sql.SQLException
- if a database access error occurspublic <T> T query(java.lang.String sql, java.lang.Object param, ResultSetHandler<T> rsh) throws java.sql.SQLException
Connection
is retrieved from the
DataSource
set in the constructor.sql
- The SQL statement to execute.param
- The replacement parameter.rsh
- The handler used to create the result object from
the ResultSet
.java.sql.SQLException
- if a database access error occurspublic <T> T query(java.lang.String sql, @Nullable java.lang.Object[] params, ResultSetHandler<T> rsh) throws java.sql.SQLException
Connection
is retrieved from the
DataSource
set in the constructor.sql
- The SQL statement to execute.params
- Initialize the PreparedStatement's IN parameters with
this array.rsh
- The handler used to create the result object from
the ResultSet
.java.sql.SQLException
- if a database access error occurspublic <T> T query(java.lang.String sql, @Nullable java.lang.Object[] params, @Nullable int[] paramTypes, ResultSetHandler<T> rsh) throws java.sql.SQLException
Connection
is retrieved from the
DataSource
set in the constructor.sql
- The SQL statement to execute.params
- Initialize the PreparedStatement's IN parameters with
this array.paramTypes
- The query replacement parameter types.rsh
- The handler used to create the result object from
the ResultSet
.java.sql.SQLException
- if a database access error occurspublic <T> T query(java.lang.String sql, ResultSetHandler<T> rsh) throws java.sql.SQLException
Connection
is retrieved from the
DataSource
set in the constructor.sql
- The SQL statement to execute.rsh
- The handler used to create the result object from
the ResultSet
.java.sql.SQLException
- if a database access error occursprotected void rethrow(java.sql.SQLException cause, java.lang.String sql, @Nullable java.lang.Object[] params) throws java.sql.SQLException
cause
- The original exception that will be chained to the new
exception when it's rethrown.sql
- The query that was executing when the exception happened.params
- The query replacement parameters; null
is a
valid value to pass in.java.sql.SQLException
- if a database access error occurspublic void setDataSource(javax.sql.DataSource dataSource)
DataSource
this runner will use to get
database connections from. This should be called after creating a
runner with the default constructor if you intend to use the
execute methods without passing in a Connection
.dataSource
- The DataSource to use.public int update(java.sql.Connection conn, java.lang.String sql) throws java.sql.SQLException
conn
- The connection to use to run the query.sql
- The SQL to execute.java.sql.SQLException
- if a database access error occurspublic int update(java.sql.Connection conn, java.lang.String sql, java.lang.Object param) throws java.sql.SQLException
conn
- The connection to use to run the query.sql
- The SQL to execute.param
- The replacement parameter.java.sql.SQLException
- if a database access error occurspublic int update(java.sql.Connection conn, java.lang.String sql, @Nullable java.lang.Object[] params) throws java.sql.SQLException
conn
- The connection to use to run the query.sql
- The SQL to execute.params
- The query replacement parameters.java.sql.SQLException
- if a database access error occurspublic int update(java.sql.Connection conn, java.lang.String sql, @Nullable java.lang.Object[] params, @Nullable int[] paramTypes) throws java.sql.SQLException
conn
- The connection to use to run the query.sql
- The SQL to execute.params
- The query replacement parameters.paramTypes
- The query replacement parameter types.java.sql.SQLException
- if a database access error occurspublic int update(java.lang.String sql) throws java.sql.SQLException
Connection
is retrieved
from the DataSource
set in the constructor. This
Connection
must be in auto-commit mode or the update will
not be saved.sql
- The SQL statement to execute.java.sql.SQLException
- if a database access error occurspublic int update(java.lang.String sql, java.lang.Object param) throws java.sql.SQLException
Connection
is
retrieved from the DataSource
set in the constructor.
This Connection
must be in auto-commit mode or the
update will not be saved.sql
- The SQL statement to execute.param
- The replacement parameter.java.sql.SQLException
- if a database access error occurspublic int update(java.lang.String sql, @Nullable java.lang.Object[] params) throws java.sql.SQLException
Connection
is retrieved from the DataSource
set in the constructor. This Connection
must be in
auto-commit mode or the update will not be saved.sql
- The SQL statement to execute.params
- Initializes the PreparedStatement's IN (i.e. '?')
parameters.java.sql.SQLException
- if a database access error occurspublic int update(java.lang.String sql, java.lang.Object[] params, int[] paramTypes) throws java.sql.SQLException
Connection
is retrieved from the DataSource
set in the constructor. This Connection
must be in
auto-commit mode or the update will not be saved.sql
- The SQL statement to execute.params
- Initializes the PreparedStatement's IN (i.e. '?')
parameters.paramTypes
- The query replacement parameter types.java.sql.SQLException
- if a database access error occursprotected java.sql.ResultSet wrap(java.sql.ResultSet rs)
ResultSet
in a decorator before processing it.
This implementation returns the ResultSet
it is given
without any decoration.
Often, the implementation of this method can be done in an anonymous inner class like this:
QueryRunner run = new QueryRunner() { protected ResultSet wrap(ResultSet rs) { return StringTrimmedResultSet.wrap(rs); } };
rs
- The ResultSet
to decorate; never
null
.ResultSet
wrapped in some decorator.protected void close(java.sql.Connection conn) throws java.sql.SQLException
Connection
. This implementation avoids closing if
null and does not suppress any exceptions. Subclasses
can override to provide special handling like logging.conn
- Connection to closejava.sql.SQLException
- if a database access error occursprotected void close(@Nullable java.sql.Statement stmt) throws java.sql.SQLException
Statement
. This implementation avoids closing if
null and does not suppress any exceptions. Subclasses
can override to provide special handling like logging.stmt
- Statement to closejava.sql.SQLException
- if a database access error occursprotected void close(@Nullable java.sql.ResultSet rs) throws java.sql.SQLException
ResultSet
. This implementation avoids closing if
null and does not suppress any exceptions. Subclasses
can override to provide special handling like logging.rs
- ResultSet to closejava.sql.SQLException
- if a database access error occurs