Class 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 through getDataSource().
      private boolean pmdKnownBroken
      Is ParameterMetaData.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 of ParameterMetaData.
      AbstractQueryRunner​(javax.sql.DataSource ds)
      Constructor to provide a DataSource.
      AbstractQueryRunner​(javax.sql.DataSource ds, boolean pmdKnownBroken)
      Constructor to provide a DataSource and control the use of ParameterMetaData.
      AbstractQueryRunner​(javax.sql.DataSource ds, boolean pmdKnownBroken, StatementConfiguration stmtConfig)
      Constructor for QueryRunner that takes a DataSource, a StatementConfiguration, and controls the use of ParameterMetaData.
      AbstractQueryRunner​(javax.sql.DataSource ds, StatementConfiguration stmtConfig)
      Constructor for QueryRunner that takes a DataSource to use and a StatementConfiguration.
      AbstractQueryRunner​(StatementConfiguration stmtConfig)
      Constructor for QueryRunner that takes a StatementConfiguration 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 a Connection.
      protected void close​(java.sql.ResultSet rs)
      Close a ResultSet.
      protected void close​(java.sql.Statement stmt)
      Close a Statement.
      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 the PreparedStatement replacement parameters with the given objects.
      void fillStatementWithBean​(java.sql.PreparedStatement stmt, java.lang.Object bean, java.beans.PropertyDescriptor[] properties)
      Fill the PreparedStatement 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 the PreparedStatement replacement parameters with the given object's bean property values.
      javax.sql.DataSource getDataSource()
      Returns the DataSource this runner is using.
      boolean isPmdKnownBroken()
      Some drivers don't support ParameterMetaData.getParameterType(int); if pmdKnownBroken 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 a CallableStatement object for the given SQL.
      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.
      protected java.sql.PreparedStatement prepareStatement​(java.sql.Connection conn, java.lang.String sql, int returnedKeys)
      Factory method that creates and initializes a PreparedStatement 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 the ResultSet in a decorator before processing it.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • pmdKnownBroken

        private volatile boolean pmdKnownBroken
        Is ParameterMetaData.getParameterType(int) broken (have we tried it yet)?
      • ds

        @Deprecated
        protected final javax.sql.DataSource ds
        Deprecated.
        Access to this field should be through getDataSource().
        The DataSource to retrieve connections from.
    • 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 of ParameterMetaData.
        Parameters:
        pmdKnownBroken - Some drivers don't support ParameterMetaData.getParameterType(int); if pmdKnownBroken 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 a DataSource. Methods that do not take a Connection parameter will retrieve connections from this DataSource.
        Parameters:
        ds - The DataSource to retrieve connections from.
      • AbstractQueryRunner

        public AbstractQueryRunner​(javax.sql.DataSource ds,
                                   boolean pmdKnownBroken)
        Constructor to provide a DataSource and control the use of ParameterMetaData. Methods that do not take a Connection parameter will retrieve connections from this DataSource.
        Parameters:
        ds - The DataSource to retrieve connections from.
        pmdKnownBroken - Some drivers don't support ParameterMetaData.getParameterType(int); if pmdKnownBroken 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 a DataSource, a StatementConfiguration, and controls the use of ParameterMetaData. Methods that do not take a Connection parameter will retrieve connections from this DataSource.
        Parameters:
        ds - The DataSource to retrieve connections from.
        pmdKnownBroken - Some drivers don't support ParameterMetaData.getParameterType(int); if pmdKnownBroken 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 a DataSource to use and a StatementConfiguration. Methods that do not take a Connection parameter will retrieve connections from this DataSource.
        Parameters:
        ds - The DataSource 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 a StatementConfiguration 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 a Connection. 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 a ResultSet. 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 a Statement. 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 the PreparedStatement replacement parameters with the given objects.
        Parameters:
        stmt - PreparedStatement to fill
        params - 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 the PreparedStatement replacement parameters with the given object's bean property values.
        Parameters:
        stmt - PreparedStatement to fill
        bean - a JavaBean object
        properties - 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 the PreparedStatement replacement parameters with the given object's bean property values.
        Parameters:
        stmt - PreparedStatement to fill
        bean - A JavaBean object
        propertyNames - 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 the DataSource this runner is using. QueryRunner methods always call this method to get the DataSource so subclasses can provide specialized behavior.
        Returns:
        DataSource the runner is using
      • isPmdKnownBroken

        public boolean isPmdKnownBroken()
        Some drivers don't support ParameterMetaData.getParameterType(int); if pmdKnownBroken 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 a CallableStatement 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 calls conn.prepareCall(sql).
        Parameters:
        conn - The Connection used to create the CallableStatement
        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 a 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().
        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 a 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).
        Parameters:
        conn - The Connection used to create the PreparedStatement
        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 a 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, returnedKeys) which will result in the ability to retrieve the automatically-generated keys from an auto_increment column.
        Parameters:
        conn - The Connection used to create the PreparedStatement
        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 the 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);
             }
         };
         
        Parameters:
        rs - The ResultSet to decorate; never null.
        Returns:
        The ResultSet wrapped in some decorator.