A facade over Java's normal JDBC APIs providing greatly simplified
resource management and result set handling. Under the covers the
facade hides away details associated with getting connections,
constructing and configuring statements, interacting with the
connection, closing resources and logging errors. Special
features of the facade include using closures to iterate
through result sets, a special GString syntax for representing
prepared statements and treating result sets like collections
of maps with the normal Groovy collection methods available.
or Object[] or Map) support named or named ordinal parameters.
These methods are useful for queries with large numbers of parameters - though the GString
variations are often preferred in such cases too. Reminder: when you see a variant with Object[] as
the type of the last parameter, Groovy allows vararg style parameters so you don't explicitly need to
create an Object[] and if the first parameter is of type Map, Groovy supports named arguments - examples
of both are contained in the examples below.
Named parameter queries use placeholder values in the query String. Two forms are supported
':propname1' and '?.propname2'. For these variations, a single model object is
supplied in the parameter list/array/map. The propname refers to a property of that model object.
The model object could be a map, Expando or domain class instance. Here are some examples:
// using rows() with a named parameter with the parameter supplied in a map
println sql.rows('select * from PROJECT where name=:foo', [foo:'Gradle'])
// as above for eachRow()
sql.eachRow('select * from PROJECT where name=:foo', [foo:'Gradle']) {
// process row
}
// an example using both the ':' and '?.' variants of the notation
println sql.rows('select * from PROJECT where name=:foo and id=?.bar', [foo:'Gradle', bar:40])
// as above but using Groovy's named arguments instead of an explicit map
println sql.rows('select * from PROJECT where name=:foo and id=?.bar', foo:'Gradle', bar:40)
// an example showing rows() with a domain object instead of a map
class MyDomainClass { def baz = 'Griffon' }
println sql.rows('select * from PROJECT where name=?.baz', new MyDomainClass())
// as above for eachRow() with the domain object supplied in a list
sql.eachRow('select * from PROJECT where name=?.baz', [new MyDomainClass()]) {
// process row
}
Named ordinal parameter queries have multiple model objects with the index number (starting
at 1) also supplied in the placeholder. Only the question mark variation of placeholder is supported.
Here are some examples:
// an example showing the model objects as vararg style parameters (since rows() has an Object[] variant)
println sql.rows("select * from PROJECT where name=?1.baz and id=?2.num", new MyDomainClass(), [num:30])
// an example showing the model objects (one domain class and one map) provided in a list
sql.eachRow("select * from PROJECT where name=?1.baz and id=?2.num", [new MyDomainClass(), [num:30]]) {
// do something with row
}
More details
See the method and constructor JavaDoc for more details.
For advanced usage, the class provides numerous extension points for overriding the
facade behavior associated with the various aspects of managing
the interaction with the underlying database.
Author:
Chris Stevenson, James Strachan , Paul King, Marc DeXeT, John Bito, John Hurst, David Durham, Daniel Henrique Alves Lima, David Sutherland
Constructor Summary
Sql (Connection connection)
Constructs an SQL instance using the given Connection.
Sql (DataSource dataSource)
Constructs an SQL instance using the given DataSource.
Sql (Sql parent)
Method Summary
static InParameter
ARRAY (Object value)
protected List <GroovyRowResult >
asList (String sql,
ResultSet rs)
Hook to allow derived classes to override list of result collection behavior.
protected List <GroovyRowResult >
asList (String sql,
ResultSet rs,
Closure metaClosure)
Hook to allow derived classes to override list of result collection behavior.
protected List <GroovyRowResult >
asList (String sql,
ResultSet rs,
int offset,
int maxRows,
Closure metaClosure)
protected String
asSql (GString gstring,
List <Object > values)
Hook to allow derived classes to override sql generation from GStrings.
static InParameter
BIGINT (Object value)
static InParameter
BINARY (Object value)
static InParameter
BIT (Object value)
static InParameter
BLOB (Object value)
static InParameter
BOOLEAN (Object value)
void
cacheConnection (Closure closure)
Caches the connection used while the closure is active.
void
cacheStatements (Closure closure)
Caches every created preparedStatement in Closure closure
Every cached preparedStatement is closed after closure has been called.
int
call (GString gstring)
Performs a stored procedure call with the given embedded parameters.
void
call (GString gstring,
Closure closure)
Performs a stored procedure call with the given parameters,
calling the closure once with all result objects.
int
call (String sql)
Performs a stored procedure call.
int
call (String sql,
List <Object > params)
Performs a stored procedure call with the given parameters.
void
call (String sql,
List <Object > params,
Closure closure)
Performs a stored procedure call with the given parameters.
int
call (String sql,
Object [] params)
Performs a stored procedure call with the given parameters.
static InParameter
CHAR (Object value)
SqlWithParams
checkForNamedParams (String sql,
List <Object > params)
static InParameter
CLOB (Object value)
void
close ()
If this SQL object was created with a Connection then this method closes
the connection.
protected void
closeResources (Connection connection)
An extension point allowing the behavior of resource closing to be
overridden in derived classes.
protected void
closeResources (Connection connection,
Statement statement)
An extension point allowing the behavior of resource closing to be
overridden in derived classes.
protected void
closeResources (Connection connection,
Statement statement,
ResultSet results)
An extension point allowing derived classes to change the behavior
of resource closing.
void
commit ()
If this SQL object was created with a Connection then this method commits
the connection.
protected void
configure (Statement statement)
Provides a hook for derived classes to be able to configure JDBC statements.
protected Connection
createConnection ()
An extension point allowing derived classes to change the behavior of
connection creation.
protected Sql.AbstractQueryCommand
createPreparedQueryCommand (String sql,
List <Object > queryParams)
Factory for the PreparedQueryCommand command pattern object allows subclass to supply implementations
of the command class.
protected Sql.AbstractQueryCommand
createQueryCommand (String sql)
Factory for the QueryCommand command pattern object allows subclasses to
supply implementations of the command class.
static InParameter
DATALINK (Object value)
DataSet
dataSet (Class <?> type)
DataSet
dataSet (String table)
static InParameter
DATE (Object value)
static InParameter
DECIMAL (Object value)
static InParameter
DISTINCT (Object value)
static InParameter
DOUBLE (Object value)
void
eachRow (GString gstring,
Closure closure)
Performs the given SQL query calling the given Closure with each row of the result set.
void
eachRow (GString gstring,
Closure metaClosure,
Closure rowClosure)
Performs the given SQL query calling the given Closure with each row of the result set.
void
eachRow (GString gstring,
Closure metaClosure,
int offset,
int maxRows,
Closure rowClosure)
Performs the given SQL query calling the given closure
with each row of the result set starting at
the provided offset
, and including up to maxRows
number of rows.
void
eachRow (GString gstring,
int offset,
int maxRows,
Closure closure)
Performs the given SQL query calling the given closure
with each row of the result set starting at
the provided offset
, and including up to maxRows
number of rows.
void
eachRow (Map params,
String sql,
Closure closure)
A variant of eachRow(String, java.util.List, groovy.lang.Closure)
useful when providing the named parameters as named arguments.
void
eachRow (Map params,
String sql,
Closure metaClosure,
Closure rowClosure)
A variant of eachRow(String, java.util.List, groovy.lang.Closure, groovy.lang.Closure)
useful when providing the named parameters as named arguments.
void
eachRow (Map map,
String sql,
Closure metaClosure,
int offset,
int maxRows,
Closure rowClosure)
A variant of eachRow(String, java.util.List, groovy.lang.Closure, int, int, groovy.lang.Closure)
allowing the named parameters to be supplied as named arguments.
void
eachRow (Map params,
String sql,
int offset,
int maxRows,
Closure closure)
A variant of eachRow(String, java.util.List, int, int, groovy.lang.Closure)
useful when providing the named parameters as named arguments.
void
eachRow (String sql,
Closure closure)
Performs the given SQL query calling the given Closure with each row of the result set.
void
eachRow (String sql,
Closure metaClosure,
Closure rowClosure)
Performs the given SQL query calling the given rowClosure
with each row of the
result set.
void
eachRow (String sql,
Closure metaClosure,
int offset,
int maxRows,
Closure rowClosure)
Performs the given SQL query calling the given rowClosure
with each row of the result set starting at
the provided offset
, and including up to maxRows
number of rows.
void
eachRow (String sql,
int offset,
int maxRows,
Closure closure)
Performs the given SQL query calling the given closure
with each row of the result set starting at
the provided offset
, and including up to maxRows
number of rows.
void
eachRow (String sql,
List <Object > params,
Closure closure)
Performs the given SQL query calling the given Closure with each row of the result set.
void
eachRow (String sql,
List <Object > params,
Closure metaClosure,
Closure rowClosure)
Performs the given SQL query calling the given Closure with each row of the result set.
void
eachRow (String sql,
List <Object > params,
Closure metaClosure,
int offset,
int maxRows,
Closure rowClosure)
Performs the given SQL query calling the given rowClosure
with each row of the result set starting at
the provided offset
, and including up to maxRows
number of rows.
void
eachRow (String sql,
List <Object > params,
int offset,
int maxRows,
Closure closure)
Performs the given SQL query calling the given closure
with each row of the result set starting at
the provided offset
, and including up to maxRows
number of rows.
void
eachRow (String sql,
Map params,
Closure closure)
A variant of eachRow(String, java.util.List, groovy.lang.Closure)
useful when providing the named parameters as a map.
void
eachRow (String sql,
Map params,
Closure metaClosure,
Closure rowClosure)
A variant of eachRow(String, java.util.List, groovy.lang.Closure, groovy.lang.Closure)
useful when providing the named parameters as a map.
void
eachRow (String sql,
Map map,
Closure metaClosure,
int offset,
int maxRows,
Closure rowClosure)
A variant of eachRow(String, java.util.List, groovy.lang.Closure, int, int, groovy.lang.Closure)
allowing the named parameters to be supplied in a map.
void
eachRow (String sql,
Map params,
int offset,
int maxRows,
Closure closure)
A variant of eachRow(String, java.util.List, int, int, groovy.lang.Closure)
useful when providing the named parameters as a map.
boolean
execute (GString gstring)
Executes the given SQL with embedded expressions inside.
boolean
execute (Map params,
String sql)
A variant of execute(String, java.util.List)
useful when providing the named parameters as named arguments.
boolean
execute (String sql)
Executes the given piece of SQL.
boolean
execute (String sql,
List <Object > params)
Executes the given piece of SQL with parameters.
boolean
execute (String sql,
Object [] params)
Executes the given piece of SQL with parameters.
List <List <Object >>
executeInsert (GString gstring)
Executes the given SQL statement (typically an INSERT statement).
List <List <Object >>
executeInsert (Map params,
String sql)
A variant of firstRow(String, java.util.List)
useful when providing the named parameters as named arguments.
List <List <Object >>
executeInsert (String sql)
Executes the given SQL statement (typically an INSERT statement).
List <List <Object >>
executeInsert (String sql,
List <Object > params)
Executes the given SQL statement (typically an INSERT statement).
List <List <Object >>
executeInsert (String sql,
Object [] params)
Executes the given SQL statement (typically an INSERT statement).
protected ResultSet
executePreparedQuery (String sql,
List <Object > params)
Useful helper method which handles resource management when executing a
prepared query which returns a result set.
protected ResultSet
executeQuery (String sql)
Useful helper method which handles resource management when executing a
query which returns a result set.
int
executeUpdate (GString gstring)
Executes the given SQL update with embedded expressions inside.
int
executeUpdate (Map params,
String sql)
A variant of executeUpdate(String, java.util.List)
useful when providing the named parameters as named arguments.
int
executeUpdate (String sql)
Executes the given SQL update.
int
executeUpdate (String sql,
List <Object > params)
Executes the given SQL update with parameters.
int
executeUpdate (String sql,
Object [] params)
Executes the given SQL update with parameters.
static ExpandedVariable
expand (Object object)
When using GString SQL queries, allows a variable to be expanded
in the Sql string rather than representing an sql parameter.
protected int
findWhereKeyword (String sql)
Hook to allow derived classes to override where clause sniffing.
GroovyRowResult
firstRow (GString gstring)
Performs the given SQL query and return
the first row of the result set.
GroovyRowResult
firstRow (Map params,
String sql)
A variant of firstRow(String, java.util.List)
useful when providing the named parameters as named arguments.
GroovyRowResult
firstRow (String sql)
Performs the given SQL query and return the first row of the result set.
GroovyRowResult
firstRow (String sql,
List <Object > params)
Performs the given SQL query and return the first row of the result set.
GroovyRowResult
firstRow (String sql,
Object [] params)
Performs the given SQL query and return the first row of the result set.
static InParameter
FLOAT (Object value)
Connection
getConnection ()
If this instance was created with a single Connection then the connection
is returned.
DataSource
getDataSource ()
protected List <Object >
getParameters (GString gstring)
Hook to allow derived classes to override behavior associated with
extracting params from a GString.
int
getResultSetConcurrency ()
Gets the resultSetConcurrency for statements created using the connection.
int
getResultSetHoldability ()
Gets the resultSetHoldability for statements created using the connection.
int
getResultSetType ()
Gets the resultSetType for statements created using the connection.
int
getUpdateCount ()
List <Object >
getUpdatedParams (List <Object > params,
List <Tuple > indexPropList)
static InParameter
in (int type,
Object value)
Create a new InParameter
static InOutParameter
inout (InParameter in)
Create an inout parameter using this in parameter.
static InParameter
INTEGER (Object value)
boolean
isCacheNamedQueries ()
boolean
isCacheStatements ()
boolean
isEnableNamedQueries ()
boolean
isWithinBatch ()
Returns true if the current Sql object is currently executing a withBatch
method call.
static InParameter
JAVA_OBJECT (Object value)
static void
loadDriver (String driverClassName)
Attempts to load the JDBC driver on the thread, current or system class
loaders
static InParameter
LONGVARBINARY (Object value)
static InParameter
LONGVARCHAR (Object value)
static Sql
newInstance (Map <String ,Object > args)
Creates a new Sql instance given parameters in a Map.
static Sql
newInstance (String url)
Creates a new Sql instance given a JDBC connection URL.
static Sql
newInstance (String url,
Properties properties)
Creates a new Sql instance given a JDBC connection URL
and some properties.
static Sql
newInstance (String url,
Properties properties,
String driverClassName)
Creates a new Sql instance given a JDBC connection URL,
some properties and a driver class name.
static Sql
newInstance (String url,
String driverClassName)
Creates a new Sql instance given a JDBC connection URL
and a driver class name.
static Sql
newInstance (String url,
String user,
String password)
Creates a new Sql instance given a JDBC connection URL,
a username and a password.
static Sql
newInstance (String url,
String user,
String password,
String driverClassName)
Creates a new Sql instance given a JDBC connection URL,
a username, a password and a driver class name.
static InParameter
NULL (Object value)
protected String
nullify (String sql)
Hook to allow derived classes to override null handling.
static InParameter
NUMERIC (Object value)
static InParameter
OTHER (Object value)
static OutParameter
out (int type)
Create a new OutParameter
SqlWithParams
preCheckForNamedParams (String sql)
void
query (GString gstring,
Closure closure)
Performs the given SQL query, which should return a single
ResultSet
object.
void
query (Map map,
String sql,
Closure closure)
A variant of query(String, java.util.List, groovy.lang.Closure)
useful when providing the named parameters as named arguments.
void
query (String sql,
Closure closure)
Performs the given SQL query, which should return a single
ResultSet
object.
void
query (String sql,
List <Object > params,
Closure closure)
Performs the given SQL query, which should return a single
ResultSet
object.
void
query (String sql,
Map map,
Closure closure)
A variant of query(String, java.util.List, groovy.lang.Closure)
useful when providing the named parameters as a map.
static InParameter
REAL (Object value)
static InParameter
REF (Object value)
static ResultSetOutParameter
resultSet (int type)
Create a new ResultSetOutParameter
void
rollback ()
If this SQL object was created with a Connection then this method rolls back
the connection.
List <GroovyRowResult >
rows (GString gstring)
Performs the given SQL query and return the rows of the result set.
List <GroovyRowResult >
rows (GString gstring,
Closure metaClosure)
Performs the given SQL query and return the rows of the result set.
List <GroovyRowResult >
rows (GString sql,
int offset,
int maxRows)
Performs the given SQL query and return a "page" of rows from the result set.
List <GroovyRowResult >
rows (GString gstring,
int offset,
int maxRows,
Closure metaClosure)
Performs the given SQL query and return a "page" of rows from the result set.
List <GroovyRowResult >
rows (Map params,
String sql)
A variant of rows(String, java.util.List)
useful when providing the named parameters as named arguments.
List <GroovyRowResult >
rows (Map params,
String sql,
Closure metaClosure)
A variant of rows(String, java.util.List, groovy.lang.Closure)
useful when providing the named parameters as named arguments.
List <GroovyRowResult >
rows (Map params,
String sql,
int offset,
int maxRows)
A variant of rows(String, java.util.List, int, int)
useful when providing the named parameters as named arguments.
List <GroovyRowResult >
rows (Map params,
String sql,
int offset,
int maxRows,
Closure metaClosure)
A variant of rows(String, java.util.List, int, int, groovy.lang.Closure)
useful when providing the named parameters as named arguments.
List <GroovyRowResult >
rows (String sql)
Performs the given SQL query and return the rows of the result set.
List <GroovyRowResult >
rows (String sql,
Closure metaClosure)
Performs the given SQL query and return the rows of the result set.
List <GroovyRowResult >
rows (String sql,
int offset,
int maxRows)
Performs the given SQL query and return a "page" of rows from the result set.
List <GroovyRowResult >
rows (String sql,
int offset,
int maxRows,
Closure metaClosure)
Performs the given SQL query and return a "page" of rows from the result set.
List <GroovyRowResult >
rows (String sql,
List <Object > params)
Performs the given SQL query and return the rows of the result set.
List <GroovyRowResult >
rows (String sql,
List <Object > params,
Closure metaClosure)
Performs the given SQL query and return the rows of the result set.
List <GroovyRowResult >
rows (String sql,
List <Object > params,
int offset,
int maxRows)
Performs the given SQL query and return a "page" of rows from the result set.
List <GroovyRowResult >
rows (String sql,
List <Object > params,
int offset,
int maxRows,
Closure metaClosure)
Performs the given SQL query and return a "page" of rows from the result set.
List <GroovyRowResult >
rows (String sql,
Map params,
Closure metaClosure)
A variant of rows(String, java.util.List, groovy.lang.Closure)
useful when providing the named parameters as a map.
List <GroovyRowResult >
rows (String sql,
Map params,
int offset,
int maxRows)
A variant of rows(String, java.util.List, int, int)
useful when providing the named parameters as a map.
List <GroovyRowResult >
rows (String sql,
Map params,
int offset,
int maxRows,
Closure metaClosure)
A variant of rows(String, java.util.List, int, int, groovy.lang.Closure)
useful when providing the named parameters as a map.
List <GroovyRowResult >
rows (String sql,
Object [] params)
Performs the given SQL query and return the rows of the result set.
List <GroovyRowResult >
rows (String sql,
Object [] params,
int offset,
int maxRows)
Performs the given SQL query and return the rows of the result set.
void
setCacheNamedQueries (boolean cacheNamedQueries)
Enables named query caching.
void
setCacheStatements (boolean cacheStatements)
Enables statement caching.
void
setEnableNamedQueries (boolean enableNamedQueries)
Enables named query support.
protected void
setInternalConnection (Connection conn)
Stub needed for testing.
protected void
setObject (PreparedStatement statement,
int i,
Object value)
Strategy method allowing derived classes to handle types differently
such as for CLOBs etc.
protected void
setParameters (List <Object > params,
PreparedStatement statement)
Hook to allow derived classes to override behavior associated with
setting params for a prepared statement.
void
setResultSetConcurrency (int resultSetConcurrency)
Sets the resultSetConcurrency for statements created using the connection.
void
setResultSetHoldability (int resultSetHoldability)
Sets the resultSetHoldability for statements created using the connection.
void
setResultSetType (int resultSetType)
Sets the resultSetType for statements created using the connection.
static InParameter
SMALLINT (Object value)
static InParameter
STRUCT (Object value)
static InParameter
TIME (Object value)
static InParameter
TIMESTAMP (Object value)
static InParameter
TINYINT (Object value)
static InParameter
VARBINARY (Object value)
static InParameter
VARCHAR (Object value)
int[]
withBatch (Closure closure)
Performs the closure (containing batch operations) within a batch.
int[]
withBatch (int batchSize,
Closure closure)
Performs the closure (containing batch operations) within a batch using a given batch size.
int[]
withBatch (int batchSize,
String sql,
Closure closure)
Performs the closure (containing batch operations specific to an associated prepared statement)
within a batch using a given batch size.
int[]
withBatch (String sql,
Closure closure)
Performs the closure (containing batch operations specific to an associated prepared statement)
within a batch.
static void
withInstance (Map <String ,Object > args,
Closure c)
Invokes a closure passing it a new Sql instance created from the given map of arguments.
static void
withInstance (String url,
Closure c)
Invokes a closure passing it a new Sql instance created from the given JDBC connection URL.
static void
withInstance (String url,
Properties properties,
Closure c)
Invokes a closure passing it a new Sql instance created from the given JDBC connection URL and properties.
static void
withInstance (String url,
Properties properties,
String driverClassName,
Closure c)
Invokes a closure passing it a new Sql instance created from the given JDBC connection URL,
properties and driver classname.
static void
withInstance (String url,
String driverClassName,
Closure c)
Invokes a closure passing it a new Sql instance created from the given JDBC connection URL.
static void
withInstance (String url,
String user,
String password,
Closure c)
Invokes a closure passing it a new Sql instance created from the given JDBC connection URL, user and password.
static void
withInstance (String url,
String user,
String password,
String driverClassName,
Closure c)
Invokes a closure passing it a new Sql instance created from the given JDBC connection URL.
void
withStatement (Closure configureStatement)
Allows a closure to be passed in to configure the JDBC statements before they are executed.
void
withTransaction (Closure closure)
Performs the closure within a transaction using a cached connection.
Methods inherited from class java.lang.Object
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait
LOG
protected static final Logger LOG
Hook to allow derived classes to access the log
ARRAY
public static final OutParameter ARRAY
BIGINT
public static final OutParameter BIGINT
BINARY
public static final OutParameter BINARY
BIT
public static final OutParameter BIT
BLOB
public static final OutParameter BLOB
BOOLEAN
public static final OutParameter BOOLEAN
CHAR
public static final OutParameter CHAR
CLOB
public static final OutParameter CLOB
DATALINK
public static final OutParameter DATALINK
DATE
public static final OutParameter DATE
DECIMAL
public static final OutParameter DECIMAL
DISTINCT
public static final OutParameter DISTINCT
DOUBLE
public static final OutParameter DOUBLE
FLOAT
public static final OutParameter FLOAT
INTEGER
public static final OutParameter INTEGER
JAVA_OBJECT
public static final OutParameter JAVA_OBJECT
LONGVARBINARY
public static final OutParameter LONGVARBINARY
LONGVARCHAR
public static final OutParameter LONGVARCHAR
NULL
public static final OutParameter NULL
NUMERIC
public static final OutParameter NUMERIC
OTHER
public static final OutParameter OTHER
REAL
public static final OutParameter REAL
REF
public static final OutParameter REF
SMALLINT
public static final OutParameter SMALLINT
STRUCT
public static final OutParameter STRUCT
TIME
public static final OutParameter TIME
TIMESTAMP
public static final OutParameter TIMESTAMP
TINYINT
public static final OutParameter TINYINT
VARBINARY
public static final OutParameter VARBINARY
VARCHAR
public static final OutParameter VARCHAR
Sql
public Sql (DataSource dataSource)
Constructs an SQL instance using the given DataSource. Each operation
will use a Connection from the DataSource pool and close it when the
operation is completed putting it back into the pool.
Parameters: dataSource
- the DataSource to use
Sql
public Sql (Connection connection)
Constructs an SQL instance using the given Connection. It is the caller's
responsibility to close the Connection after the Sql instance has been
used. Depending on which features you are using, you may be able to do
this on the connection object directly but the preferred approach is to
call the close()
method which will close the connection but also
free any caches resources.
Parameters: connection
- the Connection to use
Sql
public Sql (Sql parent)
newInstance
public static Sql newInstance (String url)
throws SQLException
Creates a new Sql instance given a JDBC connection URL.
Parameters: url
- a database url of the form
jdbc:subprotocol :subname
Returns: a new Sql instance with a connection
Throws:
SQLException
- if a database access error occurs
withInstance
public static void withInstance (String url,
Closure c)
throws SQLException
Invokes a closure passing it a new Sql instance created from the given JDBC connection URL.
The created connection will be closed if required.
Parameters: url
- a database url of the form
jdbc:subprotocol :subname
c
- the Closure to call
Throws:
SQLException
- if a database access error occursSee Also: newInstance(String)
newInstance
public static Sql newInstance (String url,
Properties properties)
throws SQLException
Creates a new Sql instance given a JDBC connection URL
and some properties.
Parameters: url
- a database url of the form
jdbc:subprotocol :subname
properties
- a list of arbitrary string tag/value pairs
as connection arguments; normally at least a "user" and
"password" property should be included
Returns: a new Sql instance with a connection
Throws:
SQLException
- if a database access error occurs
withInstance
public static void withInstance (String url,
Properties properties,
Closure c)
throws SQLException
Invokes a closure passing it a new Sql instance created from the given JDBC connection URL and properties.
The created connection will be closed if required.
Parameters: url
- a database url of the form
jdbc:subprotocol :subname
properties
- a list of arbitrary string tag/value pairs
as connection arguments; normally at least a "user" and
"password" property should be includedc
- the Closure to call
Throws:
SQLException
- if a database access error occursSee Also: newInstance(String, java.util.Properties)
newInstance
public static Sql newInstance (String url,
Properties properties,
String driverClassName)
throws SQLException ,
ClassNotFoundException
Creates a new Sql instance given a JDBC connection URL,
some properties and a driver class name.
Parameters: url
- a database url of the form
jdbc:subprotocol :subname
properties
- a list of arbitrary string tag/value pairs
as connection arguments; normally at least a "user" and
"password" property should be includeddriverClassName
- the fully qualified class name of the driver class
Returns: a new Sql instance with a connection
Throws:
SQLException
- if a database access error occurs
ClassNotFoundException
- if the driver class cannot be found or loaded
withInstance
public static void withInstance (String url,
Properties properties,
String driverClassName,
Closure c)
throws SQLException ,
ClassNotFoundException
Invokes a closure passing it a new Sql instance created from the given JDBC connection URL,
properties and driver classname. The created connection will be closed if required.
Parameters: url
- a database url of the form
jdbc:subprotocol :subname
properties
- a list of arbitrary string tag/value pairs
as connection arguments; normally at least a "user" and
"password" property should be includeddriverClassName
- the fully qualified class name of the driver classc
- the Closure to call
Throws:
SQLException
- if a database access error occurs
ClassNotFoundException
- if the driver class cannot be found or loadedSee Also: newInstance(String, java.util.Properties, String)
newInstance
public static Sql newInstance (String url,
String user,
String password)
throws SQLException
Creates a new Sql instance given a JDBC connection URL,
a username and a password.
Parameters: url
- a database url of the form
jdbc:subprotocol :subname
user
- the database user on whose behalf the connection
is being madepassword
- the user's password
Returns: a new Sql instance with a connection
Throws:
SQLException
- if a database access error occurs
withInstance
public static void withInstance (String url,
String user,
String password,
Closure c)
throws SQLException
Invokes a closure passing it a new Sql instance created from the given JDBC connection URL, user and password.
The created connection will be closed if required.
Parameters: url
- a database url of the form
jdbc:subprotocol :subname
user
- the database user on whose behalf the connection
is being madepassword
- the user's passwordc
- the Closure to call
Throws:
SQLException
- if a database access error occursSee Also: newInstance(String, String, String)
newInstance
public static Sql newInstance (String url,
String user,
String password,
String driverClassName)
throws SQLException ,
ClassNotFoundException
Creates a new Sql instance given a JDBC connection URL,
a username, a password and a driver class name.
Parameters: url
- a database url of the form
jdbc:subprotocol :subname
user
- the database user on whose behalf the connection
is being madepassword
- the user's passworddriverClassName
- the fully qualified class name of the driver class
Returns: a new Sql instance with a connection
Throws:
SQLException
- if a database access error occurs
ClassNotFoundException
- if the driver class cannot be found or loaded
withInstance
public static void withInstance (String url,
String user,
String password,
String driverClassName,
Closure c)
throws SQLException ,
ClassNotFoundException
Invokes a closure passing it a new Sql instance created from the given JDBC connection URL.
The created connection will be closed if required.
Parameters: url
- a database url of the form
jdbc:subprotocol :subname
user
- the database user on whose behalf the connection
is being madepassword
- the user's passworddriverClassName
- the fully qualified class name of the driver classc
- the Closure to call
Throws:
SQLException
- if a database access error occurs
ClassNotFoundException
- if the driver class cannot be found or loadedSee Also: newInstance(String, String, String, String)
newInstance
public static Sql newInstance (String url,
String driverClassName)
throws SQLException ,
ClassNotFoundException
Creates a new Sql instance given a JDBC connection URL
and a driver class name.
Parameters: url
- a database url of the form
jdbc:subprotocol :subname
driverClassName
- the fully qualified class name of the driver class
Returns: a new Sql instance with a connection
Throws:
SQLException
- if a database access error occurs
ClassNotFoundException
- if the driver class cannot be found or loaded
withInstance
public static void withInstance (String url,
String driverClassName,
Closure c)
throws SQLException ,
ClassNotFoundException
Invokes a closure passing it a new Sql instance created from the given JDBC connection URL.
The created connection will be closed if required.
Parameters: url
- a database url of the form
jdbc:subprotocol :subname
driverClassName
- the fully qualified class name of the driver classc
- the Closure to call
Throws:
SQLException
- if a database access error occurs
ClassNotFoundException
- if the driver class cannot be found or loadedSee Also: newInstance(String, String)
newInstance
public static Sql newInstance (Map <String ,Object > args)
throws SQLException ,
ClassNotFoundException
Creates a new Sql instance given parameters in a Map.
Recognized keys for the Map include:
driverClassName the fully qualified class name of the driver class
driver a synonym for driverClassName
url a database url of the form: jdbc:subprotocol :subname
user the database user on whose behalf the connection is being made
password the user's password
properties a list of arbitrary string tag/value pairs as connection arguments;
normally at least a "user" and "password" property should be included
other any of the public setter methods of this class may be used with property notation
e.g. cacheStatements: true, resultSetConcurrency: ResultSet.CONCUR_READ_ONLY
Of these, 'url
' is required. Others may be needed depending on your database.
If 'properties
' is supplied, neither 'user
' nor 'password
' should be supplied.
If one of 'user
' or 'password
' is supplied, both should be supplied.
Example usage:
import groovy.sql.Sql
import static java.sql.ResultSet.*
def sql = Sql.newInstance(
url:'jdbc:hsqldb:mem:testDB',
user:'sa',
password:'',
driver:'org.hsqldb.jdbcDriver',
cacheStatements: true,
resultSetConcurrency: CONCUR_READ_ONLY
)
Parameters: args
- a Map contain further arguments
Returns: a new Sql instance with a connection
Throws:
SQLException
- if a database access error occurs
ClassNotFoundException
- if the driver class cannot be found or loaded
withInstance
public static void withInstance (Map <String ,Object > args,
Closure c)
throws SQLException ,
ClassNotFoundException
Invokes a closure passing it a new Sql instance created from the given map of arguments.
The created connection will be closed if required.
Parameters: args
- a Map contain further argumentsc
- the Closure to call
Throws:
SQLException
- if a database access error occurs
ClassNotFoundException
- if the driver class cannot be found or loadedSee Also: newInstance(java.util.Map)
getResultSetType
public int getResultSetType ()
Gets the resultSetType for statements created using the connection.
Returns: the current resultSetType value Since:
1.5.2
setResultSetType
public void setResultSetType (int resultSetType)
Sets the resultSetType for statements created using the connection.
May cause SQLFeatureNotSupportedException exceptions to occur if the
underlying database doesn't support the requested type value.
Parameters: resultSetType
- one of the following ResultSet
constants:
ResultSet.TYPE_FORWARD_ONLY
,
ResultSet.TYPE_SCROLL_INSENSITIVE
, or
ResultSet.TYPE_SCROLL_SENSITIVE
Since:
1.5.2
getResultSetConcurrency
public int getResultSetConcurrency ()
Gets the resultSetConcurrency for statements created using the connection.
Returns: the current resultSetConcurrency value Since:
1.5.2
setResultSetConcurrency
public void setResultSetConcurrency (int resultSetConcurrency)
Sets the resultSetConcurrency for statements created using the connection.
May cause SQLFeatureNotSupportedException exceptions to occur if the
underlying database doesn't support the requested concurrency value.
Parameters: resultSetConcurrency
- one of the following ResultSet
constants:
ResultSet.CONCUR_READ_ONLY
or
ResultSet.CONCUR_UPDATABLE
Since:
1.5.2
getResultSetHoldability
public int getResultSetHoldability ()
Gets the resultSetHoldability for statements created using the connection.
Returns: the current resultSetHoldability value or -1 if not set Since:
1.5.2
setResultSetHoldability
public void setResultSetHoldability (int resultSetHoldability)
Sets the resultSetHoldability for statements created using the connection.
May cause SQLFeatureNotSupportedException exceptions to occur if the
underlying database doesn't support the requested holdability value.
Parameters: resultSetHoldability
- one of the following ResultSet
constants:
ResultSet.HOLD_CURSORS_OVER_COMMIT
or
ResultSet.CLOSE_CURSORS_AT_COMMIT
Since:
1.5.2
loadDriver
public static void loadDriver (String driverClassName)
throws ClassNotFoundException
Attempts to load the JDBC driver on the thread, current or system class
loaders
Parameters: driverClassName
- the fully qualified class name of the driver class
Throws:
ClassNotFoundException
- if the class cannot be found or loaded
ARRAY
public static InParameter ARRAY (Object value)
BIGINT
public static InParameter BIGINT (Object value)
BINARY
public static InParameter BINARY (Object value)
BIT
public static InParameter BIT (Object value)
BLOB
public static InParameter BLOB (Object value)
BOOLEAN
public static InParameter BOOLEAN (Object value)
CHAR
public static InParameter CHAR (Object value)
CLOB
public static InParameter CLOB (Object value)
DATALINK
public static InParameter DATALINK (Object value)
DATE
public static InParameter DATE (Object value)
DECIMAL
public static InParameter DECIMAL (Object value)
DISTINCT
public static InParameter DISTINCT (Object value)
DOUBLE
public static InParameter DOUBLE (Object value)
FLOAT
public static InParameter FLOAT (Object value)
INTEGER
public static InParameter INTEGER (Object value)
JAVA_OBJECT
public static InParameter JAVA_OBJECT (Object value)
LONGVARBINARY
public static InParameter LONGVARBINARY (Object value)
LONGVARCHAR
public static InParameter LONGVARCHAR (Object value)
NULL
public static InParameter NULL (Object value)
NUMERIC
public static InParameter NUMERIC (Object value)
OTHER
public static InParameter OTHER (Object value)
REAL
public static InParameter REAL (Object value)
REF
public static InParameter REF (Object value)
SMALLINT
public static InParameter SMALLINT (Object value)
STRUCT
public static InParameter STRUCT (Object value)
TIME
public static InParameter TIME (Object value)
TIMESTAMP
public static InParameter TIMESTAMP (Object value)
TINYINT
public static InParameter TINYINT (Object value)
VARBINARY
public static InParameter VARBINARY (Object value)
VARCHAR
public static InParameter VARCHAR (Object value)
in
public static InParameter in (int type,
Object value)
Create a new InParameter
Parameters: type
- the JDBC data typevalue
- the object value
Returns: an InParameter
out
public static OutParameter out (int type)
Create a new OutParameter
Parameters: type
- the JDBC data type.
Returns: an OutParameter
inout
public static InOutParameter inout (InParameter in)
Create an inout parameter using this in parameter.
Parameters: in
- the InParameter of interest
Returns: the resulting InOutParameter
resultSet
public static ResultSetOutParameter resultSet (int type)
Create a new ResultSetOutParameter
Parameters: type
- the JDBC data type.
Returns: a ResultSetOutParameter
expand
public static ExpandedVariable expand (Object object)
When using GString SQL queries, allows a variable to be expanded
in the Sql string rather than representing an sql parameter.
Example usage:
def fieldName = 'firstname'
def fieldOp = Sql.expand('like')
def fieldVal = '%a%'
sql.query "select * from PERSON where ${Sql.expand(fieldName)} $fieldOp ${fieldVal}", { ResultSet rs ->
while (rs.next()) println rs.getString('firstname')
}
// query will be 'select * from PERSON where firstname like ?'
// params will be [fieldVal]
Parameters: object
- the object of interest
Returns: the expanded variable See Also: expand(Object)
dataSet
public DataSet dataSet (String table)
dataSet
public DataSet dataSet (Class <?> type)
query
public void query (String sql,
Closure closure)
throws SQLException
Performs the given SQL query, which should return a single
ResultSet
object. The given closure is called
with the ResultSet
as its argument.
Example usages:
sql.query("select * from PERSON where firstname like 'S%'") { ResultSet rs ->
while (rs.next()) println rs.getString('firstname') + ' ' + rs.getString(3)
}
sql.query("call get_people_places()") { ResultSet rs ->
while (rs.next()) println rs.toRowResult().firstname
}
All resources including the ResultSet are closed automatically
after the closure is called.
Parameters: sql
- the sql statementclosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occurs
query
public void query (String sql,
List <Object > params,
Closure closure)
throws SQLException
Performs the given SQL query, which should return a single
ResultSet
object. The given closure is called
with the ResultSet
as its argument.
The query may contain placeholder question marks which match the given list of parameters.
Example usage:
sql.query('select * from PERSON where lastname like ?', ['%a%']) { ResultSet rs ->
while (rs.next()) println rs.getString('lastname')
}
This method supports named and named ordinal parameters.
See the class Javadoc for more details.
All resources including the ResultSet are closed automatically
after the closure is called.
Parameters: sql
- the sql statementparams
- a list of parametersclosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occurs
query
public void query (String sql,
Map map,
Closure closure)
throws SQLException
A variant of query(String, java.util.List, groovy.lang.Closure)
useful when providing the named parameters as a map.
Parameters: sql
- the sql statementmap
- a map containing the named parametersclosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occursSince:
1.8.7
query
public void query (Map map,
String sql,
Closure closure)
throws SQLException
A variant of query(String, java.util.List, groovy.lang.Closure)
useful when providing the named parameters as named arguments.
Parameters: map
- a map containing the named parameterssql
- the sql statementclosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occursSince:
1.8.7
query
public void query (GString gstring,
Closure closure)
throws SQLException
Performs the given SQL query, which should return a single
ResultSet
object. The given closure is called
with the ResultSet
as its argument.
The query may contain GString expressions.
Example usage:
def location = 25
sql.query "select * from PERSON where location_id < $location", { ResultSet rs ->
while (rs.next()) println rs.getString('firstname')
}
All resources including the ResultSet are closed automatically
after the closure is called.
Parameters: gstring
- a GString containing the SQL query with embedded paramsclosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occursSee Also: expand(Object)
eachRow
public void eachRow (String sql,
Closure closure)
throws SQLException
Performs the given SQL query calling the given Closure with each row of the result set.
The row will be a GroovyResultSet
which is a ResultSet
that supports accessing the fields using property style notation and ordinal index values.
Example usages:
sql.eachRow("select * from PERSON where firstname like 'S%'") { row ->
println "$row.firstname ${row[2]}}"
}
sql.eachRow "call my_stored_proc_returning_resultset()", {
println it.firstname
}
Resource handling is performed automatically where appropriate.
Parameters: sql
- the sql statementclosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occurs
eachRow
public void eachRow (String sql,
int offset,
int maxRows,
Closure closure)
throws SQLException
Performs the given SQL query calling the given closure
with each row of the result set starting at
the provided offset
, and including up to maxRows
number of rows.
The row will be a GroovyResultSet
which is a ResultSet
that supports accessing the fields using property style notation and ordinal index values.
Note that the underlying implementation is based on either invoking ResultSet.absolute()
,
or if the ResultSet type is ResultSet.TYPE_FORWARD_ONLY
, the ResultSet.next()
method
is invoked equivalently. The first row of a ResultSet is 1, so passing in an offset of 1 or less has no effect
on the initial positioning within the result set.
Note that different database and JDBC driver implementations may work differently with respect to this method.
Specifically, one should expect that ResultSet.TYPE_FORWARD_ONLY
may be less efficient than a
"scrollable" type.
Resource handling is performed automatically where appropriate.
Parameters: sql
- the sql statementoffset
- the 1-based offset for the first row to be processedmaxRows
- the maximum number of rows to be processedclosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occurs
eachRow
public void eachRow (String sql,
Closure metaClosure,
Closure rowClosure)
throws SQLException
Performs the given SQL query calling the given rowClosure
with each row of the
result set.
The row will be a GroovyResultSet
which is a ResultSet
that supports accessing the fields using property style notation and ordinal index values.
In addition, the metaClosure
will be called once passing in the
ResultSetMetaData
as argument.
Example usage:
def printColNames = { meta ->
(1..meta.columnCount).each {
print meta.getColumnLabel(it).padRight(20)
}
println()
}
def printRow = { row ->
row.toRowResult().values().each{ print it.toString().padRight(20) }
println()
}
sql.eachRow("select * from PERSON", printColNames, printRow)
Resource handling is performed automatically where appropriate.
Parameters: sql
- the sql statementmetaClosure
- called for meta data (only once after sql execution)rowClosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occurs
eachRow
public void eachRow (String sql,
Closure metaClosure,
int offset,
int maxRows,
Closure rowClosure)
throws SQLException
Performs the given SQL query calling the given rowClosure
with each row of the result set starting at
the provided offset
, and including up to maxRows
number of rows.
The row will be a GroovyResultSet
which is a ResultSet
that supports accessing the fields using property style notation and ordinal index values.
In addition, the metaClosure
will be called once passing in the
ResultSetMetaData
as argument.
Note that the underlying implementation is based on either invoking ResultSet.absolute()
,
or if the ResultSet type is ResultSet.TYPE_FORWARD_ONLY
, the ResultSet.next()
method
is invoked equivalently. The first row of a ResultSet is 1, so passing in an offset of 1 or less has no effect
on the initial positioning within the result set.
Note that different database and JDBC driver implementations may work differently with respect to this method.
Specifically, one should expect that ResultSet.TYPE_FORWARD_ONLY
may be less efficient than a
"scrollable" type.
Resource handling is performed automatically where appropriate.
Parameters: sql
- the sql statementoffset
- the 1-based offset for the first row to be processedmaxRows
- the maximum number of rows to be processedmetaClosure
- called for meta data (only once after sql execution)rowClosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occurs
eachRow
public void eachRow (String sql,
List <Object > params,
Closure metaClosure,
int offset,
int maxRows,
Closure rowClosure)
throws SQLException
Performs the given SQL query calling the given rowClosure
with each row of the result set starting at
the provided offset
, and including up to maxRows
number of rows.
The row will be a GroovyResultSet
which is a ResultSet
that supports accessing the fields using property style notation and ordinal index values.
In addition, the metaClosure
will be called once passing in the
ResultSetMetaData
as argument.
The query may contain placeholder question marks which match the given list of parameters.
Note that the underlying implementation is based on either invoking ResultSet.absolute()
,
or if the ResultSet type is ResultSet.TYPE_FORWARD_ONLY
, the ResultSet.next()
method
is invoked equivalently. The first row of a ResultSet is 1, so passing in an offset of 1 or less has no effect
on the initial positioning within the result set.
Note that different database and JDBC driver implementations may work differently with respect to this method.
Specifically, one should expect that ResultSet.TYPE_FORWARD_ONLY
may be less efficient than a
"scrollable" type.
Parameters: sql
- the sql statementparams
- a list of parametersoffset
- the 1-based offset for the first row to be processedmaxRows
- the maximum number of rows to be processedmetaClosure
- called for meta data (only once after sql execution)rowClosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occurs
eachRow
public void eachRow (String sql,
Map map,
Closure metaClosure,
int offset,
int maxRows,
Closure rowClosure)
throws SQLException
A variant of eachRow(String, java.util.List, groovy.lang.Closure, int, int, groovy.lang.Closure)
allowing the named parameters to be supplied in a map.
Parameters: sql
- the sql statementmap
- a map containing the named parametersoffset
- the 1-based offset for the first row to be processedmaxRows
- the maximum number of rows to be processedmetaClosure
- called for meta data (only once after sql execution)rowClosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occursSince:
1.8.7
eachRow
public void eachRow (Map map,
String sql,
Closure metaClosure,
int offset,
int maxRows,
Closure rowClosure)
throws SQLException
A variant of eachRow(String, java.util.List, groovy.lang.Closure, int, int, groovy.lang.Closure)
allowing the named parameters to be supplied as named arguments.
Parameters: map
- a map containing the named parameterssql
- the sql statementoffset
- the 1-based offset for the first row to be processedmaxRows
- the maximum number of rows to be processedmetaClosure
- called for meta data (only once after sql execution)rowClosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occursSince:
1.8.7
eachRow
public void eachRow (String sql,
List <Object > params,
Closure metaClosure,
Closure rowClosure)
throws SQLException
Performs the given SQL query calling the given Closure with each row of the result set.
The row will be a GroovyResultSet
which is a ResultSet
that supports accessing the fields using property style notation and ordinal index values.
In addition, the metaClosure
will be called once passing in the
ResultSetMetaData
as argument.
The query may contain placeholder question marks which match the given list of parameters.
Example usage:
def printColNames = { meta ->
(1..meta.columnCount).each {
print meta.getColumnLabel(it).padRight(20)
}
println()
}
def printRow = { row ->
row.toRowResult().values().each{ print it.toString().padRight(20) }
println()
}
sql.eachRow("select * from PERSON where lastname like ?", ['%a%'], printColNames, printRow)
This method supports named and named ordinal parameters.
See the class Javadoc for more details.
Resource handling is performed automatically where appropriate.
Parameters: sql
- the sql statementparams
- a list of parametersmetaClosure
- called for meta data (only once after sql execution)rowClosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occurs
eachRow
public void eachRow (String sql,
Map params,
Closure metaClosure,
Closure rowClosure)
throws SQLException
A variant of eachRow(String, java.util.List, groovy.lang.Closure, groovy.lang.Closure)
useful when providing the named parameters as a map.
Parameters: sql
- the sql statementparams
- a map of named parametersmetaClosure
- called for meta data (only once after sql execution)rowClosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occursSince:
1.8.7
eachRow
public void eachRow (Map params,
String sql,
Closure metaClosure,
Closure rowClosure)
throws SQLException
A variant of eachRow(String, java.util.List, groovy.lang.Closure, groovy.lang.Closure)
useful when providing the named parameters as named arguments.
Parameters: params
- a map of named parameterssql
- the sql statementmetaClosure
- called for meta data (only once after sql execution)rowClosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occursSince:
1.8.7
eachRow
public void eachRow (String sql,
List <Object > params,
Closure closure)
throws SQLException
Performs the given SQL query calling the given Closure with each row of the result set.
The row will be a GroovyResultSet
which is a ResultSet
that supports accessing the fields using property style notation and ordinal index values.
The query may contain placeholder question marks which match the given list of parameters.
Example usage:
sql.eachRow("select * from PERSON where lastname like ?", ['%a%']) { row ->
println "${row[1]} $row.lastname"
}
Resource handling is performed automatically where appropriate.
Parameters: sql
- the sql statementparams
- a list of parametersclosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occurs
eachRow
public void eachRow (String sql,
Map params,
Closure closure)
throws SQLException
A variant of eachRow(String, java.util.List, groovy.lang.Closure)
useful when providing the named parameters as a map.
Parameters: sql
- the sql statementparams
- a map of named parametersclosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occursSince:
1.8.7
eachRow
public void eachRow (Map params,
String sql,
Closure closure)
throws SQLException
A variant of eachRow(String, java.util.List, groovy.lang.Closure)
useful when providing the named parameters as named arguments.
Parameters: params
- a map of named parameterssql
- the sql statementclosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occursSince:
1.8.7
eachRow
public void eachRow (String sql,
List <Object > params,
int offset,
int maxRows,
Closure closure)
throws SQLException
Performs the given SQL query calling the given closure
with each row of the result set starting at
the provided offset
, and including up to maxRows
number of rows.
The row will be a GroovyResultSet
which is a ResultSet
that supports accessing the fields using property style notation and ordinal index values.
The query may contain placeholder question marks which match the given list of parameters.
Note that the underlying implementation is based on either invoking ResultSet.absolute()
,
or if the ResultSet type is ResultSet.TYPE_FORWARD_ONLY
, the ResultSet.next()
method
is invoked equivalently. The first row of a ResultSet is 1, so passing in an offset of 1 or less has no effect
on the initial positioning within the result set.
Note that different database and JDBC driver implementations may work differently with respect to this method.
Specifically, one should expect that ResultSet.TYPE_FORWARD_ONLY
may be less efficient than a
"scrollable" type.
Parameters: sql
- the sql statementparams
- a list of parametersoffset
- the 1-based offset for the first row to be processedmaxRows
- the maximum number of rows to be processedclosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occurs
eachRow
public void eachRow (String sql,
Map params,
int offset,
int maxRows,
Closure closure)
throws SQLException
A variant of eachRow(String, java.util.List, int, int, groovy.lang.Closure)
useful when providing the named parameters as a map.
Parameters: sql
- the sql statementparams
- a map of named parametersoffset
- the 1-based offset for the first row to be processedmaxRows
- the maximum number of rows to be processedclosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occursSince:
1.8.7
eachRow
public void eachRow (Map params,
String sql,
int offset,
int maxRows,
Closure closure)
throws SQLException
A variant of eachRow(String, java.util.List, int, int, groovy.lang.Closure)
useful when providing the named parameters as named arguments.
Parameters: params
- a map of named parameterssql
- the sql statementoffset
- the 1-based offset for the first row to be processedmaxRows
- the maximum number of rows to be processedclosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occursSince:
1.8.7
eachRow
public void eachRow (GString gstring,
Closure metaClosure,
Closure rowClosure)
throws SQLException
Performs the given SQL query calling the given Closure with each row of the result set.
The row will be a GroovyResultSet
which is a ResultSet
that supports accessing the fields using property style notation and ordinal index values.
In addition, the metaClosure
will be called once passing in the
ResultSetMetaData
as argument.
The query may contain GString expressions.
Example usage:
def location = 25
def printColNames = { meta ->
(1..meta.columnCount).each {
print meta.getColumnLabel(it).padRight(20)
}
println()
}
def printRow = { row ->
row.toRowResult().values().each{ print it.toString().padRight(20) }
println()
}
sql.eachRow("select * from PERSON where location_id < $location", printColNames, printRow)
Resource handling is performed automatically where appropriate.
Parameters: gstring
- a GString containing the SQL query with embedded paramsmetaClosure
- called for meta data (only once after sql execution)rowClosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occursSee Also: expand(Object)
eachRow
public void eachRow (GString gstring,
Closure metaClosure,
int offset,
int maxRows,
Closure rowClosure)
throws SQLException
Performs the given SQL query calling the given closure
with each row of the result set starting at
the provided offset
, and including up to maxRows
number of rows.
The row will be a GroovyResultSet
which is a ResultSet
that supports accessing the fields using property style notation and ordinal index values.
In addition, the metaClosure
will be called once passing in the
ResultSetMetaData
as argument.
The query may contain GString expressions.
Note that the underlying implementation is based on either invoking ResultSet.absolute()
,
or if the ResultSet type is ResultSet.TYPE_FORWARD_ONLY
, the ResultSet.next()
method
is invoked equivalently. The first row of a ResultSet is 1, so passing in an offset of 1 or less has no effect
on the initial positioning within the result set.
Note that different database and JDBC driver implementations may work differently with respect to this method.
Specifically, one should expect that ResultSet.TYPE_FORWARD_ONLY
may be less efficient than a
"scrollable" type.
Parameters: gstring
- a GString containing the SQL query with embedded paramsmetaClosure
- called for meta data (only once after sql execution)offset
- the 1-based offset for the first row to be processedmaxRows
- the maximum number of rows to be processedrowClosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occurs
eachRow
public void eachRow (GString gstring,
int offset,
int maxRows,
Closure closure)
throws SQLException
Performs the given SQL query calling the given closure
with each row of the result set starting at
the provided offset
, and including up to maxRows
number of rows.
The row will be a GroovyResultSet
which is a ResultSet
that supports accessing the fields using property style notation and ordinal index values.
The query may contain GString expressions.
Note that the underlying implementation is based on either invoking ResultSet.absolute()
,
or if the ResultSet type is ResultSet.TYPE_FORWARD_ONLY
, the ResultSet.next()
method
is invoked equivalently. The first row of a ResultSet is 1, so passing in an offset of 1 or less has no effect
on the initial positioning within the result set.
Note that different database and JDBC driver implementations may work differently with respect to this method.
Specifically, one should expect that ResultSet.TYPE_FORWARD_ONLY
may be less efficient than a
"scrollable" type.
Parameters: gstring
- a GString containing the SQL query with embedded paramsoffset
- the 1-based offset for the first row to be processedmaxRows
- the maximum number of rows to be processedclosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occurs
eachRow
public void eachRow (GString gstring,
Closure closure)
throws SQLException
Performs the given SQL query calling the given Closure with each row of the result set.
The row will be a GroovyResultSet
which is a ResultSet
that supports accessing the fields using property style notation and ordinal index values.
The query may contain GString expressions.
Example usage:
def location = 25
sql.eachRow("select * from PERSON where location_id < $location") { row ->
println row.firstname
}
Resource handling is performed automatically where appropriate.
Parameters: gstring
- a GString containing the SQL query with embedded paramsclosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occursSee Also: expand(Object)
rows
public List <GroovyRowResult > rows (String sql)
throws SQLException
Performs the given SQL query and return the rows of the result set.
Example usage:
def ans = sql.rows("select * from PERSON where firstname like 'S%'")
println "Found ${ans.size()} rows"
Resource handling is performed automatically where appropriate.
Parameters: sql
- the SQL statement
Returns: a list of GroovyRowResult objects
Throws:
SQLException
- if a database access error occurs
rows
public List <GroovyRowResult > rows (String sql,
int offset,
int maxRows)
throws SQLException
Performs the given SQL query and return a "page" of rows from the result set. A page is defined as starting at
a 1-based offset, and containing a maximum number of rows.
Note that the underlying implementation is based on either invoking ResultSet.absolute()
,
or if the ResultSet type is ResultSet.TYPE_FORWARD_ONLY
, the ResultSet.next()
method
is invoked equivalently. The first row of a ResultSet is 1, so passing in an offset of 1 or less has no effect
on the initial positioning within the result set.
Note that different database and JDBC driver implementations may work differently with respect to this method.
Specifically, one should expect that ResultSet.TYPE_FORWARD_ONLY
may be less efficient than a
"scrollable" type.
Resource handling is performed automatically where appropriate.
Parameters: sql
- the SQL statementoffset
- the 1-based offset for the first row to be processedmaxRows
- the maximum number of rows to be processed
Returns: a list of GroovyRowResult objects
Throws:
SQLException
- if a database access error occurs
rows
public List <GroovyRowResult > rows (String sql,
Closure metaClosure)
throws SQLException
Performs the given SQL query and return the rows of the result set.
In addition, the metaClosure
will be called once passing in the
ResultSetMetaData
as argument.
Example usage:
def printNumCols = { meta -> println "Found $meta.columnCount columns" }
def ans = sql.rows("select * from PERSON", printNumCols)
println "Found ${ans.size()} rows"
Resource handling is performed automatically where appropriate.
Parameters: sql
- the SQL statementmetaClosure
- called with meta data of the ResultSet
Returns: a list of GroovyRowResult objects
Throws:
SQLException
- if a database access error occurs
rows
public List <GroovyRowResult > rows (String sql,
int offset,
int maxRows,
Closure metaClosure)
throws SQLException
Performs the given SQL query and return a "page" of rows from the result set. A page is defined as starting at
a 1-based offset, and containing a maximum number of rows.
In addition, the metaClosure
will be called once passing in the
ResultSetMetaData
as argument.
Note that the underlying implementation is based on either invoking ResultSet.absolute()
,
or if the ResultSet type is ResultSet.TYPE_FORWARD_ONLY
, the ResultSet.next()
method
is invoked equivalently. The first row of a ResultSet is 1, so passing in an offset of 1 or less has no effect
on the initial positioning within the result set.
Note that different database and JDBC driver implementations may work differently with respect to this method.
Specifically, one should expect that ResultSet.TYPE_FORWARD_ONLY
may be less efficient than a
"scrollable" type.
Resource handling is performed automatically where appropriate.
Parameters: sql
- the SQL statementoffset
- the 1-based offset for the first row to be processedmaxRows
- the maximum number of rows to be processedmetaClosure
- called for meta data (only once after sql execution)
Returns: a list of GroovyRowResult objects
Throws:
SQLException
- if a database access error occurs
rows
public List <GroovyRowResult > rows (String sql,
List <Object > params)
throws SQLException
Performs the given SQL query and return the rows of the result set.
The query may contain placeholder question marks which match the given list of parameters.
Example usage:
def ans = sql.rows("select * from PERSON where lastname like ?", ['%a%'])
println "Found ${ans.size()} rows"
This method supports named and named ordinal parameters by supplying such
parameters in the params
list. See the class Javadoc for more details.
Resource handling is performed automatically where appropriate.
Parameters: sql
- the SQL statementparams
- a list of parameters
Returns: a list of GroovyRowResult objects
Throws:
SQLException
- if a database access error occurs
rows
public List <GroovyRowResult > rows (Map params,
String sql)
throws SQLException
A variant of rows(String, java.util.List)
useful when providing the named parameters as named arguments.
Parameters: params
- a map containing the named parameterssql
- the SQL statement
Returns: a list of GroovyRowResult objects
Throws:
SQLException
- if a database access error occursSince:
1.8.7
rows
public List <GroovyRowResult > rows (String sql,
List <Object > params,
int offset,
int maxRows)
throws SQLException
Performs the given SQL query and return a "page" of rows from the result set. A page is defined as starting at
a 1-based offset, and containing a maximum number of rows.
The query may contain placeholder question marks which match the given list of parameters.
Note that the underlying implementation is based on either invoking ResultSet.absolute()
,
or if the ResultSet type is ResultSet.TYPE_FORWARD_ONLY
, the ResultSet.next()
method
is invoked equivalently. The first row of a ResultSet is 1, so passing in an offset of 1 or less has no effect
on the initial positioning within the result set.
Note that different database and JDBC driver implementations may work differently with respect to this method.
Specifically, one should expect that ResultSet.TYPE_FORWARD_ONLY
may be less efficient than a
"scrollable" type.
This method supports named and named ordinal parameters by supplying such
parameters in the params
list. See the class Javadoc for more details.
Resource handling is performed automatically where appropriate.
Parameters: sql
- the SQL statementparams
- a list of parametersoffset
- the 1-based offset for the first row to be processedmaxRows
- the maximum number of rows to be processed
Returns: a list of GroovyRowResult objects
Throws:
SQLException
- if a database access error occurs
rows
public List <GroovyRowResult > rows (String sql,
Map params,
int offset,
int maxRows)
throws SQLException
A variant of rows(String, java.util.List, int, int)
useful when providing the named parameters as a map.
Parameters: sql
- the SQL statementparams
- a map of named parametersoffset
- the 1-based offset for the first row to be processedmaxRows
- the maximum number of rows to be processed
Returns: a list of GroovyRowResult objects
Throws:
SQLException
- if a database access error occursSince:
1.8.7
rows
public List <GroovyRowResult > rows (Map params,
String sql,
int offset,
int maxRows)
throws SQLException
A variant of rows(String, java.util.List, int, int)
useful when providing the named parameters as named arguments.
Parameters: params
- a map of named parameterssql
- the SQL statementoffset
- the 1-based offset for the first row to be processedmaxRows
- the maximum number of rows to be processed
Returns: a list of GroovyRowResult objects
Throws:
SQLException
- if a database access error occursSince:
1.8.7
rows
public List <GroovyRowResult > rows (String sql,
Object [] params)
throws SQLException
Performs the given SQL query and return the rows of the result set.
This method supports named and named ordinal parameters by supplying such
parameters in the params
array. See the class Javadoc for more details.
An Object array variant of rows(String, List)
.
Parameters: sql
- the SQL statementparams
- an array of parameters
Returns: a list of GroovyRowResult objects
Throws:
SQLException
- if a database access error occurs
rows
public List <GroovyRowResult > rows (String sql,
Object [] params,
int offset,
int maxRows)
throws SQLException
Performs the given SQL query and return the rows of the result set.
This method supports named and named ordinal parameters by supplying such
parameters in the params
array. See the class Javadoc for more details.
An Object array variant of rows(String, List, int, int)
.
Parameters: sql
- the SQL statementparams
- an array of parametersoffset
- the 1-based offset for the first row to be processedmaxRows
- the maximum number of rows to be processed
Returns: a list of GroovyRowResult objects
Throws:
SQLException
- if a database access error occurs
rows
public List <GroovyRowResult > rows (String sql,
List <Object > params,
Closure metaClosure)
throws SQLException
Performs the given SQL query and return the rows of the result set.
In addition, the metaClosure
will be called once passing in the
ResultSetMetaData
as argument.
The query may contain placeholder question marks which match the given list of parameters.
Example usage:
def printNumCols = { meta -> println "Found $meta.columnCount columns" }
def ans = sql.rows("select * from PERSON where lastname like ?", ['%a%'], printNumCols)
println "Found ${ans.size()} rows"
This method supports named and named ordinal parameters by supplying such
parameters in the params
list. Here is an example:
def printNumCols = { meta -> println "Found $meta.columnCount columns" }
def mapParam = [foo: 'Smith']
def domainParam = new MyDomainClass(bar: 'John')
def qry = 'select * from PERSON where lastname=?1.foo and firstname=?2.bar'
def ans = sql.rows(qry, [mapParam, domainParam], printNumCols)
println "Found ${ans.size()} rows"
def qry2 = 'select * from PERSON where firstname=:first and lastname=:last'
def ans2 = sql.rows(qry2, [[last:'Smith', first:'John']], printNumCols)
println "Found ${ans2.size()} rows"
See the class Javadoc for more details.
Resource handling is performed automatically where appropriate.
Parameters: sql
- the SQL statementparams
- a list of parametersmetaClosure
- called for meta data (only once after sql execution)
Returns: a list of GroovyRowResult objects
Throws:
SQLException
- if a database access error occurs
rows
public List <GroovyRowResult > rows (String sql,
Map params,
Closure metaClosure)
throws SQLException
A variant of rows(String, java.util.List, groovy.lang.Closure)
useful when providing the named parameters as a map.
Parameters: sql
- the SQL statementparams
- a map of named parametersmetaClosure
- called for meta data (only once after sql execution)
Returns: a list of GroovyRowResult objects
Throws:
SQLException
- if a database access error occursSince:
1.8.7
rows
public List <GroovyRowResult > rows (Map params,
String sql,
Closure metaClosure)
throws SQLException
A variant of rows(String, java.util.List, groovy.lang.Closure)
useful when providing the named parameters as named arguments.
Parameters: params
- a map of named parameterssql
- the SQL statementmetaClosure
- called for meta data (only once after sql execution)
Returns: a list of GroovyRowResult objects
Throws:
SQLException
- if a database access error occursSince:
1.8.7
rows
public List <GroovyRowResult > rows (String sql,
List <Object > params,
int offset,
int maxRows,
Closure metaClosure)
throws SQLException
Performs the given SQL query and return a "page" of rows from the result set. A page is defined as starting at
a 1-based offset, and containing a maximum number of rows.
In addition, the metaClosure
will be called once passing in the
ResultSetMetaData
as argument.
The query may contain placeholder question marks which match the given list of parameters.
Note that the underlying implementation is based on either invoking ResultSet.absolute()
,
or if the ResultSet type is ResultSet.TYPE_FORWARD_ONLY
, the ResultSet.next()
method
is invoked equivalently. The first row of a ResultSet is 1, so passing in an offset of 1 or less has no effect
on the initial positioning within the result set.
Note that different database and JDBC driver implementations may work differently with respect to this method.
Specifically, one should expect that ResultSet.TYPE_FORWARD_ONLY
may be less efficient than a
"scrollable" type.
This method supports named and named ordinal parameters by supplying such
parameters in the params
list. See the class Javadoc for more details.
Resource handling is performed automatically where appropriate.
Parameters: sql
- the SQL statementparams
- a list of parametersoffset
- the 1-based offset for the first row to be processedmaxRows
- the maximum number of rows to be processedmetaClosure
- called for meta data (only once after sql execution)
Returns: a list of GroovyRowResult objects
Throws:
SQLException
- if a database access error occurs
rows
public List <GroovyRowResult > rows (String sql,
Map params,
int offset,
int maxRows,
Closure metaClosure)
throws SQLException
A variant of rows(String, java.util.List, int, int, groovy.lang.Closure)
useful when providing the named parameters as a map.
Parameters: sql
- the SQL statementparams
- a map of named parametersoffset
- the 1-based offset for the first row to be processedmaxRows
- the maximum number of rows to be processedmetaClosure
- called for meta data (only once after sql execution)
Returns: a list of GroovyRowResult objects
Throws:
SQLException
- if a database access error occursSince:
1.8.7
rows
public List <GroovyRowResult > rows (Map params,
String sql,
int offset,
int maxRows,
Closure metaClosure)
throws SQLException
A variant of rows(String, java.util.List, int, int, groovy.lang.Closure)
useful when providing the named parameters as named arguments.
Parameters: params
- a map of named parameterssql
- the SQL statementoffset
- the 1-based offset for the first row to be processedmaxRows
- the maximum number of rows to be processedmetaClosure
- called for meta data (only once after sql execution)
Returns: a list of GroovyRowResult objects
Throws:
SQLException
- if a database access error occursSince:
1.8.7
rows
public List <GroovyRowResult > rows (GString sql,
int offset,
int maxRows)
throws SQLException
Performs the given SQL query and return a "page" of rows from the result set. A page is defined as starting at
a 1-based offset, and containing a maximum number of rows.
The query may contain GString expressions.
Note that the underlying implementation is based on either invoking ResultSet.absolute()
,
or if the ResultSet type is ResultSet.TYPE_FORWARD_ONLY
, the ResultSet.next()
method
is invoked equivalently. The first row of a ResultSet is 1, so passing in an offset of 1 or less has no effect
on the initial positioning within the result set.
Note that different database and JDBC driver implementations may work differently with respect to this method.
Specifically, one should expect that ResultSet.TYPE_FORWARD_ONLY
may be less efficient than a
"scrollable" type.
Resource handling is performed automatically where appropriate.
Parameters: sql
- the SQL statementoffset
- the 1-based offset for the first row to be processedmaxRows
- the maximum number of rows to be processed
Returns: a list of GroovyRowResult objects
Throws:
SQLException
- if a database access error occurs
rows
public List <GroovyRowResult > rows (GString gstring)
throws SQLException
Performs the given SQL query and return the rows of the result set.
The query may contain GString expressions.
Example usage:
def location = 25
def ans = sql.rows("select * from PERSON where location_id < $location")
println "Found ${ans.size()} rows"
Resource handling is performed automatically where appropriate.
Parameters: gstring
- a GString containing the SQL query with embedded params
Returns: a list of GroovyRowResult objects
Throws:
SQLException
- if a database access error occursSee Also: expand(Object)
rows
public List <GroovyRowResult > rows (GString gstring,
Closure metaClosure)
throws SQLException
Performs the given SQL query and return the rows of the result set.
In addition, the metaClosure
will be called once passing in the
ResultSetMetaData
as argument.
The query may contain GString expressions.
Example usage:
def location = 25
def printNumCols = { meta -> println "Found $meta.columnCount columns" }
def ans = sql.rows("select * from PERSON where location_id < $location", printNumCols)
println "Found ${ans.size()} rows"
Resource handling is performed automatically where appropriate.
Parameters: gstring
- a GString containing the SQL query with embedded paramsmetaClosure
- called with meta data of the ResultSet
Returns: a list of GroovyRowResult objects
Throws:
SQLException
- if a database access error occursSee Also: expand(Object)
rows
public List <GroovyRowResult > rows (GString gstring,
int offset,
int maxRows,
Closure metaClosure)
throws SQLException
Performs the given SQL query and return a "page" of rows from the result set. A page is defined as starting at
a 1-based offset, and containing a maximum number of rows.
In addition, the metaClosure
will be called once passing in the
ResultSetMetaData
as argument.
The query may contain GString expressions.
Note that the underlying implementation is based on either invoking ResultSet.absolute()
,
or if the ResultSet type is ResultSet.TYPE_FORWARD_ONLY
, the ResultSet.next()
method
is invoked equivalently. The first row of a ResultSet is 1, so passing in an offset of 1 or less has no effect
on the initial positioning within the result set.
Note that different database and JDBC driver implementations may work differently with respect to this method.
Specifically, one should expect that ResultSet.TYPE_FORWARD_ONLY
may be less efficient than a
"scrollable" type.
Resource handling is performed automatically where appropriate.
Parameters: gstring
- the SQL statementoffset
- the 1-based offset for the first row to be processedmaxRows
- the maximum number of rows to be processedmetaClosure
- called for meta data (only once after sql execution)
Returns: a list of GroovyRowResult objects
Throws:
SQLException
- if a database access error occurs
firstRow
public GroovyRowResult firstRow (String sql)
throws SQLException
Performs the given SQL query and return the first row of the result set.
Example usage:
def ans = sql.firstRow("select * from PERSON where firstname like 'S%'")
println ans.firstname
Resource handling is performed automatically where appropriate.
Parameters: sql
- the SQL statement
Returns: a GroovyRowResult object or null
if no row is found
Throws:
SQLException
- if a database access error occurs
firstRow
public GroovyRowResult firstRow (GString gstring)
throws SQLException
Performs the given SQL query and return
the first row of the result set.
The query may contain GString expressions.
Example usage:
def location = 25
def ans = sql.firstRow("select * from PERSON where location_id < $location")
println ans.firstname
Resource handling is performed automatically where appropriate.
Parameters: gstring
- a GString containing the SQL query with embedded params
Returns: a GroovyRowResult object or null
if no row is found
Throws:
SQLException
- if a database access error occursSee Also: expand(Object)
firstRow
public GroovyRowResult firstRow (String sql,
List <Object > params)
throws SQLException
Performs the given SQL query and return the first row of the result set.
The query may contain placeholder question marks which match the given list of parameters.
Example usages:
def ans = sql.firstRow("select * from PERSON where lastname like ?", ['%a%'])
println ans.firstname
If your database returns scalar functions as ResultSets, you can also use firstRow
to gain access to stored procedure results, e.g. using hsqldb 1.9 RC4:
sql.execute """
create function FullName(p_firstname VARCHAR(40)) returns VARCHAR(80)
BEGIN atomic
DECLARE ans VARCHAR(80);
SET ans = (SELECT firstname || ' ' || lastname FROM PERSON WHERE firstname = p_firstname);
RETURN ans;
END
"""
assert sql.firstRow("{call FullName(?)}", ['Sam'])[0] == 'Sam Pullara'
This method supports named and named ordinal parameters by supplying such
parameters in the params
list. See the class Javadoc for more details.
Resource handling is performed automatically where appropriate.
Parameters: sql
- the SQL statementparams
- a list of parameters
Returns: a GroovyRowResult object or null
if no row is found
Throws:
SQLException
- if a database access error occurs
firstRow
public GroovyRowResult firstRow (Map params,
String sql)
throws SQLException
A variant of firstRow(String, java.util.List)
useful when providing the named parameters as named arguments.
Parameters: params
- a map containing the named parameterssql
- the SQL statement
Returns: a GroovyRowResult object or null
if no row is found
Throws:
SQLException
- if a database access error occursSince:
1.8.7
firstRow
public GroovyRowResult firstRow (String sql,
Object [] params)
throws SQLException
Performs the given SQL query and return the first row of the result set.
An Object array variant of firstRow(String, List)
.
This method supports named and named ordinal parameters by supplying such
parameters in the params
array. See the class Javadoc for more details.
Parameters: sql
- the SQL statementparams
- an array of parameters
Returns: a GroovyRowResult object or null
if no row is found
Throws:
SQLException
- if a database access error occurs
execute
public boolean execute (String sql)
throws SQLException
Executes the given piece of SQL.
Also saves the updateCount, if any, for subsequent examination.
Example usages:
sql.execute "drop table if exists PERSON"
sql.execute """
create table PERSON (
id integer not null,
firstname varchar(100),
lastname varchar(100),
location_id integer
)
"""
sql.execute """
insert into PERSON (id, firstname, lastname, location_id) values (4, 'Paul', 'King', 40)
"""
assert sql.updateCount == 1
Resource handling is performed automatically where appropriate.
Parameters: sql
- the SQL to execute
Returns: true
if the first result is a ResultSet
object; false
if it is an update count or there are
no results
Throws:
SQLException
- if a database access error occurs
execute
public boolean execute (String sql,
List <Object > params)
throws SQLException
Executes the given piece of SQL with parameters.
Also saves the updateCount, if any, for subsequent examination.
Example usage:
sql.execute """
insert into PERSON (id, firstname, lastname, location_id) values (?, ?, ?, ?)
""", [1, "Guillaume", "Laforge", 10]
assert sql.updateCount == 1
This method supports named and named ordinal parameters.
See the class Javadoc for more details.
Resource handling is performed automatically where appropriate.
Parameters: sql
- the SQL statementparams
- a list of parameters
Returns: true
if the first result is a ResultSet
object; false
if it is an update count or there are
no results
Throws:
SQLException
- if a database access error occurs
execute
public boolean execute (Map params,
String sql)
throws SQLException
A variant of execute(String, java.util.List)
useful when providing the named parameters as named arguments.
Parameters: params
- a map containing the named parameterssql
- the SQL statement
Returns: true
if the first result is a ResultSet
object; false
if it is an update count or there are
no results
Throws:
SQLException
- if a database access error occursSince:
1.8.7
execute
public boolean execute (String sql,
Object [] params)
throws SQLException
Executes the given piece of SQL with parameters.
An Object array variant of execute(String, List)
.
This method supports named and named ordinal parameters by supplying such
parameters in the params
array. See the class Javadoc for more details.
Parameters: sql
- the SQL statementparams
- an array of parameters
Returns: true
if the first result is a ResultSet
object; false
if it is an update count or there are
no results
Throws:
SQLException
- if a database access error occurs
execute
public boolean execute (GString gstring)
throws SQLException
Executes the given SQL with embedded expressions inside.
Also saves the updateCount, if any, for subsequent examination.
Example usage:
def scott = [firstname: "Scott", lastname: "Davis", id: 5, location_id: 50]
sql.execute """
insert into PERSON (id, firstname, lastname, location_id) values ($scott.id, $scott.firstname, $scott.lastname, $scott.location_id)
"""
assert sql.updateCount == 1
Resource handling is performed automatically where appropriate.
Parameters: gstring
- a GString containing the SQL query with embedded params
Returns: true
if the first result is a ResultSet
object; false
if it is an update count or there are
no results
Throws:
SQLException
- if a database access error occursSee Also: expand(Object)
executeInsert
public List <List <Object >> executeInsert (String sql)
throws SQLException
Executes the given SQL statement (typically an INSERT statement).
Use this variant when you want to receive the values of any
auto-generated columns, such as an autoincrement ID field.
See executeInsert(GString)
for more details.
Resource handling is performed automatically where appropriate.
Parameters: sql
- The SQL statement to execute
Returns: A list of the auto-generated column values for each
inserted row (typically auto-generated keys)
Throws:
SQLException
- if a database access error occurs
executeInsert
public List <List <Object >> executeInsert (String sql,
List <Object > params)
throws SQLException
Executes the given SQL statement (typically an INSERT statement).
Use this variant when you want to receive the values of any
auto-generated columns, such as an autoincrement ID field.
The query may contain placeholder question marks which match the given list of parameters.
See executeInsert(GString)
for more details.
This method supports named and named ordinal parameters.
See the class Javadoc for more details.
Resource handling is performed automatically where appropriate.
Parameters: sql
- The SQL statement to executeparams
- The parameter values that will be substituted
into the SQL statement's parameter slots
Returns: A list of the auto-generated column values for each
inserted row (typically auto-generated keys)
Throws:
SQLException
- if a database access error occurs
executeInsert
public List <List <Object >> executeInsert (Map params,
String sql)
throws SQLException
A variant of firstRow(String, java.util.List)
useful when providing the named parameters as named arguments.
Parameters: params
- a map containing the named parameterssql
- The SQL statement to execute
Returns: A list of the auto-generated column values for each
inserted row (typically auto-generated keys)
Throws:
SQLException
- if a database access error occursSince:
1.8.7
executeInsert
public List <List <Object >> executeInsert (String sql,
Object [] params)
throws SQLException
Executes the given SQL statement (typically an INSERT statement).
An Object array variant of executeInsert(String, List)
.
This method supports named and named ordinal parameters by supplying such
parameters in the params
array. See the class Javadoc for more details.
Parameters: sql
- The SQL statement to executeparams
- The parameter values that will be substituted
into the SQL statement's parameter slots
Returns: A list of the auto-generated column values for each
inserted row (typically auto-generated keys)
Throws:
SQLException
- if a database access error occurs
executeInsert
public List <List <Object >> executeInsert (GString gstring)
throws SQLException
Executes the given SQL statement (typically an INSERT statement).
Use this variant when you want to receive the values of any
auto-generated columns, such as an autoincrement ID field.
The query may contain GString expressions.
Generated key values can be accessed using
array notation. For example, to return the second auto-generated
column value of the third row, use keys[3][1]
. The
method is designed to be used with SQL INSERT statements, but is
not limited to them.
The standard use for this method is when a table has an
autoincrement ID column and you want to know what the ID is for
a newly inserted row. In this example, we insert a single row
into a table in which the first column contains the autoincrement
ID:
def sql = Sql.newInstance("jdbc:mysql://localhost:3306/groovy",
"user",
"password",
"com.mysql.jdbc.Driver")
def keys = sql.executeInsert("insert into test_table (INT_DATA, STRING_DATA) "
+ "VALUES (1, 'Key Largo')")
def id = keys[0][0]
// 'id' now contains the value of the new row's ID column.
// It can be used to update an object representation's
// id attribute for example.
...
Resource handling is performed automatically where appropriate.
Parameters: gstring
- a GString containing the SQL query with embedded params
Returns: A list of the auto-generated column values for each
inserted row (typically auto-generated keys)
Throws:
SQLException
- if a database access error occursSee Also: expand(Object)
executeUpdate
public int executeUpdate (String sql)
throws SQLException
Executes the given SQL update.
Resource handling is performed automatically where appropriate.
Parameters: sql
- the SQL to execute
Returns: the number of rows updated or 0 for SQL statements that return nothing
Throws:
SQLException
- if a database access error occurs
executeUpdate
public int executeUpdate (String sql,
List <Object > params)
throws SQLException
Executes the given SQL update with parameters.
This method supports named and named ordinal parameters.
See the class Javadoc for more details.
Resource handling is performed automatically where appropriate.
Parameters: sql
- the SQL statementparams
- a list of parameters
Returns: the number of rows updated or 0 for SQL statements that return nothing
Throws:
SQLException
- if a database access error occurs
executeUpdate
public int executeUpdate (Map params,
String sql)
throws SQLException
A variant of executeUpdate(String, java.util.List)
useful when providing the named parameters as named arguments.
Parameters: params
- a map containing the named parameterssql
- the SQL statement
Returns: the number of rows updated or 0 for SQL statements that return nothing
Throws:
SQLException
- if a database access error occursSince:
1.8.7
executeUpdate
public int executeUpdate (String sql,
Object [] params)
throws SQLException
Executes the given SQL update with parameters.
An Object array variant of executeUpdate(String, List)
.
Parameters: sql
- the SQL statementparams
- an array of parameters
Returns: the number of rows updated or 0 for SQL statements that return nothing
Throws:
SQLException
- if a database access error occurs
executeUpdate
public int executeUpdate (GString gstring)
throws SQLException
Executes the given SQL update with embedded expressions inside.
Resource handling is performed automatically where appropriate.
Parameters: gstring
- a GString containing the SQL query with embedded params
Returns: the number of rows updated or 0 for SQL statements that return nothing
Throws:
SQLException
- if a database access error occursSee Also: expand(Object)
call
public int call (String sql)
throws Exception
Performs a stored procedure call.
Example usage (tested with MySQL) - suppose we have the following stored procedure:
sql.execute """
CREATE PROCEDURE HouseSwap(_first1 VARCHAR(50), _first2 VARCHAR(50))
BEGIN
DECLARE _loc1 INT;
DECLARE _loc2 INT;
SELECT location_id into _loc1 FROM PERSON where firstname = _first1;
SELECT location_id into _loc2 FROM PERSON where firstname = _first2;
UPDATE PERSON
set location_id = case firstname
when _first1 then _loc2
when _first2 then _loc1
end
where (firstname = _first1 OR firstname = _first2);
END
"""
then you can invoke the procedure as follows:
def rowsChanged = sql.call("{call HouseSwap('Guillaume', 'Paul')}")
assert rowsChanged == 2
Parameters: sql
- the SQL statement
Returns: the number of rows updated or 0 for SQL statements that return nothing
Throws:
SQLException
- if a database access error occurs
Exception
call
public int call (GString gstring)
throws Exception
Performs a stored procedure call with the given embedded parameters.
Example usage - see call(String)
for more details about
creating a HouseSwap(IN name1, IN name2)
stored procedure.
Once created, it can be called like this:
def p1 = 'Paul'
def p2 = 'Guillaume'
def rowsChanged = sql.call("{call HouseSwap($p1, $p2)}")
assert rowsChanged == 2
Resource handling is performed automatically where appropriate.
Parameters: gstring
- a GString containing the SQL query with embedded params
Returns: the number of rows updated or 0 for SQL statements that return nothing
Throws:
SQLException
- if a database access error occurs
Exception
See Also: expand(Object)
,
call(String)
call
public int call (String sql,
List <Object > params)
throws Exception
Performs a stored procedure call with the given parameters.
Example usage - see call(String)
for more details about
creating a HouseSwap(IN name1, IN name2)
stored procedure.
Once created, it can be called like this:
def rowsChanged = sql.call("{call HouseSwap(?, ?)}", ['Guillaume', 'Paul'])
assert rowsChanged == 2
Resource handling is performed automatically where appropriate.
Parameters: sql
- the SQL statementparams
- a list of parameters
Returns: the number of rows updated or 0 for SQL statements that return nothing
Throws:
SQLException
- if a database access error occurs
Exception
See Also: call(String)
call
public int call (String sql,
Object [] params)
throws Exception
Performs a stored procedure call with the given parameters.
An Object array variant of call(String, List)
.
Parameters: sql
- the SQL statementparams
- an array of parameters
Returns: the number of rows updated or 0 for SQL statements that return nothing
Throws:
SQLException
- if a database access error occurs
Exception
See Also: call(String)
call
public void call (String sql,
List <Object > params,
Closure closure)
throws Exception
Performs a stored procedure call with the given parameters. The closure
is called once with all the out parameters.
Example usage - suppose we create a stored procedure (ignore its simplistic implementation):
// Tested with MySql 5.0.75
sql.execute """
CREATE PROCEDURE Hemisphere(
IN p_firstname VARCHAR(50),
IN p_lastname VARCHAR(50),
OUT ans VARCHAR(50))
BEGIN
DECLARE loc INT;
SELECT location_id into loc FROM PERSON where firstname = p_firstname and lastname = p_lastname;
CASE loc
WHEN 40 THEN
SET ans = 'Southern Hemisphere';
ELSE
SET ans = 'Northern Hemisphere';
END CASE;
END;
"""
we can now call the stored procedure as follows:
sql.call '{call Hemisphere(?, ?, ?)}', ['Guillaume', 'Laforge', Sql.VARCHAR], { dwells ->
println dwells
}
which will output 'Northern Hemisphere
'.
We can also access stored functions with scalar return values where the return value
will be treated as an OUT parameter. Here are examples for various databases for
creating such a procedure:
// Tested with MySql 5.0.75
sql.execute """
create function FullName(p_firstname VARCHAR(40)) returns VARCHAR(80)
begin
declare ans VARCHAR(80);
SELECT CONCAT(firstname, ' ', lastname) INTO ans FROM PERSON WHERE firstname = p_firstname;
return ans;
end
"""
// Tested with MS SQLServer Express 2008
sql.execute """
create function FullName(@firstname VARCHAR(40)) returns VARCHAR(80)
begin
declare @ans
VARCHAR(80)
SET @ans = (SELECT firstname + ' ' + lastname FROM PERSON WHERE firstname = @firstname)
return @ans
end
"""
// Tested with Oracle XE 10g
sql.execute """
create function FullName(p_firstname VARCHAR) return VARCHAR is
ans VARCHAR(80);
begin
SELECT CONCAT(CONCAT(firstname, ' '), lastname) INTO ans FROM PERSON WHERE firstname = p_firstname;
return ans;
end;
"""
and here is how you access the stored function for all databases:
sql.call("{? = call FullName(?)}", [Sql.VARCHAR, 'Sam']) { name ->
assert name == 'Sam Pullara'
}
Resource handling is performed automatically where appropriate.
Parameters: sql
- the sql statementparams
- a list of parametersclosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occurs
Exception
call
public void call (GString gstring,
Closure closure)
throws Exception
Performs a stored procedure call with the given parameters,
calling the closure once with all result objects.
See call(String, List, Closure)
for more details about
creating a Hemisphere(IN first, IN last, OUT dwells)
stored procedure.
Once created, it can be called like this:
def first = 'Scott'
def last = 'Davis'
sql.call "{call Hemisphere($first, $last, ${Sql.VARCHAR})}", { dwells ->
println dwells
}
As another example, see call(String, List, Closure)
for more details about
creating a FullName(IN first)
stored function.
Once created, it can be called like this:
def first = 'Sam'
sql.call("{$Sql.VARCHAR = call FullName($first)}") { name ->
assert name == 'Sam Pullara'
}
Resource handling is performed automatically where appropriate.
Parameters: gstring
- a GString containing the SQL query with embedded paramsclosure
- called for each row with a GroovyResultSet
Throws:
SQLException
- if a database access error occurs
Exception
See Also: call(String, List, Closure)
,
expand(Object)
close
public void close ()
If this SQL object was created with a Connection then this method closes
the connection. If this SQL object was created from a DataSource then
this method only frees any cached objects (statements in particular).
getDataSource
public DataSource getDataSource ()
commit
public void commit ()
throws SQLException
If this SQL object was created with a Connection then this method commits
the connection. If this SQL object was created from a DataSource then
this method does nothing.
Throws:
SQLException
- if a database access error occurs
rollback
public void rollback ()
throws SQLException
If this SQL object was created with a Connection then this method rolls back
the connection. If this SQL object was created from a DataSource then
this method does nothing.
Throws:
SQLException
- if a database access error occurs
getUpdateCount
public int getUpdateCount ()
Returns: Returns the updateCount.
getConnection
public Connection getConnection ()
If this instance was created with a single Connection then the connection
is returned. Otherwise if this instance was created with a DataSource
then this method returns null
Returns: the connection wired into this object, or null if this object
uses a DataSource
withStatement
public void withStatement (Closure configureStatement)
Allows a closure to be passed in to configure the JDBC statements before they are executed.
It can be used to do things like set the query size etc. When this method is invoked, the supplied
closure is saved. Statements subsequently created from other methods will then be
configured using this closure. The statement being configured is passed into the closure
as its single argument, e.g.:
sql.withStatement{ stmt -> stmt.maxRows = 10 }
def firstTenRows = sql.rows("select * from table")
Parameters: configureStatement
- the closure
setCacheStatements
public void setCacheStatements (boolean cacheStatements)
Enables statement caching.
if cacheStatements is true, cache is created and all created prepared statements will be cached.
if cacheStatements is false, all cached statements will be properly closed.
Parameters: cacheStatements
- the new value
isCacheStatements
public boolean isCacheStatements ()
Returns: boolean true if cache is enabled (default is false)
cacheConnection
public void cacheConnection (Closure closure)
throws SQLException
Caches the connection used while the closure is active.
If the closure takes a single argument, it will be called
with the connection, otherwise it will be called with no arguments.
Parameters: closure
- the given closure
Throws:
SQLException
- if a database error occurs
withTransaction
public void withTransaction (Closure closure)
throws SQLException
Performs the closure within a transaction using a cached connection.
If the closure takes a single argument, it will be called
with the connection, otherwise it will be called with no arguments.
Parameters: closure
- the given closure
Throws:
SQLException
- if a database error occurs
isWithinBatch
public boolean isWithinBatch ()
Returns true if the current Sql object is currently executing a withBatch
method call.
Returns: true if a withBatch call is currently being executed.
withBatch
public int[] withBatch (Closure closure)
throws SQLException
Performs the closure (containing batch operations) within a batch.
Uses a batch size of zero, i.e. no automatic partitioning of batches.
This means that executeBatch()
will be called automatically after the withBatch
closure has finished but may be called explicitly if desired as well for more fine-grained
partitioning of the batch.
The closure will be called with a single argument; the database
statement (actually a BatchingStatementWrapper
helper object)
associated with this batch.
Use it like this:
def updateCounts = sql.withBatch { stmt ->
stmt.addBatch("insert into TABLENAME ...")
stmt.addBatch("insert into TABLENAME ...")
stmt.addBatch("insert into TABLENAME ...")
...
}
For integrity and performance reasons, you may wish to consider executing your batch command(s) within a transaction:
sql.withTransaction {
def result1 = sql.withBatch { ... }
...
}
Parameters: closure
- the closure containing batch and optionally other statements
Returns: an array of update counts containing one element for each
command in the batch. The elements of the array are ordered according
to the order in which commands were added to the batch.
Throws:
SQLException
- if a database access error occurs,
or this method is called on a closed Statement
, or the
driver does not support batch statements. Throws BatchUpdateException
(a subclass of SQLException
) if one of the commands sent to the
database fails to execute properly or attempts to return a result set.See Also: withBatch(int, Closure)
withBatch
public int[] withBatch (int batchSize,
Closure closure)
throws SQLException
Performs the closure (containing batch operations) within a batch using a given batch size.
After every batchSize
addBatch(sqlBatchOperation)
operations, automatically calls an executeBatch()
operation to "chunk" up the database operations
into partitions. Though not normally needed, you can also explicitly call executeBatch()
which
after executing the current batch, resets the batch count back to zero.
The closure will be called with a single argument; the database statement
(actually a BatchingStatementWrapper
helper object)
associated with this batch.
Use it like this for batchSize of 20:
def updateCounts = sql.withBatch(20) { stmt ->
stmt.addBatch("insert into TABLENAME ...")
stmt.addBatch("insert into TABLENAME ...")
stmt.addBatch("insert into TABLENAME ...")
...
}
For integrity and performance reasons, you may wish to consider executing your batch command(s) within a transaction:
sql.withTransaction {
def result1 = sql.withBatch { ... }
...
}
Parameters: batchSize
- partition the batch into batchSize pieces, i.e. after batchSize
addBatch()
invocations, call executeBatch()
automatically;
0 means manual calls to executeBatch are requiredclosure
- the closure containing batch and optionally other statements
Returns: an array of update counts containing one element for each
command in the batch. The elements of the array are ordered according
to the order in which commands were added to the batch.
Throws:
SQLException
- if a database access error occurs,
or this method is called on a closed Statement
, or the
driver does not support batch statements. Throws BatchUpdateException
(a subclass of SQLException
) if one of the commands sent to the
database fails to execute properly or attempts to return a result set.See Also: withBatch(Closure)
,
BatchingStatementWrapper
,
Statement
withBatch
public int[] withBatch (String sql,
Closure closure)
throws SQLException
Performs the closure (containing batch operations specific to an associated prepared statement)
within a batch. Uses a batch size of zero, i.e. no automatic partitioning of batches.
This means that executeBatch()
will be called automatically after the withBatch
closure has finished but may be called explicitly if desired as well for more fine-grained
partitioning of the batch.
The closure will be called with a single argument; the prepared
statement (actually a BatchingPreparedStatementWrapper
helper object)
associated with this batch.
An example:
def updateCounts = sql.withBatch('insert into TABLENAME(a, b, c) values (?, ?, ?)') { ps ->
ps.addBatch([10, 12, 5])
ps.addBatch([7, 3, 98])
ps.addBatch(22, 67, 11)
def partialUpdateCounts = ps.executeBatch() // optional interim batching
ps.addBatch(30, 40, 50)
...
}
For integrity and performance reasons, you may wish to consider executing your batch command(s) within a transaction:
sql.withTransaction {
def result1 = sql.withBatch { ... }
...
}
Parameters: sql
- batch update statementclosure
- the closure containing batch statements (to bind parameters) and optionally other statements
Returns: an array of update counts containing one element for each
binding in the batch. The elements of the array are ordered according
to the order in which commands were executed.
Throws:
SQLException
- if a database access error occurs,
or this method is called on a closed Statement
, or the
driver does not support batch statements. Throws BatchUpdateException
(a subclass of SQLException
) if one of the commands sent to the
database fails to execute properly or attempts to return a result set.See Also: withBatch(int, String, Closure)
,
BatchingPreparedStatementWrapper
,
PreparedStatement
withBatch
public int[] withBatch (int batchSize,
String sql,
Closure closure)
throws SQLException
Performs the closure (containing batch operations specific to an associated prepared statement)
within a batch using a given batch size.
After every batchSize
addBatch(params)
operations, automatically calls an executeBatch()
operation to "chunk" up the database operations
into partitions. Though not normally needed, you can also explicitly call executeBatch()
which
after executing the current batch, resets the batch count back to zero.
The closure will be called with a single argument; the prepared
statement (actually a BatchingPreparedStatementWrapper
helper object)
associated with this batch.
Below is an example using a batchSize of 20:
def updateCounts = sql.withBatch(20, 'insert into TABLENAME(a, b, c) values (?, ?, ?)') { ps ->
ps.addBatch(10, 12, 5) // varargs style
ps.addBatch([7, 3, 98]) // list
ps.addBatch([22, 67, 11])
...
}
Named parameters (into maps or domain objects) are also supported:
def updateCounts = sql.withBatch(20, 'insert into TABLENAME(a, b, c) values (:foo, :bar, :baz)') { ps ->
ps.addBatch([foo:10, bar:12, baz:5]) // map
ps.addBatch(foo:7, bar:3, baz:98) // Groovy named args allow outer brackets to be dropped
...
}
Named ordinal parameters (into maps or domain objects) are also supported:
def updateCounts = sql.withBatch(20, 'insert into TABLENAME(a, b, c) values (?1.foo, ?2.bar, ?2.baz)') { ps ->
ps.addBatch([[foo:22], [bar:67, baz:11]]) // list of maps or domain objects
ps.addBatch([foo:10], [bar:12, baz:5]) // varargs allows outer brackets to be dropped
ps.addBatch([foo:7], [bar:3, baz:98])
...
}
// swap to batch size of 5 and illustrate simple and domain object cases ...
class Person { String first, last }
def updateCounts2 = sql.withBatch(5, 'insert into PERSON(id, first, last) values (?1, ?2.first, ?2.last)') { ps ->
ps.addBatch(1, new Person(first:'Peter', last:'Pan'))
ps.addBatch(2, new Person(first:'Snow', last:'White'))
...
}
For integrity and performance reasons, you may wish to consider executing your batch command(s) within a transaction:
sql.withTransaction {
def result1 = sql.withBatch { ... }
...
}
Parameters: batchSize
- partition the batch into batchSize pieces, i.e. after batchSize
addBatch()
invocations, call executeBatch()
automatically;
0 means manual calls to executeBatch are required if additional partitioning of the batch is requiredsql
- batch update statementclosure
- the closure containing batch statements (to bind parameters) and optionally other statements
Returns: an array of update counts containing one element for each
binding in the batch. The elements of the array are ordered according
to the order in which commands were executed.
Throws:
SQLException
- if a database access error occurs,
or this method is called on a closed Statement
, or the
driver does not support batch statements. Throws BatchUpdateException
(a subclass of SQLException
) if one of the commands sent to the
database fails to execute properly or attempts to return a result set.See Also: BatchingPreparedStatementWrapper
,
PreparedStatement
cacheStatements
public void cacheStatements (Closure closure)
throws SQLException
Caches every created preparedStatement in Closure closure
Every cached preparedStatement is closed after closure has been called.
If the closure takes a single argument, it will be called
with the connection, otherwise it will be called with no arguments.
Parameters: closure
- the given closure
Throws:
SQLException
- if a database error occursSee Also: setCacheStatements(boolean)
executeQuery
protected final ResultSet executeQuery (String sql)
throws SQLException
Useful helper method which handles resource management when executing a
query which returns a result set.
Derived classes of Sql can override "createQueryCommand" and then call
this method to access the ResultSet returned from the provided query
or alternatively can use the higher-level method of Sql which return
result sets which are funnelled through this method, e.g. eachRow, query.
Parameters: sql
- query to execute
Returns: the resulting ResultSet
Throws:
SQLException
- if a database error occurs
executePreparedQuery
protected final ResultSet executePreparedQuery (String sql,
List <Object > params)
throws SQLException
Useful helper method which handles resource management when executing a
prepared query which returns a result set.
Derived classes of Sql can override "createPreparedQueryCommand" and then
call this method to access the ResultSet returned from the provided query.
Parameters: sql
- query to executeparams
- parameters matching question mark placeholders in the query
Returns: the resulting ResultSet
Throws:
SQLException
- if a database error occurs
asList
protected List <GroovyRowResult > asList (String sql,
ResultSet rs)
throws SQLException
Hook to allow derived classes to override list of result collection behavior.
The default behavior is to return a list of GroovyRowResult objects corresponding
to each row in the ResultSet.
Parameters: sql
- query to executers
- the ResultSet to process
Returns: the resulting list of rows
Throws:
SQLException
- if a database error occurs
asList
protected List <GroovyRowResult > asList (String sql,
ResultSet rs,
Closure metaClosure)
throws SQLException
Hook to allow derived classes to override list of result collection behavior.
The default behavior is to return a list of GroovyRowResult objects corresponding
to each row in the ResultSet.
Parameters: sql
- query to executers
- the ResultSet to processmetaClosure
- called for meta data (only once after sql execution)
Returns: the resulting list of rows
Throws:
SQLException
- if a database error occurs
asList
protected List <GroovyRowResult > asList (String sql,
ResultSet rs,
int offset,
int maxRows,
Closure metaClosure)
throws SQLException
Throws:
SQLException
asSql
protected String asSql (GString gstring,
List <Object > values)
Hook to allow derived classes to override sql generation from GStrings.
Parameters: gstring
- a GString containing the SQL query with embedded paramsvalues
- the values to embed
Returns: the SQL version of the given query using ? instead of any parameter See Also: expand(Object)
nullify
protected String nullify (String sql)
Hook to allow derived classes to override null handling.
Default behavior is to replace ?'"? references with NULLish
Parameters: sql
- the SQL statement
Returns: the modified SQL String
findWhereKeyword
protected int findWhereKeyword (String sql)
Hook to allow derived classes to override where clause sniffing.
Default behavior is to find the first 'where' keyword in the sql
doing simple avoidance of the word 'where' within quotes.
Parameters: sql
- the SQL statement
Returns: the index of the found keyword or -1 if not found
getParameters
protected List <Object > getParameters (GString gstring)
Hook to allow derived classes to override behavior associated with
extracting params from a GString.
Parameters: gstring
- a GString containing the SQL query with embedded params
Returns: extracts the parameters from the expression as a List See Also: expand(Object)
setParameters
protected void setParameters (List <Object > params,
PreparedStatement statement)
throws SQLException
Hook to allow derived classes to override behavior associated with
setting params for a prepared statement. Default behavior is to
append the parameters to the given statement using setObject
.
Parameters: params
- the parameters to appendstatement
- the statement
Throws:
SQLException
- if a database access error occurs
setObject
protected void setObject (PreparedStatement statement,
int i,
Object value)
throws SQLException
Strategy method allowing derived classes to handle types differently
such as for CLOBs etc.
Parameters: statement
- the statement of interesti
- the index of the object of interestvalue
- the new object value
Throws:
SQLException
- if a database access error occurs
createConnection
protected Connection createConnection ()
throws SQLException
An extension point allowing derived classes to change the behavior of
connection creation. The default behavior is to either use the
supplied connection or obtain it from the supplied datasource.
Returns: the connection associated with this Sql
Throws:
SQLException
- if a SQL error occurs
closeResources
protected void closeResources (Connection connection,
Statement statement,
ResultSet results)
An extension point allowing derived classes to change the behavior
of resource closing.
Parameters: connection
- the connection to closestatement
- the statement to closeresults
- the results to close
closeResources
protected void closeResources (Connection connection,
Statement statement)
An extension point allowing the behavior of resource closing to be
overridden in derived classes.
Parameters: connection
- the connection to closestatement
- the statement to close
closeResources
protected void closeResources (Connection connection)
An extension point allowing the behavior of resource closing to be
overridden in derived classes.
Parameters: connection
- the connection to close
configure
protected void configure (Statement statement)
Provides a hook for derived classes to be able to configure JDBC statements.
Default behavior is to call a previously saved closure, if any, using the
statement as a parameter.
Parameters: statement
- the statement to configure
checkForNamedParams
public SqlWithParams checkForNamedParams (String sql,
List <Object > params)
preCheckForNamedParams
public SqlWithParams preCheckForNamedParams (String sql)
getUpdatedParams
public List <Object > getUpdatedParams (List <Object > params,
List <Tuple > indexPropList)
isCacheNamedQueries
public boolean isCacheNamedQueries ()
Returns: boolean true if caching is enabled (the default is true)
setCacheNamedQueries
public void setCacheNamedQueries (boolean cacheNamedQueries)
Enables named query caching.
if cacheNamedQueries is true, cache is created and processed named queries will be cached.
if cacheNamedQueries is false, no caching will occur saving memory at the cost of additional processing time.
Parameters: cacheNamedQueries
- the new value
isEnableNamedQueries
public boolean isEnableNamedQueries ()
Returns: boolean true if named query processing is enabled (the default is true)
setEnableNamedQueries
public void setEnableNamedQueries (boolean enableNamedQueries)
Enables named query support.
if enableNamedQueries is true, queries with ':propname' and '?1.propname' style placeholders will be processed.
if enableNamedQueries is false, this feature will be turned off.
Parameters: enableNamedQueries
- the new value
createQueryCommand
protected Sql.AbstractQueryCommand createQueryCommand (String sql)
Factory for the QueryCommand command pattern object allows subclasses to
supply implementations of the command class. The factory will be used in a pattern
similar to:
AbstractQueryCommand q = createQueryCommand("update TABLE set count = 0) where count is null");
try {
ResultSet rs = q.execute();
return asList(rs);
} finally {
q.closeResources();
}
Parameters: sql
- statement to be executed
Returns: a command - invoke its execute() and closeResource() methods
createPreparedQueryCommand
protected Sql.AbstractQueryCommand createPreparedQueryCommand (String sql,
List <Object > queryParams)
Factory for the PreparedQueryCommand command pattern object allows subclass to supply implementations
of the command class.
Parameters: sql
- statement to be executed, including optional parameter placeholders (?)queryParams
- List of parameter values corresponding to parameter placeholders
Returns: a command - invoke its execute() and closeResource() methods See Also: createQueryCommand(String)
setInternalConnection
protected void setInternalConnection (Connection conn)
Stub needed for testing. Called when a connection is opened by one of the command-pattern classes
so that a test case can monitor the state of the connection through its subclass.
Parameters: conn
- the connection that is about to be used by a command