Package org.apache.commons.dbutils
Class AbstractQueryRunner
- java.lang.Object
-
- org.apache.commons.dbutils.AbstractQueryRunner
-
- Direct Known Subclasses:
AsyncQueryRunner
,QueryRunner
public abstract class AbstractQueryRunner extends java.lang.Object
The base class for QueryRunner & AsyncQueryRunner. This class is thread safe.- Since:
- 1.4 (mostly extracted from QueryRunner)
-
-
Field Summary
Fields Modifier and Type Field Description protected javax.sql.DataSource
ds
Deprecated.Access to this field should be throughgetDataSource()
.private boolean
pmdKnownBroken
IsParameterMetaData.getParameterType(int)
broken (have we tried it yet)?private StatementConfiguration
stmtConfig
Configuration to use when preparing statements.
-
Constructor Summary
Constructors Constructor Description AbstractQueryRunner()
Default constructor, sets pmdKnownBroken to false, ds to null and stmtConfig to null.AbstractQueryRunner(boolean pmdKnownBroken)
Constructor to control the use ofParameterMetaData
.AbstractQueryRunner(javax.sql.DataSource ds)
Constructor to provide aDataSource
.AbstractQueryRunner(javax.sql.DataSource ds, boolean pmdKnownBroken)
Constructor to provide aDataSource
and control the use ofParameterMetaData
.AbstractQueryRunner(javax.sql.DataSource ds, boolean pmdKnownBroken, StatementConfiguration stmtConfig)
Constructor for QueryRunner that takes aDataSource
, aStatementConfiguration
, and controls the use ofParameterMetaData
.AbstractQueryRunner(javax.sql.DataSource ds, StatementConfiguration stmtConfig)
Constructor for QueryRunner that takes aDataSource
to use and aStatementConfiguration
.AbstractQueryRunner(StatementConfiguration stmtConfig)
Constructor for QueryRunner that takes aStatementConfiguration
to configure statements when preparing them.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
close(java.sql.Connection conn)
Close aConnection
.protected void
close(java.sql.ResultSet rs)
Close aResultSet
.protected void
close(java.sql.Statement stmt)
Close aStatement
.protected void
closeQuietly(java.sql.Connection conn)
protected void
closeQuietly(java.sql.ResultSet rs)
protected void
closeQuietly(java.sql.Statement statement)
private void
configureStatement(java.sql.Statement stmt)
void
fillStatement(java.sql.PreparedStatement stmt, java.lang.Object... params)
Fill thePreparedStatement
replacement parameters with the given objects.void
fillStatementWithBean(java.sql.PreparedStatement stmt, java.lang.Object bean, java.beans.PropertyDescriptor[] properties)
Fill thePreparedStatement
replacement parameters with the given object's bean property values.void
fillStatementWithBean(java.sql.PreparedStatement stmt, java.lang.Object bean, java.lang.String... propertyNames)
Fill thePreparedStatement
replacement parameters with the given object's bean property values.javax.sql.DataSource
getDataSource()
Returns theDataSource
this runner is using.boolean
isPmdKnownBroken()
Some drivers don't supportParameterMetaData.getParameterType(int)
; ifpmdKnownBroken
is set to true, we won't even try it; if false, we'll try it, and if it breaks, we'll remember not to use it again.protected java.sql.CallableStatement
prepareCall(java.sql.Connection conn, java.lang.String sql)
Factory method that creates and initializes aCallableStatement
object for the given SQL.protected java.sql.Connection
prepareConnection()
Factory method that creates and initializes aConnection
object.protected java.sql.PreparedStatement
prepareStatement(java.sql.Connection conn, java.lang.String sql)
Factory method that creates and initializes aPreparedStatement
object for the given SQL.protected java.sql.PreparedStatement
prepareStatement(java.sql.Connection conn, java.lang.String sql, int returnedKeys)
Factory method that creates and initializes aPreparedStatement
object for the given SQL.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.protected java.sql.ResultSet
wrap(java.sql.ResultSet rs)
Wrap theResultSet
in a decorator before processing it.
-
-
-
Field Detail
-
pmdKnownBroken
private volatile boolean pmdKnownBroken
IsParameterMetaData.getParameterType(int)
broken (have we tried it yet)?
-
ds
@Deprecated protected final javax.sql.DataSource ds
Deprecated.Access to this field should be throughgetDataSource()
.The DataSource to retrieve connections from.
-
stmtConfig
private final StatementConfiguration stmtConfig
Configuration to use when preparing statements.
-
-
Constructor Detail
-
AbstractQueryRunner
public AbstractQueryRunner()
Default constructor, sets pmdKnownBroken to false, ds to null and stmtConfig to null.
-
AbstractQueryRunner
public AbstractQueryRunner(boolean pmdKnownBroken)
Constructor to control the use ofParameterMetaData
.- Parameters:
pmdKnownBroken
- Some drivers don't supportParameterMetaData.getParameterType(int)
; ifpmdKnownBroken
is set to true, we won't even try it; if false, we'll try it, and if it breaks, we'll remember not to use it again.
-
AbstractQueryRunner
public AbstractQueryRunner(javax.sql.DataSource ds)
Constructor to provide aDataSource
. Methods that do not take aConnection
parameter will retrieve connections from thisDataSource
.- Parameters:
ds
- TheDataSource
to retrieve connections from.
-
AbstractQueryRunner
public AbstractQueryRunner(javax.sql.DataSource ds, boolean pmdKnownBroken)
Constructor to provide aDataSource
and control the use ofParameterMetaData
. Methods that do not take aConnection
parameter will retrieve connections from thisDataSource
.- Parameters:
ds
- TheDataSource
to retrieve connections from.pmdKnownBroken
- Some drivers don't supportParameterMetaData.getParameterType(int)
; ifpmdKnownBroken
is set to true, we won't even try it; if false, we'll try it, and if it breaks, we'll remember not to use it again.
-
AbstractQueryRunner
public AbstractQueryRunner(javax.sql.DataSource ds, boolean pmdKnownBroken, StatementConfiguration stmtConfig)
Constructor for QueryRunner that takes aDataSource
, aStatementConfiguration
, and controls the use ofParameterMetaData
. Methods that do not take aConnection
parameter will retrieve connections from thisDataSource
.- Parameters:
ds
- TheDataSource
to retrieve connections from.pmdKnownBroken
- Some drivers don't supportParameterMetaData.getParameterType(int)
; ifpmdKnownBroken
is set to true, we won't even try it; if false, we'll try it, and if it breaks, we'll remember not to use it again.stmtConfig
- The configuration to apply to statements when they are prepared.
-
AbstractQueryRunner
public AbstractQueryRunner(javax.sql.DataSource ds, StatementConfiguration stmtConfig)
Constructor for QueryRunner that takes aDataSource
to use and aStatementConfiguration
. Methods that do not take aConnection
parameter will retrieve connections from thisDataSource
.- Parameters:
ds
- TheDataSource
to retrieve connections from.stmtConfig
- The configuration to apply to statements when they are prepared.
-
AbstractQueryRunner
public AbstractQueryRunner(StatementConfiguration stmtConfig)
Constructor for QueryRunner that takes aStatementConfiguration
to configure statements when preparing them.- Parameters:
stmtConfig
- The configuration to apply to statements when they are prepared.
-
-
Method Detail
-
close
protected void close(java.sql.Connection conn) throws java.sql.SQLException
Close aConnection
. This implementation avoids closing if null and does not suppress any exceptions. Subclasses can override to provide special handling like logging.- Parameters:
conn
- Connection to close- Throws:
java.sql.SQLException
- if a database access error occurs- Since:
- DbUtils 1.1
-
close
protected void close(java.sql.ResultSet rs) throws java.sql.SQLException
Close aResultSet
. This implementation avoids closing if null and does not suppress any exceptions. Subclasses can override to provide special handling like logging.- Parameters:
rs
- ResultSet to close- Throws:
java.sql.SQLException
- if a database access error occurs- Since:
- DbUtils 1.1
-
close
protected void close(java.sql.Statement stmt) throws java.sql.SQLException
Close aStatement
. This implementation avoids closing if null and does not suppress any exceptions. Subclasses can override to provide special handling like logging.- Parameters:
stmt
- Statement to close- Throws:
java.sql.SQLException
- if a database access error occurs- Since:
- DbUtils 1.1
-
closeQuietly
protected void closeQuietly(java.sql.Connection conn)
- Parameters:
conn
- Connection to close.- Since:
- 2.0
-
closeQuietly
protected void closeQuietly(java.sql.ResultSet rs)
- Parameters:
rs
- ResultSet to close.- Since:
- 2.0
-
closeQuietly
protected void closeQuietly(java.sql.Statement statement)
- Parameters:
statement
- ResultSet to close.- Since:
- 2.0
-
configureStatement
private void configureStatement(java.sql.Statement stmt) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
fillStatement
public void fillStatement(java.sql.PreparedStatement stmt, java.lang.Object... params) throws java.sql.SQLException
Fill thePreparedStatement
replacement parameters with the given objects.- Parameters:
stmt
- PreparedStatement to fillparams
- Query replacement parameters;null
is a valid value to pass in.- Throws:
java.sql.SQLException
- if a database access error occurs
-
fillStatementWithBean
public void fillStatementWithBean(java.sql.PreparedStatement stmt, java.lang.Object bean, java.beans.PropertyDescriptor[] properties) throws java.sql.SQLException
Fill thePreparedStatement
replacement parameters with the given object's bean property values.- Parameters:
stmt
- PreparedStatement to fillbean
- a JavaBean objectproperties
- an ordered array of properties; this gives the order to insert values in the statement- Throws:
java.sql.SQLException
- if a database access error occurs
-
fillStatementWithBean
public void fillStatementWithBean(java.sql.PreparedStatement stmt, java.lang.Object bean, java.lang.String... propertyNames) throws java.sql.SQLException
Fill thePreparedStatement
replacement parameters with the given object's bean property values.- Parameters:
stmt
- PreparedStatement to fillbean
- A JavaBean objectpropertyNames
- An ordered array of property names (these should match the getters/setters); this gives the order to insert values in the statement- Throws:
java.sql.SQLException
- If a database access error occurs
-
getDataSource
public javax.sql.DataSource getDataSource()
Returns theDataSource
this runner is using.QueryRunner
methods always call this method to get theDataSource
so subclasses can provide specialized behavior.- Returns:
- DataSource the runner is using
-
isPmdKnownBroken
public boolean isPmdKnownBroken()
Some drivers don't supportParameterMetaData.getParameterType(int)
; ifpmdKnownBroken
is set to true, we won't even try it; if false, we'll try it, and if it breaks, we'll remember not to use it again.- Returns:
- the flag to skip (or not)
ParameterMetaData.getParameterType(int)
- Since:
- 1.4
-
prepareCall
protected java.sql.CallableStatement prepareCall(java.sql.Connection conn, java.lang.String sql) throws java.sql.SQLException
Factory method that creates and initializes aCallableStatement
object for the given SQL.QueryRunner
methods always call this method to prepare callable statements for them. Subclasses can override this method to provide special CallableStatement configuration if needed. This implementation simply callsconn.prepareCall(sql)
.- Parameters:
conn
- TheConnection
used to create theCallableStatement
sql
- The SQL statement to prepare.- Returns:
- An initialized
CallableStatement
. - Throws:
java.sql.SQLException
- if a database access error occurs
-
prepareConnection
protected java.sql.Connection prepareConnection() throws java.sql.SQLException
Factory method that creates and initializes aConnection
object.QueryRunner
methods always call this method to retrieve connections from its DataSource. Subclasses can override this method to provide specialConnection
configuration if needed. This implementation simply callsds.getConnection()
.- Returns:
- An initialized
Connection
. - Throws:
java.sql.SQLException
- if a database access error occurs- Since:
- DbUtils 1.1
-
prepareStatement
protected java.sql.PreparedStatement prepareStatement(java.sql.Connection conn, java.lang.String sql) throws java.sql.SQLException
Factory method that creates and initializes aPreparedStatement
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 callsconn.prepareStatement(sql)
.- Parameters:
conn
- TheConnection
used to create thePreparedStatement
sql
- The SQL statement to prepare.- Returns:
- An initialized
PreparedStatement
. - Throws:
java.sql.SQLException
- if a database access error occurs
-
prepareStatement
protected java.sql.PreparedStatement prepareStatement(java.sql.Connection conn, java.lang.String sql, int returnedKeys) throws java.sql.SQLException
Factory method that creates and initializes aPreparedStatement
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 callsconn.prepareStatement(sql, returnedKeys)
which will result in the ability to retrieve the automatically-generated keys from an auto_increment column.- Parameters:
conn
- TheConnection
used to create thePreparedStatement
sql
- The SQL statement to prepare.returnedKeys
- Flag indicating whether to return generated keys or not.- Returns:
- An initialized
PreparedStatement
. - Throws:
java.sql.SQLException
- if a database access error occurs- Since:
- 1.6
-
rethrow
protected void rethrow(java.sql.SQLException cause, java.lang.String sql, java.lang.Object... params) throws java.sql.SQLException
Throws a new exception with a more informative error message.- Parameters:
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.- Throws:
java.sql.SQLException
- if a database access error occurs
-
wrap
protected java.sql.ResultSet wrap(java.sql.ResultSet rs)
Wrap theResultSet
in a decorator before processing it. This implementation returns theResultSet
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); } };
- Parameters:
rs
- TheResultSet
to decorate; nevernull
.- Returns:
- The
ResultSet
wrapped in some decorator.
-
-