com.ibm.db
Class SelectStatement

java.lang.Object
  |
  +--com.ibm.db.Statement
        |
        +--com.ibm.db.SelectStatement
Direct Known Subclasses:
CallableStatement

public class SelectStatement
extends Statement
implements DatabaseConnectionBeforeListener, DatabaseConnectionAfterListener

SelectStatement represents an SQL Select statement.

See Also:
Statement, Serialized Form

Field Summary
private static java.lang.String copyright
           
protected  boolean executing
           
protected  boolean fieldFillCacheOnExecute
           
protected  boolean fieldForceSearchedUpdate
           
protected  boolean fieldLockRows
           
protected  int fieldMaximumPacketsInCache
           
protected  int fieldMaximumRows
           
protected  int fieldPacketSize
           
private  SelectResult fieldResult
           
protected  boolean firstFirstRow
           
protected  boolean forVAJavaSelect
           
protected  boolean largeResultSetScrollingEnabled
           
(package private) static long serialVersionUID
           
 
Fields inherited from class com.ibm.db.Statement
aStatementAfterListener, aStatementBeforeListener, copyright, executingSQL, fieldConnection, fieldDistinctTypesEnabled, fieldExecuted, fieldMetaData, fieldReadOnly, fieldTimeout, fieldValidateLOBs, parameters, propertyChange, rt, serialVersionUID
 
Constructor Summary
SelectStatement()
          Constructs a new SelectStatement.
SelectStatement(boolean forVAJava)
          Constructs a new SelectStatement.
 
Method Summary
 void aboutToCommit(DataEvent event)
          Invoked when the com.ibm.db.DatabaseConnectionBefore event aboutToCommmit fires.
 void aboutToConnect(DataEvent event)
          Invoked when the com.ibm.db.DatabaseConnectionBefore event aboutToConnect fires.
 void aboutToDisconnect(DataEvent event)
          Invoked when the com.ibm.db.DatabaseConnectionBefore event aboutToDisconnect fires.
 void aboutToRollback(DataEvent event)
          Invoked when the com.ibm.db.DatabaseConnectionBefore event aboutToRollback fires.
 boolean areDistinctTypesEnabled()
          Returns true if use of user-defined distinct types is enabled for this statement.
 void cancelExecution()
          Cancels execution of the SQL statement which is associated with this SelectStatement.
protected  void checkConnection()
          This method is called to do cleanup of the statement and any result sets when it is found that there is no active connection.
 void close()
          Applies any changes in the current row of the associated Select Result to the database, and then closes the result set and the statement.
protected  void closeInternal(boolean finalizing)
          Closes the statement.
 void committed(DataEvent event)
          Invoked when the com.ibm.db.DatabaseConnectionAfter event commmitted fires.
 void connected(DataEvent event)
          Invoked when the com.ibm.db.DatabaseConnectionAfter event connected fires.
protected  void createResultTable()
          This method was created in VisualAge.
protected  void disconnect()
          This method was created in VisualAge.
 void disconnected(DataEvent event)
          Invoked when the com.ibm.db.DatabaseConnectionAfter event disconnected fires and closes the statement.
 void execute()
          Executes the SQL SELECT statement and positions to the first row in the result set.
protected  void finalize()
          Code to perform when this object is garbage collected.
protected  void fireAboutToClose(DataEvent event)
          Method to support listener events.
protected  void fireClosed(DataEvent event)
          Method to support listener events.
 int getMaximumPacketsInCache()
          Returns the maximum number of packets the cache can contain at one time.
 int getMaximumRows()
          Returns the maximum size of the result set.
 int getPacketSize()
          Returns the number of rows that are in one packet.
 SelectResult getResult()
          Returns the SelectResult that is associated with this SelectStatement.
protected  void initialize()
          Initialize the class.
 boolean isFillCacheOnExecute()
          Returns true if as many rows as allowed are fetched into the cache when execute is invoked.
 boolean isForceSearchedUpdate()
          Returns true if searched update/delete will always be done when updateRow()/deleteRow() is invoked.
protected  boolean isForVAJavaSelect()
          Returns true if the statement is for a VA for Java Select bean.
 boolean isLargeResultSetScrollingEnabled()
          Returns true if full scrollability of large result sets is enabled for this statement.
 boolean isLockRows()
          Returns true if a database lock is automatically held on a row while it is the current row in the associated Select Result.
 boolean isOpen()
          Returns true if the statement is open in the database and can be accessed, otherwise returns false.
