Groovy 1.7.11

groovy.sql
[Java] Class Sql

java.lang.Object
  groovy.sql.Sql

public class Sql
extends Object

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.

Typical usage

First you need to set up your sql instance. There are several constructors and a few newInstance factory methods available to do this. In simple cases, you can just provide the necessary details to set up a connection (e.g. for hsqldb):
 def db = [url:'jdbc:hsqldb:mem:testDB', user:'sa', password:'', driver:'org.hsqldb.jdbcDriver']
 def sql = Sql.newInstance(db.url, db.user, db.password, db.driver)
 
or if you have an existing connection (perhaps from a connection pool) or a datasource use one of the constructors:
 def sql = new Sql(datasource)
 
Now you can invoke sql, e.g. to create a table:
 sql.execute '''
     create table PROJECT (
         id integer not null,
         name varchar(50),
         url varchar(100),
     )
 '''
 
Or insert a row using JDBC PreparedStatement inspired syntax:
 def params = [10, 'Groovy', 'http://groovy.codehaus.org']
 sql.execute 'insert into PROJECT (id, name, url) values (?, ?, ?)', params
 
Or insert a row using GString syntax:
 def map = [id:20, name:'Grails', url:'http://grails.codehaus.org']
 sql.execute "insert into PROJECT (id, name, url) values ($map.id, $map.name, $map.url)"
 
Or a row update:
 def newUrl = 'http://grails.org'
 def project = 'Grails'
 sql.executeUpdate "update PROJECT set url=$newUrl where name=$project"
 
Now try a query using eachRow:
 println 'Some GR8 projects:'
 sql.eachRow('select * from PROJECT') { row ->
     println "${row.name.padRight(10)} ($row.url)"
 }
 
