Top Description Fields Constructors Methods
org.springframework.jdbc.object

public Class SqlFunction<T>

extends MappingSqlQuery<T>
Class Inheritance
Type Parameters
<T>
the result type
Imports
java.sql.ResultSet, .SQLException, javax.sql.DataSource, org.springframework.dao.TypeMismatchDataAccessException, org.springframework.jdbc.core.SingleColumnRowMapper, org.springframework.lang.Nullable

SQL "function" wrapper for a query that returns a single row of results. The default behavior is to return an int, but that can be overridden by using the constructor with an extra return type parameter.

Intended to use to call SQL functions that return a single result using a query like "select user()" or "select sysdate from dual". It is not intended for calling more complex stored functions or for using a CallableStatement to invoke a stored procedure or stored function. Use StoredProcedure or SqlCall for this type of processing.

This is a concrete class, which there is often no need to subclass. Code using this package can create an object of this type, declaring SQL and parameters, and then invoke the appropriate run method repeatedly to execute the function. Subclasses are only supposed to add specialized run methods for specific parameter and return types.

Like all RdbmsOperation objects, SqlFunction objects are thread-safe.

Authors
Rod Johnson, Juergen Hoeller, Jean-Pierre Pawlak
See Also
StoredProcedure

Field Summary

Modifier and TypeField and Description
private final SingleColumnRowMapper<T>

Constructor Summary

AccessConstructor and Description
public
SqlFunction()

Constructor to allow use as a JavaBean.

public
SqlFunction(DataSource
the DataSource to obtain connections from
ds
,
String
the SQL to execute
sql
)

Create a new SqlFunction object with SQL, but without parameters.

public
SqlFunction(DataSource
the DataSource to obtain connections from
ds
,
String
the SQL to execute
sql
,
int[]
the SQL types of the parameters, as defined in the java.sql.Types class
types
)

Create a new SqlFunction object with SQL and parameters.

public
SqlFunction(DataSource
the DataSource to obtain connections from
ds
,
String
the SQL to execute
sql
,
int[]
the SQL types of the parameters, as defined in the java.sql.Types class
types
,
Class<T>
the type that the result object is required to match
resultType
)

Create a new SqlFunction object with SQL, parameters and a result type.

Method Summary

Modifier and TypeMethod and Description
protected T
mapRow(ResultSet
the ResultSet we're working through
rs
,
int
row number (from 0) we're up to
rowNum
)

Implements abstract org.springframework.jdbc.object.MappingSqlQuery.mapRow.

This implementation of this method extracts a single value from the single row returned by the function.
public int

Returns:

the value of the function
run
()

Convenient method to run the function without arguments.

public int

Returns:

the value of the function
run
(int
single int parameter
parameter
)

Convenient method to run the function with a single int argument.

public int

Returns:

the value of the function
run
(Object...
array of parameters. These will be objects or object wrapper types for primitives.
parameters
)

Analogous to the SqlQuery.execute([]) method.

public Object

Returns:

the value of the function
runGeneric
()

Convenient method to run the function without arguments, returning the value as an object.

public Object

Returns:

the value of the function as an Object
runGeneric
(int
single int parameter
parameter
)

Convenient method to run the function with a single int argument.

public Object

Returns:

the value of the function, as an Object
runGeneric
(Object[]
array of parameters. These will be objects or object wrapper types for primitives.
parameters
)

Analogous to the SqlQuery.findObject(Object[]) method.

public void
setResultType(Class<T> resultType)

Specify the type that the result object is required to match.

Inherited from org.springframework.jdbc.object.MappingSqlQuery:
mapRow

Field Detail

rowMapperback to summary
private final SingleColumnRowMapper<T> rowMapper

Constructor Detail

SqlFunctionback to summary
public SqlFunction()

Constructor to allow use as a JavaBean. A DataSource, SQL and any parameters must be supplied before invoking the compile method and using this object.

See Also
setDataSource, setSql, compile
SqlFunctionback to summary
public SqlFunction(DataSource ds, String sql)

Create a new SqlFunction object with SQL, but without parameters. Must add parameters or settle with none.

Parameters
ds:DataSource

the DataSource to obtain connections from

sql:String

the SQL to execute

SqlFunctionback to summary
public SqlFunction(DataSource ds, String sql, int[] types)

Create a new SqlFunction object with SQL and parameters.

Parameters
ds:DataSource

the DataSource to obtain connections from

sql:String

the SQL to execute

types:int[]

the SQL types of the parameters, as defined in the java.sql.Types class

See Also
java.sql.Types
SqlFunctionback to summary
public SqlFunction(DataSource ds, String sql, int[] types, Class<T> resultType)

Create a new SqlFunction object with SQL, parameters and a result type.

Parameters
ds:DataSource

the DataSource to obtain connections from

sql:String

the SQL to execute

types:int[]

the SQL types of the parameters, as defined in the java.sql.Types class

resultType:Class<T>

the type that the result object is required to match

See Also
setResultType(Class), java.sql.Types

Method Detail

mapRowback to summary
protected T mapRow(ResultSet rs, int rowNum) throws SQLException

Implements abstract org.springframework.jdbc.object.MappingSqlQuery.mapRow.

This implementation of this method extracts a single value from the single row returned by the function. If there are a different number of rows returned, this is treated as an error.

Parameters
rs:ResultSet

Doc from org.springframework.jdbc.object.MappingSqlQuery.mapRow.

the ResultSet we're working through

rowNum:int

Doc from org.springframework.jdbc.object.MappingSqlQuery.mapRow.

row number (from 0) we're up to

Returns:T

Doc from org.springframework.jdbc.object.MappingSqlQuery.mapRow.

an object of the result type

Annotations
@Override
@Nullable
Exceptions
SQLException:

Doc from org.springframework.jdbc.object.MappingSqlQuery.mapRow.

if there's an error extracting data. Subclasses can simply not catch SQLExceptions, relying on the framework to clean up.

runback to summary
public int run()

Convenient method to run the function without arguments.

Returns:int

the value of the function

runback to summary
public int run(int parameter)

Convenient method to run the function with a single int argument.

Parameters
parameter:int

single int parameter

Returns:int

the value of the function

runback to summary
public int run(Object... parameters)

Analogous to the SqlQuery.execute([]) method. This is a generic method to execute a query, taken a number of arguments.

Parameters
parameters:Object[]

array of parameters. These will be objects or object wrapper types for primitives.

Returns:int

the value of the function

runGenericback to summary
public Object runGeneric()

Convenient method to run the function without arguments, returning the value as an object.

Returns:Object

the value of the function

Annotations
@Nullable
runGenericback to summary
public Object runGeneric(int parameter)

Convenient method to run the function with a single int argument.

Parameters
parameter:int

single int parameter

Returns:Object

the value of the function as an Object

Annotations
@Nullable
runGenericback to summary
public Object runGeneric(Object[] parameters)

Analogous to the SqlQuery.findObject(Object[]) method. This is a generic method to execute a query, taken a number of arguments.

Parameters
parameters:Object[]

array of parameters. These will be objects or object wrapper types for primitives.

Returns:Object

the value of the function, as an Object

Annotations
@Nullable
See Also
execute(Object[])
setResultTypeback to summary
public void setResultType(Class<T> resultType)

Specify the type that the result object is required to match.

If not specified, the result value will be exposed as returned by the JDBC driver.