private  void readObject(java.io.ObjectInputStream in)
          This method was reads in the serialized object and restores the following static/transient fields: propertyChange - contains a reference to a PropertyChangeSupport instance.
 void refresh()
          Refreshes the result set from the database by re-executing the SQL SELECT statement.
protected  void refreshResultTable()
          This method was created in VisualAge.
 void rolledBack(DataEvent event)
          Invoked when the com.ibm.db.DatabaseConnectionAfter event rolledBack fires.
 void setConnection(DatabaseConnection connection)
          Associates a DatabaseConnection with the Statement.
 void setDistinctTypesEnabled(boolean aValue)
          If true, enables the use of user-defined distinct types for this statement.
 void setFillCacheOnExecute(boolean fillCacheOnExecute)
          If true, fetches as many rows as allowed into the cache when execute is invoked.
 void setForceSearchedUpdate(boolean forceSearchedUpdate)
          If true, a searched update will be done when updateRow() is invoked and a searched delete will be done when deleteRow() is invoked.
 void setLargeResultSetScrollingEnabled(boolean enabled)
          If true, enables full scrollability of large result sets for this statement.
 void setLockRows(boolean lockRows)
          If true, a database lock is automatically held on a row while it is the current row in the associated Select Result.
 void setMaximumPacketsInCache(int maximumPacketsInCache)
          Sets the maximum number of packets the cache can contain at one time.
 void setMaximumRows(int maximumRows)
          Sets the maximum size of the result set.
 void setMetaData(StatementMetaData metaData)
          Associates a StatementMetaData with the Statement.
 void setPacketSize(int packetSize)
          Sets the number of rows that are in one packet.
protected  void validateSQL()
           
 
Methods inherited from class com.ibm.db.Statement
addStatementAfterListener, addStatementBeforeListener, applyTimeout, connect, copyParameters, fireAboutToExecute, fireExecuted, getConnection, getMetaData, getParameter, getParameter, getParameters, getParameterToString, getParameterToString, getTimeout, handleSQLException, isExecuted, isReadOnly, isValidateLOBs, removeStatementAfterListener, removeStatementBeforeListener, replaceHostVars, setParameter, setParameter, setParameterFromString, setParameterFromString, setReadOnly, setTimeout, setValidateLOBs
 
Methods inherited from class java.lang.Object
, clone, equals, getClass, hashCode, notify, notifyAll, registerNatives, toString, wait, wait, wait
 

Field Detail

fieldLockRows

protected boolean fieldLockRows

fieldMaximumPacketsInCache

protected int fieldMaximumPacketsInCache

fieldResult

private SelectResult fieldResult

fieldMaximumRows

protected int fieldMaximumRows

fieldPacketSize

protected int fieldPacketSize

fieldFillCacheOnExecute

protected boolean fieldFillCacheOnExecute

fieldForceSearchedUpdate

protected boolean fieldForceSearchedUpdate

forVAJavaSelect

protected boolean forVAJavaSelect

largeResultSetScrollingEnabled

protected boolean largeResultSetScrollingEnabled

executing

protected transient boolean executing

firstFirstRow

protected transient boolean firstFirstRow

serialVersionUID

static final long serialVersionUID

copyright

private static final java.lang.String copyright
Constructor Detail

SelectStatement

public SelectStatement()
Constructs a new SelectStatement.

SelectStatement

public SelectStatement(boolean forVAJava)
Constructs a new SelectStatement. If forVAJava is true, messages that refer to a row number, a column number, or the current row will be reported in VisualAge for Java Select bean terms (zero-based), instead of one-based.

This constructor only be used by classes in com.ibm.ivj.db.uibeans package.

Parameters:
forVAJava - if true report row, column and currentRow in VisualAge terms.
Method Detail

aboutToCommit

public void aboutToCommit(DataEvent event)
Invoked when the com.ibm.db.DatabaseConnectionBefore event aboutToCommmit fires. Updates the current row.
Specified by:
aboutToCommit in interface DatabaseConnectionBeforeListener
Parameters:
event - a DataEvent

aboutToConnect