Which will produce something like this:
 Some GR8 projects:
 Groovy     (http://groovy.codehaus.org)
 Grails     (http://grails.org)
 Griffon    (http://griffon.codehaus.org)
 Gradle     (http://gradle.org)
 
Now try a query using rows:
 def rows = sql.rows("select * from PROJECT where name like 'Gra%'")
 assert rows.size() == 2
 println rows.join('\n')
 
with output like this:
 [ID:20, NAME:Grails, URL:http://grails.org]
 [ID:40, NAME:Gradle, URL:http://gradle.org]
 
Finally, we should clean up:
 sql.close()
 
If we are using a DataSource and we haven't enabled statement caching, then strictly speaking the final close() method isn't required - as all connection handling is performed transparently on our behalf; however, it doesn't hurt to have it there as it will return silently in that case.

Named and named ordinal parameters

Several of the methods in this class which have a String-based sql query and params in a List or Object[] 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.

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. 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:

 println sql.rows('select * from PROJECT where name=:foo', [foo:'Gradle'])
 println sql.rows('select * from PROJECT where name=:foo and id=?.bar', [foo:'Gradle', bar:40])
 class MyDomainClass { def baz = 'Griffon' }
 println sql.rows('select * from PROJECT where name=?.baz', new MyDomainClass())
 
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 is an example:
 println sql.rows("select * from PROJECT where name=?1.baz and id=?2.num", new MyDomainClass(), [num:30])
 

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.

Authors:
Chris Stevenson
James Strachan
Paul King
Marc DeXeT
John Bito
John Hurst
Version:
\$Revision\$


Nested Class Summary
protected class Sql.AbstractQueryCommand

protected class Sql.PreparedQueryCommand

protected class Sql.QueryCommand

 
Field Summary
static OutParameter ARRAY

static OutParameter BIGINT

static OutParameter BINARY

static OutParameter BIT

static OutParameter BLOB

static OutParameter BOOLEAN

static OutParameter CHAR

static OutParameter CLOB

static OutParameter DATALINK

static OutParameter DATE

static OutParameter DECIMAL

static OutParameter DISTINCT

static OutParameter DOUBLE

static OutParameter FLOAT

static OutParameter INTEGER

static OutParameter JAVA_OBJECT

protected static Logger LOG

Hook to allow derived classes to access the log

static OutParameter LONGVARBINARY

static OutParameter LONGVARCHAR

static OutParameter NULL

static OutParameter NUMERIC

static OutParameter OTHER

static OutParameter REAL

static OutParameter REF

static OutParameter SMALLINT

static OutParameter STRUCT

static OutParameter TIME

static OutParameter TIMESTAMP

static OutParameter TINYINT

static OutParameter VARBINARY

static OutParameter VARCHAR

 
Constructor Summary
Sql(DataSource dataSource)

Constructs an SQL instance using the given DataSource.

Sql(Connection connection)

Sql(Sql parent)

 
Method Summary
static InParameter ARRAY(Object value)

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)

static InParameter CHAR(Object value)

static InParameter CLOB(Object value)

static InParameter DATALINK(Object value)

static InParameter DATE(Object value)

static InParameter DECIMAL(Object value)

static InParameter DISTINCT(Object value)

static InParameter DOUBLE(Object value)

static InParameter FLOAT(Object value)

static InParameter INTEGER(Object value)

static InParameter JAVA_OBJECT(Object value)

static InParameter LONGVARBINARY(Object value)

static InParameter LONGVARCHAR(Object value)

static InParameter NULL(Object value)

static InParameter NUMERIC(Object value)

static InParameter OTHER(Object value)

static InParameter REAL(Object value)

static InParameter REF(Object value)

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)

protected List asList(String sql, ResultSet rs)

Hook to allow derived classes to override list of result collection behavior.

protected List asList(String sql, ResultSet rs, Closure metaClosure)

protected String asSql(GString gstring, List values)

Hook to allow derived classes to override sql generation from GStrings.

void cacheConnection(Closure closure)

void cacheStatements(Closure closure)

Caches every created preparedStatement in Closure closure
Every cached preparedStatement is closed after closure has been called.

int call(String sql)

int call(GString gstring)

int call(String sql, List params)

int call(String sql, Object[] params)

Performs a stored procedure call with the given parameters.

void call(String sql, List params, Closure closure)

void call(GString gstring, Closure closure)

Performs a stored procedure call with the given parameters, calling the closure once with all result objects.

SqlWithParams checkForNamedParams(String sql, List params)

void close()

protected void closeResources(Connection connection, Statement statement, ResultSet results)

An extension point allowing derived classes to change the behavior of resource closing.

protected void closeResources(Connection connection, Statement statement)

protected void closeResources(Connection connection)

void commit()

protected void configure(Statement statement)

protected Connection createConnection()

An extension point allowing derived classes to change the behavior of connection creation.

protected Sql.AbstractQueryCommand createPreparedQueryCommand(String sql, List queryParams)

protected Sql.AbstractQueryCommand createQueryCommand(String sql)

Stub needed for testing.

DataSet dataSet(String table)

DataSet dataSet(Class type)

void eachRow(String sql, Closure closure)

void eachRow(String sql, Closure metaClosure, Closure rowClosure)

void eachRow(String sql, List params, Closure metaClosure, Closure closure)

Performs the given SQL query calling the given Closure with each row of the result set.

void eachRow(String sql, List params, 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 closure)

void eachRow(GString gstring, Closure closure)

boolean execute(String sql)

boolean execute(String sql, List params)

Executes the given piece of SQL with parameters.

boolean execute(String sql, Object[] params)

Executes the given piece of SQL with parameters.

boolean execute(GString gstring)

List executeInsert(String sql)

List executeInsert(String sql, List params)

Executes the given SQL statement (typically an INSERT statement).

List executeInsert(String sql, Object[] params)

Executes the given SQL statement (typically an INSERT statement).

List executeInsert(GString gstring)

protected ResultSet executePreparedQuery(String sql, List params)

protected ResultSet executeQuery(String sql)

Hook to allow derived classes to access ResultSet returned from query.

int executeUpdate(String sql)

int executeUpdate(String sql, List params)

Executes the given SQL update with parameters.

int executeUpdate(String sql, Object[] params)

Executes the given SQL update with parameters.

int executeUpdate(GString gstring)

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.

Object firstRow(String sql)

Performs the given SQL query and return the first row of the result set.

Object firstRow(GString gstring)

Object firstRow(String sql, List params)

Object firstRow(String sql, Object[] params)

Connection getConnection()

DataSource getDataSource()

protected List 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()

@return Returns the updateCount.

static InParameter in(int type, Object value)

static InOutParameter inout(InParameter in)

Create an inout parameter using this in parameter.

boolean isCacheNamedQueries()

boolean isCacheStatements()

boolean isEnableNamedQueries()

boolean isWithinBatch()

Returns true if the current Sql object is currently executing a withBatch method call.

static void loadDriver(String driverClassName)

Attempts to load the JDBC driver on the thread, current or system class loaders

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 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 Sql newInstance(String url, String driverClassName)

Creates a new Sql instance given a JDBC connection URL and a driver class name.

static Sql newInstance(Map args)

Creates a new Sql instance given parameters in a Map.

protected String nullify(String sql)

Hook to allow derived classes to override null handling.

static OutParameter out(int type)

Create a new OutParameter

void query(String sql, Closure closure)

void query(String sql, List params, Closure closure)

Performs the given SQL query, which should return a single ResultSet object.

void query(GString gstring, Closure closure)

Performs the given SQL query, which should return a single ResultSet object.

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 rows(String sql)

List rows(String sql, Closure metaClosure)

List rows(String sql, List params)

Performs the given SQL query and return the rows of the result set.

List rows(String sql, Object[] params)

List rows(String sql, List params, Closure metaClosure)

List rows(GString gstring)

Performs the given SQL query and return the rows of the result set.

List rows(GString gstring, Closure metaClosure)

void setCacheNamedQueries(boolean cacheNamedQueries)

void setCacheStatements(boolean cacheStatements)

@return boolean true if cache is enabled (default is false)

void setEnableNamedQueries(boolean enableNamedQueries)

protected void setInternalConnection(Connection conn)

protected void setObject(PreparedStatement statement, int i, Object value)

protected void setParameters(List params, PreparedStatement 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.

int[] withBatch(Closure closure)

int[] withBatch(int batchSize, Closure closure)

void withStatement(Closure configureStatement)

void withTransaction(Closure closure)

Performs the closure within a transaction using a cached connection.

 
Methods inherited from class Object
wait, wait, wait, equals, toString, hashCode, getClass, notify, notifyAll
 

Field Detail

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


LOG

protected static final Logger LOG
Hook to allow derived classes to access the log


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


 
Constructor Detail

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)


Sql

public Sql(Sql parent)


 
Method Detail

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)


asList

protected List asList(String sql, ResultSet rs)
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.
throws:
SQLException if a database error occurs
Parameters:
sql - query to execute
rs - the ResultSet to process
Returns:
the resulting list of rows


asList

protected List asList(String sql, ResultSet rs, Closure metaClosure)


asSql

protected String asSql(GString gstring, List values)
Hook to allow derived classes to override sql generation from GStrings.
Parameters:
gstring - a GString containing the SQL query with embedded params
values - the values to embed
Returns:
the SQL version of the given query using ? instead of any parameter
See Also:
expand(Object)


cacheConnection

public void cacheConnection(Closure closure)


cacheStatements

public void cacheStatements(Closure closure)
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.
throws:
SQLException if a database error occurs
Parameters:
closure - the given closure
See Also:
setCacheStatements(boolean)


call

public int call(String sql)


call

public int call(GString gstring)


call

public int call(String sql, List params)


call

public int call(String sql, Object[] params)
Performs a stored procedure call with the given parameters.

An Object array variant of call(String, List).

throws:
SQLException if a database access error occurs
Parameters:
sql - the SQL statement
params - an array of parameters
Returns:
the number of rows updated or 0 for SQL statements that return nothing
See Also:
call(String)


call

public void call(String sql, List params, Closure closure)


call

public void call(GString gstring, Closure closure)
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.
throws:
SQLException if a database access error occurs
Parameters:
gstring - a GString containing the SQL query with embedded params
closure - called for each row with a GroovyResultSet
See Also:
call(String, List, Closure)
expand(Object)


checkForNamedParams

public SqlWithParams checkForNamedParams(String sql, List params)


close

public void close()


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 close
statement - the statement to close
results - the results to close


closeResources

protected void closeResources(Connection connection, Statement statement)


closeResources

protected void closeResources(Connection connection)


commit

public void commit()


configure

protected void configure(Statement statement)


createConnection

protected Connection createConnection()
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.
throws:
java.sql.SQLException if a SQL error occurs
Returns:
the connection associated with this Sql


createPreparedQueryCommand

protected Sql.AbstractQueryCommand createPreparedQueryCommand(String sql, List queryParams)


createQueryCommand

protected Sql.AbstractQueryCommand createQueryCommand(String sql)
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


dataSet

public DataSet dataSet(String table)


dataSet

public DataSet dataSet(Class type)


eachRow

public void eachRow(String sql, Closure closure)


eachRow

public void eachRow(String sql, Closure metaClosure, Closure rowClosure)


eachRow

public void eachRow(String sql, List params, Closure metaClosure, Closure closure)
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.

throws:
SQLException if a database access error occurs
Parameters:
sql - the sql statement
params - a list of parameters
metaClosure - called for meta data (only once after sql execution)
closure - called for each row with a GroovyResultSet


eachRow

public void eachRow(String sql, List params, Closure closure)
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.
throws:
SQLException if a database access error occurs
Parameters:
sql - the sql statement
params - a list of parameters
closure - called for each row with a GroovyResultSet


eachRow

public void eachRow(GString gstring, Closure metaClosure, Closure closure)


eachRow

public void eachRow(GString gstring, Closure closure)


execute

public boolean execute(String sql)


execute

public boolean execute(String sql, List params)
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.

throws:
SQLException if a database access error occurs
Parameters:
sql - the SQL statement
params - 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


execute

public boolean execute(String sql, Object[] params)
Executes the given piece of SQL with parameters. An Object array variant of execute(String, List).
throws:
SQLException if a database access error occurs
Parameters:
sql - the SQL statement
params - 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


execute

public boolean execute(GString gstring)


executeInsert

public List executeInsert(String sql)


executeInsert

public List executeInsert(String sql, List params)
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.

throws:
SQLException if a database access error occurs
Parameters:
sql - The SQL statement to execute
params - 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)


executeInsert

public List executeInsert(String sql, Object[] params)
Executes the given SQL statement (typically an INSERT statement). An Object array variant of executeInsert(String, List).
throws:
SQLException if a database access error occurs
Parameters:
sql - The SQL statement to execute
params - 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)


executeInsert

public List executeInsert(GString gstring)


executePreparedQuery

protected final ResultSet executePreparedQuery(String sql, List params)


executeQuery

protected final ResultSet executeQuery(String sql)
Hook to allow derived classes to access ResultSet returned from query.
throws:
SQLException if a database error occurs
Parameters:
sql - query to execute
Returns:
the resulting ResultSet


executeUpdate

public int executeUpdate(String sql)


executeUpdate

public int executeUpdate(String sql, List params)
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.

throws:
SQLException if a database access error occurs
Parameters:
sql - the SQL statement
params - a list of parameters
Returns:
the number of rows updated or 0 for SQL statements that return nothing


executeUpdate

public int executeUpdate(String sql, Object[] params)
Executes the given SQL update with parameters. An Object array variant of executeUpdate(String, List).
throws:
SQLException if a database access error occurs
Parameters:
sql - the SQL statement
params - an array of parameters
Returns:
the number of rows updated or 0 for SQL statements that return nothing


executeUpdate

public int executeUpdate(GString gstring)


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)


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


