Class EmbedStatement

java.lang.Object
org.apache.derby.impl.jdbc.ConnectionChild
org.apache.derby.impl.jdbc.EmbedStatement
All Implemented Interfaces:
AutoCloseable, Statement, Wrapper, EngineStatement
Direct Known Subclasses:
EmbedPreparedStatement

public class EmbedStatement extends ConnectionChild implements EngineStatement
EmbedStatement is a local JDBC statement. It supports JDBC 4.1.
  • Field Details

    • applicationConnection

      private final Connection applicationConnection
    • applicationStatement

      protected EngineStatement applicationStatement
      Statement reference the application is using to execute this Statement. Normally set to this, but if this was created by a Connection from an XAConnection then this will be a reference to the BrokeredStatement. Making it protected to allow access from EmbedPreparedStatement40 to be used for StatementEvents
    • updateCount

      long updateCount
    • results

    • autoGeneratedKeysResultSet

      private ResultSet autoGeneratedKeysResultSet
    • cursorName

      private String cursorName
    • forMetaData

      private final boolean forMetaData
    • resultSetType

      final int resultSetType
    • resultSetConcurrency

      final int resultSetConcurrency
    • resultSetHoldability

      private final int resultSetHoldability
    • lcc

    • warnings

      private SQLWarning warnings
    • SQLText

      String SQLText
    • fetchSize

      private int fetchSize
    • fetchDirection

      private int fetchDirection
    • MaxFieldSize

      int MaxFieldSize
    • timeoutMillis

      long timeoutMillis
      Query timeout in milliseconds. By default, no statements time out. Timeout is set explicitly with setQueryTimeout().
    • active

      private boolean active
    • batchStatements

      Vector<Object> batchStatements
    • maxRows

      long maxRows
    • pvs

      private ParameterValueSet pvs
    • isPoolable

      protected boolean isPoolable
    • closeOnCompletion

      private boolean closeOnCompletion
    • closingResultSets

      private boolean closingResultSets
    • dynamicResults

      private EmbedResultSet[] dynamicResults
    • currentDynamicResultSet

      private int currentDynamicResultSet
  • Constructor Details

    • EmbedStatement

      public EmbedStatement(EmbedConnection connection, boolean forMetaData, int resultSetType, int resultSetConcurrency, int resultSetHoldability)
  • Method Details

    • executeQuery

      public ResultSet executeQuery(String sql) throws SQLException
      Execute a SQL statement that returns a single ResultSet.
      Specified by:
      executeQuery in interface Statement
      Parameters:
      sql - typically this is a static SQL SELECT statement
      Returns:
      a ResultSet that contains the data produced by the query; never null
      Throws:
      SQLException - thrown on failure.
    • executeUpdate

      public int executeUpdate(String sql) throws SQLException
      Execute a SQL INSERT, UPDATE or DELETE statement. In addition, SQL statements that return nothing such as SQL DDL statements can be executed.
      Specified by:
      executeUpdate in interface Statement
      Parameters:
      sql - a SQL INSERT, UPDATE or DELETE statement or a SQL statement that returns nothing
      Returns:
      either the row count for INSERT, UPDATE or DELETE; or 0 for SQL statements that return nothing
      Throws:
      SQLException - thrown on failure.
    • executeLargeUpdate

      public long executeLargeUpdate(String sql) throws SQLException
      JDBC 4.2 Execute a SQL INSERT, UPDATE or DELETE statement. For use with statements which may touch more than Integer.MAX_VALUE rows.
      Specified by:
      executeLargeUpdate in interface EngineStatement
      Specified by:
      executeLargeUpdate in interface Statement
      Throws:
      SQLException
    • executeUpdate

      public int executeUpdate(String sql, int autoGeneratedKeys) throws SQLException
      JDBC 3.0 Execute the given SQL statement and signals the driver with the given flag about whether the auto-generated keys produced by this Statement object should be made available for retrieval.
      Specified by:
      executeUpdate in interface Statement
      Parameters:
      sql - a SQL INSERT, UPDATE or DELETE statement or a SQL statement that returns nothing
      autoGeneratedKeys - - a flag indicating whether auto-generated keys should be made available for retrieval; one of the following constants: Statement.RETURN_GENERATED_KEYS Statement.NO_GENERATED_KEYS
      Returns:
      either the row count for INSERT, UPDATE or DELETE; or 0 for SQL statements that return nothing
      Throws:
      SQLException - if a database access error occurs
    • executeLargeUpdate

      public long executeLargeUpdate(String sql, int autoGeneratedKeys) throws SQLException
      JDBC 4.2 Execute the given SQL statement and signals the driver with the given flag about whether the auto-generated keys produced by this Statement object should be made available for retrieval. For use with statements which may touch more than Integer.MAX_VALUE rows.
      Specified by:
      executeLargeUpdate in interface EngineStatement
      Specified by:
      executeLargeUpdate in interface Statement
      Throws:
      SQLException
    • executeUpdate

      public int executeUpdate(String sql, int[] columnIndexes) throws SQLException
      JDBC 3.0 Executes the given SQL statement and signals the driver that the auto-generated keys indicated in the given array should be made available for retrieval. The driver will ignore the array if the SQL statement is not an INSERT statement
      Specified by:
      executeUpdate in interface Statement
      Parameters:
      sql - a SQL INSERT, UPDATE or DELETE statement or a SQL statement that returns nothing
      columnIndexes - - an array of column indexes indicating the columns that should be returned from the inserted row
      Returns:
      either the row count for INSERT, UPDATE or DELETE; or 0 for SQL statements that return nothing
      Throws:
      SQLException - if a database access error occurs
    • executeLargeUpdate

      public long executeLargeUpdate(String sql, int[] columnIndexes) throws SQLException
      JDBC 4.2 Executes the given SQL statement and signals the driver that the auto-generated keys indicated in the given array should be made available for retrieval. The driver will ignore the array if the SQL statement is not an INSERT/UPDATE statement. For use with statements which may touch more than Integer.MAX_VALUE rows.
      Specified by:
      executeLargeUpdate in interface EngineStatement
      Specified by:
      executeLargeUpdate in interface Statement
      Throws:
      SQLException
    • executeUpdate

      public int executeUpdate(String sql, String[] columnNames) throws SQLException
      JDBC 3.0 Executes the given SQL statement and signals the driver that the auto-generated keys indicated in the given array should be made available for retrieval. The driver will ignore the array if the SQL statement is not an INSERT statement
      Specified by:
      executeUpdate in interface Statement
      Parameters:
      sql - a SQL INSERT, UPDATE or DELETE statement or a SQL statement that returns nothing
      columnNames - - an array of the names of the columns that should be returned from the inserted row
      Returns:
      either the row count for INSERT, UPDATE or DELETE; or 0 for SQL statements that return nothing
      Throws:
      SQLException - if a database access error occurs
    • executeLargeUpdate

      public long executeLargeUpdate(String sql, String[] columnNames) throws SQLException
      JDBC 4.2 Executes the given SQL statement and signals the driver that the auto-generated keys indicated in the given array should be made available for retrieval. The driver will ignore the array if the SQL statement is not an INSERT/UPDATE statement. For use with statements which may touch more than Integer.MAX_VALUE rows.
      Specified by:
      executeLargeUpdate in interface EngineStatement
      Specified by:
      executeLargeUpdate in interface Statement
      Throws:
      SQLException
    • checkIfInMiddleOfBatch

      final void checkIfInMiddleOfBatch() throws SQLException
      Throws:
      SQLException
    • isClosed

      public boolean isClosed() throws SQLException
      Tell whether this statment has been closed or not.
      Specified by:
      isClosed in interface Statement
      Returns:
      true is closed, false otherwise.
      Throws:
      SQLException - if a database access error occurs.
    • close

      public final void close() throws SQLException
      In many cases, it is desirable to immediately release a Statements's database and JDBC resources instead of waiting for this to happen when it is automatically closed; the close method provides this immediate release.

      Note: A Statement is automatically closed when it is garbage collected. When a Statement is closed its current ResultSet, if one exists, is also closed.

      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Statement
      Throws:
      SQLException - thrown on failure.
    • finalize

      protected void finalize() throws Throwable
      Mark the statement and its single-use activation as unused. This method should be called from EmbedPreparedStatement's finalizer as well, even though prepared statements reuse activations, since getGeneratedKeys() uses a single-use activation regardless of statement type.
      Dynamic result sets (those in dynamicResults array) need not be handled here as they will be handled by the statement object that created them. In some cases results will point to a ResultSet in dynamicResults but all that will happen is that the activation will get marked as unused twice.
      Overrides:
      finalize in class Object
      Throws:
      Throwable
    • closeActions

      void closeActions() throws SQLException
      Throws:
      SQLException
    • getMaxFieldSize

      public int getMaxFieldSize() throws SQLException
      The maxFieldSize limit (in bytes) is the maximum amount of data returned for any column value; it only applies to BINARY, VARBINARY, LONGVARBINARY, CHAR, VARCHAR, and LONGVARCHAR columns. If the limit is exceeded, the excess data is silently discarded.
      Specified by:
      getMaxFieldSize in interface Statement
      Returns:
      the current max column size limit; zero means unlimited
      Throws:
      SQLException - thrown on failure.
    • setMaxFieldSize

      public void setMaxFieldSize(int max) throws SQLException
      The maxFieldSize limit (in bytes) is set to limit the size of data that can be returned for any column value; it only applies to BINARY, VARBINARY, LONGVARBINARY, CHAR, VARCHAR, and LONGVARCHAR fields. If the limit is exceeded, the excess data is silently discarded.
      Specified by:
      setMaxFieldSize in interface Statement
      Parameters:
      max - the new max column size limit; zero means unlimited
      Throws:
      SQLException - thrown on failure.
    • getMaxRows

      public int getMaxRows() throws SQLException
      The maxRows limit is the maximum number of rows that a ResultSet can contain. If the limit is exceeded, the excess rows are silently dropped.
      Specified by:
      getMaxRows in interface Statement
      Returns:
      the current max row limit; zero means unlimited
      Throws:
      SQLException - thrown on failure.
    • getLargeMaxRows

      public long getLargeMaxRows() throws SQLException
      JDBC 4.2 The maxRows limit is the maximum number of rows that a ResultSet can contain. If the limit is exceeded, the excess rows are silently dropped. For use with statements which may touch more than Integer.MAX_VALUE rows.
      Specified by:
      getLargeMaxRows in interface EngineStatement
      Specified by:
      getLargeMaxRows in interface Statement
      Returns:
      the current max row limit; zero means unlimited
      Throws:
      SQLException - thrown on failure.
    • setMaxRows

      public void setMaxRows(int max) throws SQLException
      The maxRows limit is set to limit the number of rows that any ResultSet can contain. If the limit is exceeded, the excess rows are silently dropped.
      Specified by:
      setMaxRows in interface Statement
      Parameters:
      max - the new max rows limit; zero means unlimited
      Throws:
      SQLException - thrown on failure.
    • setLargeMaxRows

      public void setLargeMaxRows(long max) throws SQLException
      The maxRows limit is set to limit the number of rows that any ResultSet can contain. If the limit is exceeded, the excess rows are silently dropped.
      Specified by:
      setLargeMaxRows in interface EngineStatement
      Specified by:
      setLargeMaxRows in interface Statement
      Parameters:
      max - the new max rows limit; zero means unlimited
      Throws:
      SQLException - thrown on failure.
    • setEscapeProcessing

      public void setEscapeProcessing(boolean enable) throws SQLException
      If escape scanning is on (the default) the driver will do escape substitution before sending the SQL to the database.
      Specified by:
      setEscapeProcessing in interface Statement
      Parameters:
      enable - true to enable; false to disable
      Throws:
      SQLException - thrown on failure.
    • getQueryTimeout

      public final int getQueryTimeout() throws SQLException
      The queryTimeout limit is the number of seconds the driver will wait for a Statement to execute. If the limit is exceeded a SQLException is thrown.
      Specified by:
      getQueryTimeout in interface Statement
      Returns:
      the current query timeout limit in seconds; zero means unlimited
      Throws:
      SQLException - thrown on failure.
    • setQueryTimeout

      public final void setQueryTimeout(int seconds) throws SQLException
      The queryTimeout limit is the number of seconds the driver will wait for a Statement to execute. If the limit is exceeded a SQLException is thrown.
      Specified by:
      setQueryTimeout in interface Statement
      Parameters:
      seconds - the new query timeout limit in seconds; zero means unlimited
      Throws:
      SQLException - thrown on failure.
    • cancel

      public void cancel() throws SQLException
      Cancel can be used by one thread to cancel a statement that is being executed by another thread.
      Specified by:
      cancel in interface Statement
      Throws:
      SQLException - thrown on failure.
    • getWarnings

      public SQLWarning getWarnings() throws SQLException
      The first warning reported by calls on this Statement is returned. A Statment's execute methods clear its SQLWarning chain. Subsequent Statement warnings will be chained to this SQLWarning.

      The warning chain is automatically cleared each time a statement is (re)executed.

      Note: If you are processing a ResultSet then any warnings associated with ResultSet reads will be chained on the ResultSet object.

      Specified by:
      getWarnings in interface Statement
      Returns:
      the first SQLWarning or null
      Throws:
      SQLException - thrown on failure.
    • clearWarnings

      public void clearWarnings() throws SQLException
      After this call getWarnings returns null until a new warning is reported for this Statement.
      Specified by:
      clearWarnings in interface Statement
      Throws:
      SQLException - thrown on failure.
    • setCursorName

      public void setCursorName(String name) throws SQLException
      setCursorName defines the SQL cursor name that will be used by subsequent Statement execute methods. This name can then be used in SQL positioned update/delete statements to identify the current row in the ResultSet generated by this statement. If the database doesn't support positioned update/delete, this method is a noop.

      Note: By definition, positioned update/delete execution must be done by a different Statement than the one which generated the ResultSet being used for positioning. Also, cursor names must be unique within a Connection.

      Specified by:
      setCursorName in interface Statement
      Parameters:
      name - the new cursor name.
      Throws:
      SQLException
    • execute

      public boolean execute(String sql) throws SQLException
      Execute a SQL statement that may return multiple results. Under some (uncommon) situations a single SQL statement may return multiple result sets and/or update counts. Normally you can ignore this, unless you're executing a stored procedure that you know may return multiple results, or unless you're dynamically executing an unknown SQL string. The "execute", "getMoreResults", "getResultSet" and "getUpdateCount" methods let you navigate through multiple results. The "execute" method executes a SQL statement and indicates the form of the first result. You can then use getResultSet or getUpdateCount to retrieve the result, and getMoreResults to move to any subsequent result(s).
      Specified by:
      execute in interface Statement
      Parameters:
      sql - any SQL statement
      Returns:
      true if the first result is a ResultSet; false if it is an integer
      Throws:
      SQLException - thrown on failure
      See Also:
    • execute

      private boolean execute(String sql, boolean executeQuery, boolean executeUpdate, int autoGeneratedKeys, int[] columnIndexes, String[] columnNames) throws SQLException
      Execute a SQL statement that may return multiple results. Under some (uncommon) situations a single SQL statement may return multiple result sets and/or update counts. Normally you can ignore this, unless you're executing a stored procedure that you know may return multiple results, or unless you're dynamically executing an unknown SQL string. The "execute", "getMoreResults", "getResultSet" and "getUpdateCount" methods let you navigate through multiple results. The "execute" method executes a SQL statement and indicates the form of the first result. You can then use getResultSet or getUpdateCount to retrieve the result, and getMoreResults to move to any subsequent result(s).
      Parameters:
      sql - any SQL statement
      executeQuery - caller is executeQuery()
      executeUpdate - caller is executeUpdate()
      autoGeneratedKeys -
      columnIndexes -
      columnNames -
      Returns:
      true if the first result is a ResultSet; false if it is an integer
      Throws:
      SQLException - thrown on failure
      See Also:
    • execute

      public boolean execute(String sql, int autoGeneratedKeys) throws SQLException
      JDBC 3.0 Executes the given SQL statement, which may return multiple results, and signals the driver that any auto-generated keys should be made available for retrieval. The driver will ignore this signal if the SQL statement is not an INSERT/UPDATE statement.
      Specified by:
      execute in interface Statement
      Parameters:
      sql - any SQL statement
      autoGeneratedKeys - - a constant indicating whether auto-generated keys should be made available for retrieval using the method getGeneratedKeys; one of the following constants: Statement.RETURN_GENERATED_KEYS or Statement.NO_GENERATED_KEYS
      Returns:
      rue 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, int[] columnIndexes) throws SQLException
      JDBC 3.0 Executes the given SQL statement, which may return multiple results, and signals the driver that the auto-generated keys indicated in the given array should be made available for retrieval. This array contains the indexes of the columns in the target table that contain the auto-generated keys that should be made available. The driver will ignore the array if the given SQL statement is not an INSERT/UPDATE statement.
      Specified by:
      execute in interface Statement
      Parameters:
      sql - any SQL statement
      columnIndexes - - an array of the indexes of the columns in the inserted/updated row that should be made available for retrieval by a call to the method getGeneratedKeys
      Returns:
      rue 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, String[] columnNames) throws SQLException
      JDBC 3.0 Executes the given SQL statement, which may return multiple results, and signals the driver that the auto-generated keys indicated in the given array should be made available for retrieval. This array contains the names of the columns in the target table that contain the auto-generated keys that should be made available. The driver will ignore the array if the given SQL statement is not an INSERT/UPDATE statement.
      Specified by:
      execute in interface Statement
      Parameters:
      sql - any SQL statement
      columnNames - - an array of the names of the columns in the inserted/updated row that should be made available for retrieval by a call to the method getGeneratedKeys
      Returns:
      rue 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
    • getResultSet

      public final ResultSet getResultSet() throws SQLException
      getResultSet returns the current result as a ResultSet. It should only be called once per result.
      Specified by:
      getResultSet in interface Statement
      Returns:
      the current result as a ResultSet; null if the result is an update count or there are no more results or the statement was closed.
      Throws:
      SQLException
      See Also:
    • getUpdateCount

      public final int getUpdateCount() throws SQLException
      getUpdateCount returns the current result as an update count; if the result is a ResultSet or there are no more results -1 is returned. It should only be called once per result.

      The only way to tell for sure that the result is an update count is to first test to see if it is a ResultSet. If it is not a ResultSet it is either an update count or there are no more results.

      Specified by:
      getUpdateCount in interface Statement
      Returns:
      the current result as an update count; -1 if it is a ResultSet or there are no more results
      Throws:
      SQLException
      See Also:
    • getLargeUpdateCount

      public final long getLargeUpdateCount() throws SQLException
      JDBC 4.2 getLargeUpdateCount returns the current result as an update count; if the result is a ResultSet or there are no more results -1 is returned. It should only be called once per result. For use with statements which may touch more than Integer.MAX_VALUE rows.
      Specified by:
      getLargeUpdateCount in interface EngineStatement
      Specified by:
      getLargeUpdateCount in interface Statement
      Throws:
      SQLException
    • getMoreResults

      public final boolean getMoreResults() throws SQLException
      getMoreResults moves to a Statement's next result. It returns true if this result is a ResultSet. getMoreResults also implicitly closes any current ResultSet obtained with getResultSet. There are no more results when (!getMoreResults() && (getUpdateCount() == -1)
      Specified by:
      getMoreResults in interface Statement
      Returns:
      true if the next result is a ResultSet; false if it is an update count or there are no more results
      Throws:
      SQLException - thrown on failure.
      See Also:
    • getResultSetType

      public final int getResultSetType() throws SQLException
      JDBC 2.0 Determine the result set type.
      Specified by:
      getResultSetType in interface Statement
      Throws:
      SQLException - Feature not implemented for now.
    • setFetchDirection

      public void setFetchDirection(int direction) throws SQLException
      JDBC 2.0 Give a hint as to the direction in which the rows in a result set will be processed. The hint applies only to result sets created using this Statement object. The default value is ResultSet.FETCH_FORWARD.
      Specified by:
      setFetchDirection in interface Statement
      Parameters:
      direction - the initial direction for processing rows
      Throws:
      SQLException - if a database-access error occurs or direction is not one of ResultSet.FETCH_FORWARD, ResultSet.FETCH_REVERSE, or ResultSet.FETCH_UNKNOWN
    • getFetchDirection

      public int getFetchDirection() throws SQLException
      JDBC 2.0 Determine the fetch direction.
      Specified by:
      getFetchDirection in interface Statement
      Returns:
      the default fetch direction
      Throws:
      SQLException - if a database-access error occurs
    • setFetchSize

      public void setFetchSize(int rows) throws SQLException
      JDBC 2.0 Give the JDBC driver a hint as to the number of rows that should be fetched from the database when more rows are needed. The number of rows specified only affects result sets created using this statement. If the value specified is zero, then the hint is ignored. The default value is zero.
      Specified by:
      setFetchSize in interface Statement
      Parameters:
      rows - the number of rows to fetch
      Throws:
      SQLException - if a database-access error occurs, or the condition 0 <= rows <= this.getMaxRows() is not satisfied.
    • getFetchSize

      public int getFetchSize() throws SQLException
      JDBC 2.0 Determine the default fetch size.
      Specified by:
      getFetchSize in interface Statement
      Throws:
      SQLException - if a database-access error occurs
    • getResultSetConcurrency

      public int getResultSetConcurrency() throws SQLException
      JDBC 2.0 Determine the result set concurrency.
      Specified by:
      getResultSetConcurrency in interface Statement
      Throws:
      SQLException - Feature not implemented for now.
    • getResultSetHoldability

      public final int getResultSetHoldability() throws SQLException
      JDBC 3.0 Retrieves the result set holdability for ResultSet objects generated by this Statement object.
      Specified by:
      getResultSetHoldability in interface Statement
      Returns:
      either ResultSet.HOLD_CURSORS_OVER_COMMIT or ResultSet.CLOSE_CURSORS_AT_COMMIT
      Throws:
      SQLException - Feature not implemented for now.
    • addBatch

      public void addBatch(String sql) throws SQLException
      JDBC 2.0 Adds a SQL command to the current batch of commmands for the statement. This method is optional.
      Specified by:
      addBatch in interface Statement
      Parameters:
      sql - typically this is a static SQL INSERT or UPDATE statement
      Throws:
      SQLException - if a database-access error occurs, or the driver does not support batch statements
    • clearBatch

      public final void clearBatch() throws SQLException
      JDBC 2.0 Make the set of commands in the current batch empty. This method is optional.
      Specified by:
      clearBatch in interface Statement
      Throws:
      SQLException - if a database-access error occurs, or the driver does not support batch statements
    • executeBatch

      public int[] executeBatch() throws SQLException
      JDBC 2.0 Submit a batch of commands to the database for execution. This method is optional. Moving jdbc2.0 batch related code in this class because callableStatement in jdbc 20 needs this code too and it doesn't derive from prepared statement in jdbc 20 in our implementation. BatchUpdateException is the only new class from jdbc 20 which is being referenced here and in order to avoid any jdk11x problems, using reflection code to make an instance of that class.
      Specified by:
      executeBatch in interface Statement
      Returns:
      an array of update counts containing one element for each command in the batch. The array is ordered according to the order in which commands were inserted into the batch
      Throws:
      SQLException - if a database-access error occurs, or the driver does not support batch statements
    • executeLargeBatch

      public long[] executeLargeBatch() throws SQLException
      JDBC 4.2 Submit a batch of commands to the database for execution. This method is optional. For use with statements which may touch more than Integer.MAX_VALUE rows.
      Specified by:
      executeLargeBatch in interface EngineStatement
      Specified by:
      executeLargeBatch in interface Statement
      Throws:
      SQLException
    • executeBatchElement

      boolean executeBatchElement(Object batchElement) throws SQLException, StandardException
      Execute a single element of the batch. Overridden by EmbedPreparedStatement
      Throws:
      SQLException
      StandardException
    • getConnection

      public final Connection getConnection() throws SQLException
      JDBC 2.0 Return the Connection that produced the Statement.
      Specified by:
      getConnection in interface Statement
      Throws:
      SQLException - Exception if it cannot find the connection associated to this statement.
    • getMoreResults

      public final boolean getMoreResults(int current) throws SQLException
      JDBC 3.0 Moves to this Statement obect's next result, deals with any current ResultSet object(s) according to the instructions specified by the given flag, and returns true if the next result is a ResultSet object
      Specified by:
      getMoreResults in interface Statement
      Parameters:
      current - - one of the following Statement constants indicating what should happen to current ResultSet objects obtained using the method getResultSetCLOSE_CURRENT_RESULT, KEEP_CURRENT_RESULT, or CLOSE_ALL_RESULTS
      Returns:
      true if the next result is a ResultSet; false if it is an update count or there are no more results
      Throws:
      SQLException - thrown on failure.
      See Also:
    • getGeneratedKeys

      public final ResultSet getGeneratedKeys() throws SQLException
      JDBC 3.0 Retrieves any auto-generated keys created as a result of executing this Statement object. If this Statement is a non-insert statement, a null ResultSet object is returned.
      Specified by:
      getGeneratedKeys in interface Statement
      Returns:
      a ResultSet object containing the auto-generated key(s) generated by the execution of this Statement object
      Throws:
      SQLException - if a database access error occurs
    • executeStatement

      boolean executeStatement(Activation a, boolean executeQuery, boolean executeUpdate) throws SQLException
      Execute the current statement.
      Throws:
      SQLException - thrown on failure.
    • addWarning

      final void addWarning(SQLWarning sw)
      Add a SQLWarning to this Statement object. If the Statement already has a SQLWarning then it is added to the end of the chain.
      See Also:
    • getSQLText

      public String getSQLText()
    • getParameterValueSet

      public ParameterValueSet getParameterValueSet()
    • checkStatus

      final void checkStatus() throws SQLException
      Throw an exception if this Statement has been closed explictly or it has noticed it has been closed implicitly. JDBC specifications require nearly all methods throw a SQLException if the Statement has been closed, thus most methods call this method or checkExecStatus first.
      Throws:
      SQLException - Thrown if the statement is marked as closed.
      See Also:
    • checkExecStatus

      final void checkExecStatus() throws SQLException
      A heavier weight version of checkStatus() that ensures the application's Connection object is still open. This is to stop errors or unexpected behaviour when a [Prepared]Statement object is used after the application has been closed. In particular to ensure that a Statement obtained from a PooledConnection cannot be used after the application has closed its connection (as the underlying Connection is still active). To avoid this heavier weight check on every method of [Prepared]Statement it is only used on those methods that would end up using the database's connection to read or modify data. E.g. execute*(), but not setXXX, etc.
      If this Statement's Connection is closed an exception will be thrown and the active field will be set to false, completely marking the Statement as closed.
      If the Statement is not currently connected to an active transaction, i.e. a suspended global transaction, then this method will throw a SQLException but the Statement will remain open. The Statement is open but unable to process any new requests until its global transaction is resumed.
      Upon return from the method, with or without a SQLException the field active will correctly represent the open state of the Statement.
      Throws:
      SQLException - Thrown if the statement is marked as closed or the Statement's transaction is suspended.
      See Also:
    • clearResultSets

      void clearResultSets() throws SQLException
      Close and clear all result sets associated with this statement from the last execution.
      Throws:
      SQLException
    • clearResultSetsMinion

      private void clearResultSetsMinion() throws SQLException
      Throws:
      SQLException
    • checkRequiresCallableStatement

      void checkRequiresCallableStatement(Activation activation) throws SQLException
      Check to see if a statement requires to be executed via a callable statement.
      Throws:
      SQLException
    • transferBatch

      public void transferBatch(EmbedStatement other) throws SQLException
      Transfer my batch of Statements to a newly created Statement.
      Throws:
      SQLException
    • setApplicationStatement

      public final void setApplicationStatement(EngineStatement s)
      Set the application statement for this Statement.
    • processDynamicResults

      private int processDynamicResults(ResultSet[][] holder, int maxDynamicResultSets) throws SQLException
      Go through a holder of dynamic result sets, remove those that should not be returned, and sort the result sets according to their creation.
      Parameters:
      holder - a holder of dynamic result sets
      maxDynamicResultSets - the maximum number of result sets to be returned
      Returns:
      the actual number of result sets
      Throws:
      SQLException - if an error occurs
    • processDynamicResult

      static EmbedResultSet processDynamicResult(EmbedConnection conn, ResultSet resultSet, EmbedStatement callStatement)
      Process a ResultSet created in a Java procedure as a dynamic result. To be a valid dynamic result the ResultSet must be:
      • From a Derby system
      • From a nested connection of connection passed in or from the connection itself.
      • Open
      Any invalid ResultSet is ignored.
      Parameters:
      conn - Connection ResultSet needs to belong to
      resultSet - ResultSet to be tested
      callStatement - Statement that executed the CALL, null if
      Returns:
      The result set cast down to EmbedResultSet, null if not a valid dynamic result.
    • resultSetClosing

      void resultSetClosing(EmbedResultSet closingLRS) throws SQLException
      Callback on the statement when one of its result sets is closed. This allows the statement to control when it completes and hence when it commits in auto commit mode. Must have connection synchronization and setupContextStack(), this is required for the call to commitIfNeeded().
      Throws:
      SQLException
    • getExecuteHoldable

      private boolean getExecuteHoldable() throws SQLException
      Get the execute time holdability for the Statement. When in a global transaction holdabilty defaults to false.
      Throws:
      SQLException - Error from getResultSetHoldability.
    • isPoolable

      public boolean isPoolable() throws SQLException
      Returns the value of the EmbedStatement's poolable hint, indicating whether pooling is requested.
      Specified by:
      isPoolable in interface Statement
      Returns:
      The value of the poolable hint.
      Throws:
      SQLException - if the Statement has been closed.
    • setPoolable

      public void setPoolable(boolean poolable) throws SQLException
      Requests that an EmbedStatement be pooled or not.
      Specified by:
      setPoolable in interface Statement
      Parameters:
      poolable - requests that the EmbedStatement be pooled if true and not be pooled if false.
      Throws:
      SQLException - if the EmbedStatement has been closed.
    • isWrapperFor

      public final boolean isWrapperFor(Class<?> interfaces) throws SQLException
      Returns false unless interfaces is implemented.
      Specified by:
      isWrapperFor in interface Wrapper
      Parameters:
      interfaces - a Class defining an interface.
      Returns:
      true if this implements the interface or directly or indirectly wraps an object that does.
      Throws:
      SQLException - if an error occurs while determining whether this is a wrapper for an object with the given interface.
    • unwrap

      public final <T> T unwrap(Class<T> interfaces) throws SQLException
      Returns this if this class implements the interface.
      Specified by:
      unwrap in interface Wrapper
      Parameters:
      interfaces - a Class defining an interface
      Returns:
      an object that implements the interface
      Throws:
      SQLException - if no object if found that implements the interface
    • closeOnCompletion

      public void closeOnCompletion() throws SQLException
      Specified by:
      closeOnCompletion in interface EngineStatement
      Specified by:
      closeOnCompletion in interface Statement
      Throws:
      SQLException
    • isCloseOnCompletion

      public boolean isCloseOnCompletion() throws SQLException
      Specified by:
      isCloseOnCompletion in interface EngineStatement
      Specified by:
      isCloseOnCompletion in interface Statement
      Throws:
      SQLException
    • closeMeOnCompletion

      void closeMeOnCompletion()
    • isOpen

      private boolean isOpen(EmbedResultSet rs) throws SQLException
      Throws:
      SQLException