public void aboutToConnect(DataEvent event)
Invoked when the com.ibm.db.DatabaseConnectionBefore event aboutToConnect fires. Takes no action.
Specified by:
aboutToConnect in interface DatabaseConnectionBeforeListener
Parameters:
event - a DataEvent

aboutToDisconnect

public void aboutToDisconnect(DataEvent event)
Invoked when the com.ibm.db.DatabaseConnectionBefore event aboutToDisconnect fires. Takes no action.
Specified by:
aboutToDisconnect in interface DatabaseConnectionBeforeListener
Parameters:
event - a DataEvent

aboutToRollback

public void aboutToRollback(DataEvent event)
Invoked when the com.ibm.db.DatabaseConnectionBefore event aboutToRollback fires. Takes no action.
Specified by:
aboutToRollback in interface DatabaseConnectionBeforeListener
Parameters:
event - a DataEvent

areDistinctTypesEnabled

public boolean areDistinctTypesEnabled()
Returns true if use of user-defined distinct types is enabled for this statement. Returns false if use of user-defined distinct types is not enabled for this statement. See the setDistinctTypesEnabled method for a fuller discussion of what it means for use of user-defined distinct types to be enabled.
Returns:
true if use of user-defined distinct types is enabled, otherwise false.
See Also:
setDistinctTypesEnabled(boolean)

cancelExecution

public void cancelExecution()
                     throws DataException
Cancels execution of the SQL statement which is associated with this SelectStatement. In order to use this method, it must be invoked from a thread different from the one in which the SQL statement is running. The SQL statement is either the one that executes the SELECT, or the one associated with a subsequent request to insert, update, or delete a row in the result set.

Overrides:
cancelExecution in class Statement
Throws:
DataException - noConnection - if no associated DatabaseConnection
DataException - notExecuting - if the statement is not currently being executed
DataException - sqlException - if an SQLException occurred

checkConnection

protected void checkConnection()
                        throws DataException
This method is called to do cleanup of the statement and any result sets when it is found that there is no active connection.

close

public void close()
           throws DataException
Applies any changes in the current row of the associated Select Result to the database, and then closes the result set and the statement. JDBC resources associated with the statement and its result set are released. After the statement is closed, no more rows can be fetched into the result set, but you can still use the SelectResult to update the database, and you can re-execute the statement.

Even if you do not explicitly call close(), JDBC resources are automatically freed when your SelectStatement is garbage collected, However, changes to the current row are not automatically applied in that case.

The events aboutToClose and closed are triggered by this method.

Throws:
DataException - noActiveConnection - if no active connection exists
DataException - rowChanged - if the current row cannot be updated because it cannot be found in the database
DataException - sqlException - if an SQLException occurred

closeInternal

protected void closeInternal(boolean finalizing)
                      throws DataException
Closes the statement. Called by close() and finalize() to release JDBC resources associated with the statement. Necessary events are fired by the caller.
Parameters:
finalizing - if true, do not update the current row before closing and do not throw any exceptions.
Throws:
DataException - sqlException - if an SQLException occurred

committed

public void committed(DataEvent event)
Invoked when the com.ibm.db.DatabaseConnectionAfter event commmitted fires. Takes no action.
Specified by:
committed in interface DatabaseConnectionAfterListener
Parameters:
event - a DataEvent

connected

public void connected(DataEvent event)
Invoked when the com.ibm.db.DatabaseConnectionAfter event connected fires. Takes no action
Specified by:
connected in interface DatabaseConnectionAfterListener
Parameters:
event - a DataEvent

createResultTable

protected void createResultTable()
                          throws DataException
This method was created in VisualAge.

disconnect

protected void disconnect()
This method was created in VisualAge.

disconnected

public void disconnected(DataEvent event)
Invoked when the com.ibm.db.DatabaseConnectionAfter event disconnected fires and closes the statement.
Specified by:
disconnected in interface DatabaseConnectionAfterListener
Parameters:
event - a DataEvent

execute

public void execute()
             throws DataException
Executes the SQL SELECT statement and positions to the first row in the result set. If needed, a connection is made to the database prior to executing the SQL statement, using the associated DatabaseConnection. The SQL statement is obtained from the StatementMetaData associated with this SelectStatement. The result set can be accessed through the SelectResult associated with this SelectStatement.

The events aboutToExecute and executed are triggered by this method.