firstRow

public Object firstRow(String sql)
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.
throws:
SQLException if a database access error occurs
Parameters:
sql - the SQL statement
Returns:
a GroovyRowResult object or null if no row is found


firstRow

public Object firstRow(GString gstring)


firstRow

public Object firstRow(String sql, List params)


firstRow

public Object firstRow(String sql, Object[] params)


getConnection

public Connection getConnection()


getDataSource

public DataSource getDataSource()


getParameters

protected List 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)


getResultSetConcurrency

public int getResultSetConcurrency()
Gets the resultSetConcurrency for statements created using the connection.
Returns:
the current resultSetConcurrency value
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


getResultSetType

public int getResultSetType()
Gets the resultSetType for statements created using the connection.
Returns:
the current resultSetType value
Since:
1.5.2


getUpdateCount

public int getUpdateCount()
Returns:
Returns the updateCount.


in

public static InParameter in(int type, Object value)


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


isCacheNamedQueries

public boolean isCacheNamedQueries()


isCacheStatements

public boolean isCacheStatements()


isEnableNamedQueries

public boolean isEnableNamedQueries()


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.


loadDriver

public static void loadDriver(String driverClassName)
Attempts to load the JDBC driver on the thread, current or system class loaders
throws:
ClassNotFoundException if the class cannot be found or loaded
Parameters:
driverClassName - the fully qualified class name of the driver class


