com.interface21.jdbc.object
Class SqlQuery

java.lang.Object
  |
  +--com.interface21.jdbc.object.RdbmsOperation
        |
        +--com.interface21.jdbc.object.SqlOperation
              |
              +--com.interface21.jdbc.object.SqlQuery
All Implemented Interfaces:
InitializingBean
Direct Known Subclasses:
MappingSqlQueryWithParameters, ReflectionExtractionSqlQuery

public abstract class SqlQuery
extends SqlOperation

Reusable threadsafe object to represent a SQL query. Subclasses must implement the newResultReader() method to provide an object that can save the results of iterating over the ResultSet.
This class provides a number of public final execute() methods that are analogous to the different convenient JDO query execute() methods. Subclasses can either rely on one of these inherited methods, or can add their own custom execution methods, with meaningful names and typed parameters. Each custom query method will invoke one of this class's untype query methods.

Version:
$Id: SqlQuery.java,v 1.2 2003/04/08 11:24:41 isabellem Exp $
Author:
Rod Johnson

Fields inherited from class com.interface21.jdbc.object.RdbmsOperation
logger
 
Constructor Summary
SqlQuery()
          Allow use as a bean
SqlQuery(javax.sql.DataSource ds, java.lang.String sql)
          Convenient constructor.
 
Method Summary
 java.util.List execute()
          Convenient method to execute without parameters
 java.util.List execute(int p1)
          Convenient method to execute with a single int parameter
 java.util.List execute(int p1, int p2)
          Convenient method to execute with two int parameters
 java.util.List execute(java.lang.Object[] parameters)
          All execution goes through this method
 java.util.List execute(java.lang.String p1)
          Convenient method to execute with a single String parameter
 java.lang.Object findObject(int p1)
          Convenience method to find a single object given a single int parameter
 java.lang.Object findObject(int p1, int p2)
          Convenience method to find a single object given two int parameters
 java.lang.Object findObject(java.lang.Object[] parameters)
          Generic findObject method, used by all other findObject() methods. findObject() methods are like EJB entity bean finders, in that it is considered an error if they return more than one result.
 java.lang.Object findObject(java.lang.String p1)
          Convenience method to find a single object given a single String parameter
 int getRowsExpected()
          Gets the number of rows expected.
protected abstract  ResultReader newResultReader(int rowsExpected, java.lang.Object[] parameters)
          Subclasses must implement this method to save a List of objects returned by the execute() method.
protected  void onCompileInternal()
          Subclasses can override this method to implement custom behavior on compilation.
 void setRowsExpected(int rowsExpected)
          Sets the number of rows expected.
 
Methods inherited from class com.interface21.jdbc.object.SqlOperation
compileInternal, getJdbcTemplate, newPreparedStatementCreator
 
Methods inherited from class com.interface21.jdbc.object.RdbmsOperation
afterPropertiesSet, compile, declareParameter, getDataSource, getDeclaredParameters, getSql, isCompiled, setDataSource, setSql, setTypes, validateParameters
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SqlQuery

public SqlQuery()
Allow use as a bean

SqlQuery

public SqlQuery(javax.sql.DataSource ds,
                java.lang.String sql)
Convenient constructor.
Parameters:
ds - DataSource to use to get connections
SQL - to execute. SQL can also be supplied at runtime by overriding the getSql() method.
Method Detail

getRowsExpected

public int getRowsExpected()
Gets the number of rows expected. This can be used to ensure efficient storage of results. The default behavior is not to expect any specific number of rows.
Returns:
Returns a int

setRowsExpected

public void setRowsExpected(int rowsExpected)
Sets the number of rows expected.
Parameters:
rowsExpected - The rowsExpected to set

newResultReader

protected abstract ResultReader newResultReader(int rowsExpected,
                                                java.lang.Object[] parameters)
Subclasses must implement this method to save a List of objects returned by the execute() method.
Parameters:
rowsExpected. - If 0, we don't know how many rows to expect. This parameter can be ignored, but may help some implementations choose the most efficient Collection type: e.g. ArrayList instead of LinkedList for large result sets.
parameters - parameters to the execute() method, in case subclass is interested. May be null if there were no parameters.

execute

public final java.util.List execute(java.lang.Object[] parameters)
                             throws DataAccessException
All execution goes through this method
Parameters:
parameters - parameters, as to JDO queries. Primitive parameters must be represented by their Object wrapper type. The ordering of parameters is significant.
Returns:
a list of objects, one per row of the ResultSet. Normally all these will be of the same class, although it is possible to use different types.

execute

public final java.util.List execute()
                             throws DataAccessException
Convenient method to execute without parameters

execute

public final java.util.List execute(int p1)
                             throws DataAccessException
Convenient method to execute with a single int parameter
Parameters:
p1 - single int parameter

execute

public final java.util.List execute(int p1,
                                    int p2)
                             throws DataAccessException
Convenient method to execute with two int parameters

execute

public final java.util.List execute(java.lang.String p1)
                             throws DataAccessException
Convenient method to execute with a single String parameter

findObject

public final java.lang.Object findObject(java.lang.Object[] parameters)
                                  throws DataAccessException
Generic findObject method, used by all other findObject() methods. findObject() methods are like EJB entity bean finders, in that it is considered an error if they return more than one result.
Returns:
null if not found. Subclasses may choose to treat this as an error and throw an exception.

findObject

public final java.lang.Object findObject(int p1)
                                  throws DataAccessException
Convenience method to find a single object given a single int parameter

findObject

public final java.lang.Object findObject(int p1,
                                         int p2)
                                  throws DataAccessException
Convenience method to find a single object given two int parameters

findObject

public final java.lang.Object findObject(java.lang.String p1)
                                  throws DataAccessException
Convenience method to find a single object given a single String parameter

onCompileInternal

protected void onCompileInternal()
Subclasses can override this method to implement custom behavior on compilation. This implementation does nothing.
Overrides:
onCompileInternal in class SqlOperation


Rod Johnson and Spring contributors 2001-2003.