The event cacheRowsChanged of the associated SelectResult is triggered by this method. The event propertyChange is triggered by this method for the bound properties currentRow and currentRowInCache.

Overrides:
execute in class Statement
Throws:
DataException - noConnection - if no associated DatabaseConnection
DataException - noGui - if no GUI available and logon prompt requested
DataException - badUidPwd - if incorrect Userid or password specified
DataException - noSQL - if the SQL statement is null
DataException - notSelect - if SQL statement is not a SELECT statement
DataException - noTransactions - if database does not support transactions and autoCommit set to false
DataException - sqlException - if an SQLException occurred
See Also:
DatabaseConnection, StatementMetaData, SelectResult

finalize

protected void finalize()
                 throws java.lang.Throwable
Code to perform when this object is garbage collected. Any exception thrown by a finalize method causes the finalization to halt. But otherwise, it is ignored.
Overrides:
finalize in class Statement

fireAboutToClose

protected void fireAboutToClose(DataEvent event)
Method to support listener events.
Parameters:
event - DataEvent

fireClosed

protected void fireClosed(DataEvent event)
Method to support listener events.
Parameters:
event - DataEvent

getMaximumPacketsInCache

public int getMaximumPacketsInCache()
Returns the maximum number of packets the cache can contain at one time. If there is no limit to the number of packets, the value is 0.

The number of rows the cache can contain at one time is the number of packets it can contain times the number of rows in a packet.

Returns:
the maximum number of packets in the cache
See Also:
setMaximumPacketsInCache(int), getPacketSize()

getMaximumRows

public int getMaximumRows()
Returns the maximum size of the result set. If there is no limit to the size of the result set, the value is 0.

This limit governs how many rows can be fetched in total over time. not how many rows the cache can contain at one time.

Returns:
the maximum size of the result set.
See Also:
setMaximumRows(int)

getPacketSize

public int getPacketSize()
Returns the number of rows that are in one packet. Whenever you execute a method that can require rows to be fetched, such as execute or nextRow, if any rows must be fetched, a whole packet of rows is fetched. A packet is also the unit in which rows are displaced from the cache when it is full and more rows must be fetched.

If the value for the packet size is less than 1, the default packet size of 1 is used.

Returns:
the number of rows in a packet.
See Also:
setPacketSize(int), getMaximumPacketsInCache()

getResult

public SelectResult getResult()
Returns the SelectResult that is associated with this SelectStatement. You can access the result set from executing the SQL statement through the SelectResult.
Returns:
the associated SelectResult

initialize

protected void initialize()
Initialize the class. Associates a new SelectResult with this SelectStatement.

isFillCacheOnExecute

public boolean isFillCacheOnExecute()
Returns true if as many rows as allowed are fetched into the cache when execute is invoked. Returns false if rows are fetched into the cache only as needed to satisfy a request to set the current row position.

The number of rows you are allowed to fetch into the cache is the smallest of: the total number of rows, the number of rows in a packet times the maximum number of packets allowed in the cache, and the maximum number of rows you are allowed to fetch over time.

If rows are fetched only as needed, one packet of rows is fetched on execute.

Returns:
true if as many rows as allowed will be fetched on execute ; else false.
See Also:
setFillCacheOnExecute(boolean), getPacketSize(), getMaximumPacketsInCache(), getMaximumRows(), CallableStatement.isFillResultCacheOnExecute()

isForceSearchedUpdate

public boolean isForceSearchedUpdate()
Returns true if searched update/delete will always be done when updateRow()/deleteRow() is invoked.
Returns:
true if searched update/delete will always be done, else false.
See Also:
setForceSearchedUpdate(boolean)

isForVAJavaSelect

protected boolean isForVAJavaSelect()
Returns true if the statement is for a VA for Java Select bean.

isLargeResultSetScrollingEnabled

public boolean isLargeResultSetScrollingEnabled()
Returns true if full scrollability of large result sets is enabled for this statement. Returns false if full scrollability of large result sets is not enabled for this statement. See the setLargeResultSetScrollingEnabled method for a fuller discussion of how this setting is used and why it is needed.
Returns:
true if full scrollability of large result sets is enabled, otherwise false.
See Also:
setLargeResultSetScrollingEnabled(boolean)

isLockRows

public boolean isLockRows()
Returns true if a database lock is automatically held on a row while it is the current row in the associated Select Result. Returns false if a database lock is only held on a row while it is being updated in the database.