newInstance

public static Sql newInstance(String url)
Creates a new Sql instance given a JDBC connection URL.
throws:
SQLException if a database access error occurs
Parameters:
url - a database url of the form jdbc:subprotocol:subname
Returns:
a new Sql instance with a connection


newInstance

public static Sql newInstance(String url, Properties properties)
Creates a new Sql instance given a JDBC connection URL and some properties.
throws:
SQLException if a database access error occurs
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


newInstance

public 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.
throws:
SQLException if a database access error occurs
throws:
ClassNotFoundException if the class cannot be found or loaded
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
driverClassName - the fully qualified class name of the driver class
Returns:
a new Sql instance with a connection


newInstance

public static Sql newInstance(String url, String user, String password)
Creates a new Sql instance given a JDBC connection URL, a username and a password.
throws:
SQLException if a database access error occurs
Parameters:
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
Returns:
a new Sql instance with a connection


newInstance

public 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.
throws:
SQLException if a database access error occurs
throws:
ClassNotFoundException if the class cannot be found or loaded
Parameters:
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
driverClassName - the fully qualified class name of the driver class
Returns:
a new Sql instance with a connection


newInstance

public static Sql newInstance(String url, String driverClassName)
Creates a new Sql instance given a JDBC connection URL and a driver class name.
throws:
SQLException if a database access error occurs
throws:
ClassNotFoundException if the class cannot be found or loaded
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


newInstance

public static Sql newInstance(Map args)
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
 )
 
throws:
SQLException if a database access error occurs
throws:
ClassNotFoundException if the class cannot be found or loaded
Parameters:
args - a Map contain further arguments
Returns:
a new Sql instance with a connection


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


out

public static OutParameter out(int type)
Create a new OutParameter
Parameters:
type - the JDBC data type.
Returns:
an OutParameter


query

public void query(String sql, Closure closure)


query

public void query(String sql, List params, Closure closure)
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.

throws:
SQLException if a database access error occurs
Parameters:
sql - the sql statement
params - a list of parameters
closure - called for each row with a GroovyResultSet


query

public void query(GString gstring, Closure closure)
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.
throws:
SQLException if a database access error occurs
Parameters:
gstring - a GString containing the SQL query with embedded params
closure - called for each row with a GroovyResultSet
See Also:
expand(Object)


resultSet

public static ResultSetOutParameter resultSet(int type)
Create a new ResultSetOutParameter
Parameters:
type - the JDBC data type.
Returns:
a ResultSetOutParameter


rollback

public void rollback()
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


rows

public List rows(String sql)


rows

public List rows(String sql, Closure metaClosure)


rows

public List rows(String sql, List params)
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"
 

Resource handling is performed automatically where appropriate.

throws:
SQLException if a database access error occurs
Parameters:
sql - the SQL statement
params - a list of parameters
Returns:
a list of GroovyRowResult objects


rows

public List rows(String sql, Object[] params)


rows

public List rows(String sql, List params, Closure metaClosure)


rows

public List rows(GString gstring)
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.
throws:
SQLException if a database access error occurs
Parameters:
gstring - a GString containing the SQL query with embedded params
Returns:
a list of GroovyRowResult objects
See Also:
expand(Object)


rows

public List rows(GString gstring, Closure metaClosure)


setCacheNamedQueries

public void setCacheNamedQueries(boolean cacheNamedQueries)


setCacheStatements

public void setCacheStatements(boolean cacheStatements)
Returns:
boolean true if cache is enabled (default is false)


setEnableNamedQueries

public void setEnableNamedQueries(boolean enableNamedQueries)


setInternalConnection

protected void setInternalConnection(Connection conn)


setObject

protected void setObject(PreparedStatement statement, int i, Object value)


setParameters

protected void setParameters(List params, PreparedStatement statement)


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


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


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


withBatch

public int[] withBatch(Closure closure)


withBatch

public int[] withBatch(int batchSize, Closure closure)


withStatement

public void withStatement(Closure configureStatement)


withTransaction

public void withTransaction(Closure closure)
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.
throws:
SQLException if a database error occurs
Parameters:
closure - the given closure


 

Copyright © 2003-2010 The Codehaus. All rights reserved.