See the lockRow method of SelectResult for a fuller discussion of what it means for a row to be locked.

Returns:
true if a database lock is automatically held on a row while it is the current row; else false.
See Also:
setLockRows(boolean), SelectResult.lockRow()

isOpen

public boolean isOpen()
Returns true if the statement is open in the database and can be accessed, otherwise returns false. If the statement is not open, results cannot be fetched from the the database, but you can still use the associated SelectResult to do updates. When isOpen returns false, it may be because the statement has not been executed, the close method has been invoked, you have disconnected from the database, or the SelectStatement has been serialized and then de-serialized.
Returns:
true if the statement is open in the database, otherwise false.

readObject

private void readObject(java.io.ObjectInputStream in)
                 throws java.io.IOException,
                        java.lang.ClassNotFoundException
This method was reads in the serialized object and restores the following static/transient fields: propertyChange - contains a reference to a PropertyChangeSupport instance. executing - flag indicating whether execute operation is in progress.
Overrides:
readObject in class Statement
Parameters:
in - ObjectInputStream

refresh

public void refresh()
             throws DataException
Refreshes the result set from the database by re-executing the SQL SELECT statement. The statement must currently be open. Any changes you have made to statement parameters will take effect when the statement is re-executed. If you have changed the SQL SELECT statement itself in the StatementMetaData, that change will not take effect. (To make the latter change take effect, use the execute method.

The event cacheRowsChanged of the associated SelectResult is triggered by this method.

The events aboutToExecute and executed are triggered by this method. The event propertyChange is triggered by this method for the bound properties currentRow and currentRowInCache.

Throws:
DataException - noActiveConnection - if no active connection exists
DataException - notOpen - if the statement is not open
DataException - sqlException - if an SQLException occurred
See Also:
execute()

refreshResultTable

protected void refreshResultTable()
                           throws DataException
This method was created in VisualAge.

rolledBack

public void rolledBack(DataEvent event)
Invoked when the com.ibm.db.DatabaseConnectionAfter event rolledBack fires. Takes no action.
Specified by:
rolledBack in interface DatabaseConnectionAfterListener
Parameters:
event - a DataEvent

setConnection

public void setConnection(DatabaseConnection connection)
Associates a DatabaseConnection with the Statement.
Overrides:
setConnection in class Statement
Parameters:
connection - the associated DatabaseConnection
See Also:
Statement.getConnection()

setDistinctTypesEnabled

public void setDistinctTypesEnabled(boolean aValue)
If true, enables the use of user-defined distinct types for this statement. If false, use of user-defined distinct types is not enabled for this statement.

If you never execute this method for a Statement, the value defaults to false.

When use of user-defined distinct types is not enabled for a statement, and the result set contains columns with user-defined distinct types, you cannot use a result set produced from the statement to update, delete, or lock a row. You can, however, retrieve data of user-defined types, and you can use the result set to insert rows in the database.

When use of user-defined distinct types is enabled for a statement, you can retrieve data of user defined types, as well as use the result set to insert, update, delete, or lock rows.

Implementation of this feature makes use of the CAST specification in SQL. The database you are using must support casting if you turn this enablement on. It does no harm to turn enablement on even if your statement uses no user-defined distinct types, but the SQL the bean generates to update, delete, or lock a row will be more complex, making use of the CAST specification for all columns.

Parameters:
aValue - true if use of user-defined distinct types should be enabled; false if it should not be enabled.

See Also:
areDistinctTypesEnabled()

setFillCacheOnExecute

public void setFillCacheOnExecute(boolean fillCacheOnExecute)
If true, fetches as many rows as allowed into the cache when execute is invoked. Otherwise, rows are fetched into the cache as needed to satisfy a request to set the current row position.

The number of rows you are allowed to fetch into the cache is the smallest of: the total number of rows, the number of rows in a packet times the maximum number of packets allowed in the cache, and the maximum number of rows you are allowed to fetch over time.

If rows are fetched only as needed, one packet of rows is fetched on execute.

If you never execute this method for a SelectStatement, the value defaults to true.

Parameters:
fillCacheOnExecute - true, fetch as many rows as allowed on execute ; false fetch rows only as needed
See Also:
isFillCacheOnExecute(), setPacketSize(int), setMaximumPacketsInCache(int), setMaximumRows(int)

setForceSearchedUpdate

public void setForceSearchedUpdate(boolean forceSearchedUpdate)
If true, a searched update will be done when updateRow() is invoked and a searched delete will be done when deleteRow() is invoked.

By default, searched updates and deletes are only done for Oracle, Microsoft SQL Server, Sybase SQL Server, and databases which do not support positioned updates and deletes (as reported in the JDBC DatabaseMetaData).

For other databases, positioned updates and deletes are attempted. If these are being attempted but failing, you can use this method to force searched updates and deletes, which should be universally supported. See the updateRow and deleteRow methods of SelectResult for the implications of doing positioned versus searched updates and deletes.

If you do not execute this method for a SelectStatement, the value defaults to false.

Parameters:
forceSearchedUpdate - true, always use a searched update/delete; false use a positioned update/delete if database supports it

See Also:
isForceSearchedUpdate(), SelectResult.updateRow(), SelectResult.deleteRow()

setLargeResultSetScrollingEnabled

public void setLargeResultSetScrollingEnabled(boolean enabled)
If true, enables full scrollability of large result sets for this statement. If false, full scrollability of large result sets is not enabled for this statement.

If you never execute this method for a Statement, the value defaults to false.

If you are limiting the number of rows in the cache to accommodate large result sets, you will need a scrollable result set in the underlying database in order to have full scrollability in the SelectResult. This requires a database driver at the JDBC 2.0 level.

A JDK bug has precluded doing appropriate reflection on the driver classes to determine whether the driver is at the JDBC 2.0 level. Because, the bug is severe, either crashing the java.exe process or hanging the thread, use of scrollable result sets in the database will not be attempted unless this method has been used to enable them. As long as the database driver actually is at the JDBC 2.0 level, the bug will not occur.

Parameters:
enabled - true if full scrollability of large result sets should be enabled; false if it should not be enabled.

See Also:
isLargeResultSetScrollingEnabled()

setLockRows

public void setLockRows(boolean lockRows)
If true, a database lock is automatically held on a row while it is the current row in the associated Select Result. If false, a database lock is only held on a row while it is being updated in the database.

If you never execute this method for a SelectStatement, the value defaults to false.

See the lockRow method of SelectResult for a fuller discussion of what it means for a row to be locked.

Parameters:
lockRows - true, hold database lock while a row is the current row; false hold database lock only while a row is being updated.
See Also:
isLockRows(), SelectResult.lockRow()

setMaximumPacketsInCache

public void setMaximumPacketsInCache(int maximumPacketsInCache)
Sets the maximum number of packets the cache can contain at one time. Set the value to 0 if there is no limit on the number of packets in the cache.

The number of rows the cache can contain at one time is the number of packets it can contain times the number of rows in a packet.

If you never execute this method for a SelectStatement, the value defaults to 0.

Parameters:
maximumPacketsInCache - the maximum number of packets in cache
See Also:
getMaximumPacketsInCache(), setPacketSize(int)

setMaximumRows

public void setMaximumRows(int maximumRows)
Sets the maximum size of the result set. Set the value to 0 if there is no limit on the number of rows that can be contained in the result set.

This limit governs how many rows can be fetched in total over time. not how many rows the cache can contain at one time.

If you never execute this method for a SelectStatement, the value defaults to 0.

Parameters:
maximumRows - the maximum number of rows in the result set
See Also:
getMaximumRows()

setMetaData

public void setMetaData(StatementMetaData metaData)
Associates a StatementMetaData with the Statement.
Overrides:
setMetaData in class Statement
Parameters:
metaData - the associated StatementMetaData
See Also:
Statement.getMetaData()

setPacketSize

public void setPacketSize(int packetSize)
Sets the number of rows that are in one packet. Whenever you execute a method that can require rows to be fetched, such as execute or nextRow, if any rows must be fetched, a whole packet of rows is fetched. A packet is also the unit in which rows are displaced from the cache when it is full and more rows must be fetched.

If you never execute this method for a SelectStatement, the value defaults to 1. Setting the value to less than 1 has the same effect as allowing it to default to 1.

Parameters:
packetSize - the number of rows in a packet
See Also:
getPacketSize(), setMaximumPacketsInCache(int)

validateSQL

protected void validateSQL()
                    throws DataException