Class FBStatement

    • Field Detail

      • gdsHelper

        protected final GDSHelper gdsHelper
      • completed

        protected boolean completed
      • firstWarning

        protected java.sql.SQLWarning firstWarning
      • isSingletonResult

        protected boolean isSingletonResult
      • specialResult

        protected final java.util.List<RowValue> specialResult
      • maxRows

        protected int maxRows
      • fetchSize

        protected int fetchSize
    • Constructor Detail

      • FBStatement

        protected FBStatement​(GDSHelper c,
                              int rsType,
                              int rsConcurrency,
                              int rsHoldability,
                              FBObjectListener.StatementListener statementListener)
                       throws java.sql.SQLException
        Throws:
        java.sql.SQLException
    • Method Detail

      • isValid

        public boolean isValid()
        Description copied from interface: FirebirdStatement
        Check if this statement is valid.
        Specified by:
        isValid in interface FirebirdStatement
        Returns:
        true if statement is valid and can be used to execute SQL.
      • completeStatement

        public void completeStatement()
                               throws java.sql.SQLException
        Throws:
        java.sql.SQLException
      • completeStatement

        public void completeStatement​(CompletionReason reason)
                               throws java.sql.SQLException
        Throws:
        java.sql.SQLException
      • executeQuery

        public java.sql.ResultSet executeQuery​(java.lang.String sql)
                                        throws java.sql.SQLException
        Specified by:
        executeQuery in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • notifyStatementStarted

        protected void notifyStatementStarted()
                                       throws java.sql.SQLException
        Throws:
        java.sql.SQLException
      • notifyStatementStarted

        protected void notifyStatementStarted​(boolean closeResultSet)
                                       throws java.sql.SQLException
        Throws:
        java.sql.SQLException
      • notifyStatementCompleted

        protected void notifyStatementCompleted()
                                         throws java.sql.SQLException
        Throws:
        java.sql.SQLException
      • notifyStatementCompleted

        protected void notifyStatementCompleted​(boolean success)
                                         throws java.sql.SQLException
        Throws:
        java.sql.SQLException
      • executeUpdate

        public int executeUpdate​(java.lang.String sql)
                          throws java.sql.SQLException
        Specified by:
        executeUpdate in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • executeUpdate

        public int executeUpdate​(java.lang.String sql,
                                 int autoGeneratedKeys)
                          throws java.sql.SQLException
        Specified by:
        executeUpdate in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • executeUpdate

        public int executeUpdate​(java.lang.String sql,
                                 int[] columnIndexes)
                          throws java.sql.SQLException
        Specified by:
        executeUpdate in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • executeUpdate

        public int executeUpdate​(java.lang.String sql,
                                 java.lang.String[] columnNames)
                          throws java.sql.SQLException
        Specified by:
        executeUpdate in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • execute

        public boolean execute​(java.lang.String sql,
                               int autoGeneratedKeys)
                        throws java.sql.SQLException
        Specified by:
        execute in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • execute

        public boolean execute​(java.lang.String sql,
                               int[] columnIndexes)
                        throws java.sql.SQLException
        Specified by:
        execute in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • execute

        public boolean execute​(java.lang.String sql,
                               java.lang.String[] columnNames)
                        throws java.sql.SQLException
        Specified by:
        execute in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • getGeneratedKeys

        public java.sql.ResultSet getGeneratedKeys()
                                            throws java.sql.SQLException
        Specified by:
        getGeneratedKeys in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • close

        public void close()
                   throws java.sql.SQLException
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • isClosed

        public boolean isClosed()
        Specified by:
        isClosed in interface java.sql.Statement
      • getMaxFieldSize

        public int getMaxFieldSize()
                            throws java.sql.SQLException
        Specified by:
        getMaxFieldSize in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • setMaxFieldSize

        public void setMaxFieldSize​(int max)
                             throws java.sql.SQLException
        Specified by:
        setMaxFieldSize in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • getMaxRows

        public int getMaxRows()
                       throws java.sql.SQLException
        Specified by:
        getMaxRows in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • setMaxRows

        public void setMaxRows​(int max)
                        throws java.sql.SQLException
        Specified by:
        setMaxRows in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • setEscapeProcessing

        public void setEscapeProcessing​(boolean enable)
                                 throws java.sql.SQLException
        Specified by:
        setEscapeProcessing in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • getQueryTimeout

        public int getQueryTimeout()
                            throws java.sql.SQLException

        Firebird 4 and higher also support attachment level and global statement timeouts. This method only reports the value explicitly configured for this statement. In practice, a more stringent timeout might be applied by this attachment level or global statement timeout.

        Specified by:
        getQueryTimeout in interface java.sql.Statement
        Throws:
        java.sql.SQLException
        See Also:
        setQueryTimeout(int)
      • setQueryTimeout

        public void setQueryTimeout​(int seconds)
                             throws java.sql.SQLException

        Query timeout is only supported on Firebird 4 and higher, and only for the pure-java wire protocol implementation. For earlier versions or native/embedded connections, the timeout is ignored. The maximum timeout for Firebird 4 is 4294967 seconds, higher values will be handled as if 0 was set. Firebird 4 also has attachment level and global statement timeouts. This configuration governs the statement level statement timeout only. In practice, a more stringent timeout might be applied by this attachment level or global statement timeout.

        Important: Query timeouts in Firebird 4 and higher have an important caveat: for result set producing statements, the timeout covers the time from execution start until the cursor is closed. This includes the time that Firebird waits for your application to fetch more rows. This means that if you execute a SELECT and take your time processing the results, the statement may be cancelled even when Firebird itself returns rows quickly.

        A query timeout is not applied for execution of DDL.

        Specified by:
        setQueryTimeout in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • cancel

        public void cancel()
                    throws java.sql.SQLException
        Specified by:
        cancel in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • getWarnings

        public java.sql.SQLWarning getWarnings()
                                        throws java.sql.SQLException
        Specified by:
        getWarnings in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • clearWarnings

        public void clearWarnings()
                           throws java.sql.SQLException
        Specified by:
        clearWarnings in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • setCursorName

        public void setCursorName​(java.lang.String name)
                           throws java.sql.SQLException
        Specified by:
        setCursorName in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • execute

        public boolean execute​(java.lang.String sql)
                        throws java.sql.SQLException
        Specified by:
        execute in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • executeImpl

        protected boolean executeImpl​(java.lang.String sql)
                               throws java.sql.SQLException
        Internal implementation of execute(String), so it can be used for normal queries and for queries returning generated keys.
        Throws:
        java.sql.SQLException
        See Also:
        execute(String)
      • getResultSet

        public java.sql.ResultSet getResultSet()
                                        throws java.sql.SQLException
        Specified by:
        getResultSet in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • getResultSet

        public java.sql.ResultSet getResultSet​(boolean metaDataQuery)
                                        throws java.sql.SQLException
        Throws:
        java.sql.SQLException
      • createSpecialResultSet

        protected FBResultSet createSpecialResultSet​(FBObjectListener.ResultSetListener resultSetListener)
                                              throws java.sql.SQLException
        Create the result set for specialResult.

        Should only be called from getResultSet(boolean). This exists because FBCallableStatement needs to create the result set in a slightly different way to account for the fact that the blobs were already cached earlier.

        Parameters:
        resultSetListener - result set listener (can be null)
        Returns:
        result set wrapping specialResult
        Throws:
        java.sql.SQLException
      • hasOpenResultSet

        public boolean hasOpenResultSet()
        Description copied from interface: FirebirdStatement
        Check if this statement has open result set. Note, this method works correctly if auto-commit is disabled. In auto-commit mode it will always return false because from the statement's point of view result set is not open (in auto-commit mode complete result set is fetched and cached in wrapping object before returning from the Statement.getResultSet() method).
        Specified by:
        hasOpenResultSet in interface FirebirdStatement
        Returns:
        true if there's already open result set associated with this statement, otherwise false.
      • getUpdateCountMinZero

        protected final int getUpdateCountMinZero()
                                           throws java.sql.SQLException
        Equivalent of getUpdateCount(), with a minimum value of zero.

        For use in executeUpdate methods as the API mandates 0 instead of -1 for no results, and in (emulated) executeBatch methods for consistency with server-side batch execution.

        Throws:
        java.sql.SQLException
        See Also:
        getLargeUpdateCountMinZero()
      • getUpdateCount

        public int getUpdateCount()
                           throws java.sql.SQLException
        Specified by:
        getUpdateCount in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • getDeletedRowsCount

        public int getDeletedRowsCount()
                                throws java.sql.SQLException
        Description copied from interface: FirebirdStatement
        Get number of deleted rows. You can call this method multiple times, it does not affect the JDBC result number.
        Specified by:
        getDeletedRowsCount in interface FirebirdStatement
        Returns:
        number of deleted rows or -1 if current result is result set.
        Throws:
        java.sql.SQLException - if database error occurs.
      • getInsertedRowsCount

        public int getInsertedRowsCount()
                                 throws java.sql.SQLException
        Description copied from interface: FirebirdStatement
        Get number of inserted rows. You can call this method multiple times, it does not affect the JDBC result number.
        Specified by:
        getInsertedRowsCount in interface FirebirdStatement
        Returns:
        number of inserted rows or -1 if current result is result set.
        Throws:
        java.sql.SQLException - if database error occurs.
      • getUpdatedRowsCount

        public int getUpdatedRowsCount()
                                throws java.sql.SQLException
        Description copied from interface: FirebirdStatement
        Get number of updated rows. You can call this method multiple times, it does not affect the JDBC result number.
        Specified by:
        getUpdatedRowsCount in interface FirebirdStatement
        Returns:
        number of updated rows or -1 if current result is result set.
        Throws:
        java.sql.SQLException - if database error occurs.
      • getMoreResults

        public boolean getMoreResults()
                               throws java.sql.SQLException
        Specified by:
        getMoreResults in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • getMoreResults

        public boolean getMoreResults​(int mode)
                               throws java.sql.SQLException
        Specified by:
        getMoreResults in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • setFetchDirection

        public void setFetchDirection​(int direction)
                               throws java.sql.SQLException
        Specified by:
        setFetchDirection in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • getFetchDirection

        public int getFetchDirection()
                              throws java.sql.SQLException
        Specified by:
        getFetchDirection in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • setFetchSize

        public void setFetchSize​(int rows)
                          throws java.sql.SQLException
        Specified by:
        setFetchSize in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • getFetchSize

        public int getFetchSize()
                         throws java.sql.SQLException
        Specified by:
        getFetchSize in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • getResultSetConcurrency

        public int getResultSetConcurrency()
                                    throws java.sql.SQLException
        Specified by:
        getResultSetConcurrency in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • getResultSetType

        public int getResultSetType()
                             throws java.sql.SQLException
        Specified by:
        getResultSetType in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • getResultSetHoldability

        public int getResultSetHoldability()
                                    throws java.sql.SQLException
        Specified by:
        getResultSetHoldability in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • addBatch

        public void addBatch​(java.lang.String sql)
                      throws java.sql.SQLException
        Specified by:
        addBatch in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • clearBatch

        public void clearBatch()
                        throws java.sql.SQLException
        Specified by:
        clearBatch in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • executeBatch

        public final int[] executeBatch()
                                 throws java.sql.SQLException
        Specified by:
        executeBatch in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • executeBatchInternal

        protected java.util.List<java.lang.Long> executeBatchInternal()
                                                               throws java.sql.SQLException
        Throws:
        java.sql.SQLException
      • createBatchUpdateException

        protected final java.sql.BatchUpdateException createBatchUpdateException​(java.lang.String reason,
                                                                                 java.lang.String SQLState,
                                                                                 int vendorCode,
                                                                                 long[] updateCounts,
                                                                                 java.lang.Throwable cause)
      • getConnection

        public java.sql.Connection getConnection()
                                          throws java.sql.SQLException
        Specified by:
        getConnection in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • getCurrentResultSet

        public java.sql.ResultSet getCurrentResultSet()
                                               throws java.sql.SQLException
        Description copied from interface: FirebirdStatement
        Get current result set. Behaviour of this method is similar to the behavior of the Statement.getResultSet(), except that this method can be called as much as you like.
        Specified by:
        getCurrentResultSet in interface FirebirdStatement
        Returns:
        instance of ResultSet representing current result set or null if it is not available.
        Throws:
        java.sql.SQLException - if database access error happened.
      • isPoolable

        public boolean isPoolable()
                           throws java.sql.SQLException
        Specified by:
        isPoolable in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • setPoolable

        public void setPoolable​(boolean poolable)
                         throws java.sql.SQLException
        Specified by:
        setPoolable in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • isWrapperFor

        public boolean isWrapperFor​(java.lang.Class<?> iface)
                             throws java.sql.SQLException
        Specified by:
        isWrapperFor in interface java.sql.Wrapper
        Throws:
        java.sql.SQLException
      • unwrap

        public <T> T unwrap​(java.lang.Class<T> iface)
                     throws java.sql.SQLException
        Specified by:
        unwrap in interface java.sql.Wrapper
        Throws:
        java.sql.SQLException
      • closeOnCompletion

        public void closeOnCompletion()
        Specified by:
        closeOnCompletion in interface java.sql.Statement
      • isCloseOnCompletion

        public boolean isCloseOnCompletion()
        Specified by:
        isCloseOnCompletion in interface java.sql.Statement
      • internalExecute

        protected boolean internalExecute​(java.lang.String sql)
                                   throws java.sql.SQLException
        Throws:
        java.sql.SQLException
      • internalExecute

        protected boolean internalExecute​(RowValue rowValue)
                                   throws java.sql.SQLException
        Throws:
        java.sql.SQLException
      • prepareFixedStatement

        protected void prepareFixedStatement​(java.lang.String sql)
                                      throws java.sql.SQLException
        Throws:
        java.sql.SQLException
      • requireStatement

        protected FbStatement requireStatement()
                                        throws java.sql.SQLException
        Throws:
        java.sql.SQLException
      • needsScrollableCursorEnabled

        protected boolean needsScrollableCursorEnabled()
      • addWarning

        protected void addWarning​(java.sql.SQLWarning warning)
      • nativeSQL

        protected java.lang.String nativeSQL​(java.lang.String sql)
                                      throws java.sql.SQLException
        Throws:
        java.sql.SQLException
      • isGeneratedKeyQuery

        protected boolean isGeneratedKeyQuery()
        Returns:
        true when the current statement is expected to return generated keys, false otherwise.
      • getLastExecutionPlan

        public java.lang.String getLastExecutionPlan()
                                              throws java.sql.SQLException
        Description copied from interface: FirebirdStatement
        Get execution plan for the last executed statement. Unlike the FirebirdPreparedStatement.getExecutionPlan(), this method can be called only after executing a query or update statement.
        Specified by:
        getLastExecutionPlan in interface FirebirdStatement
        Returns:
        execution plan returned by the server.
        Throws:
        java.sql.SQLException - if no statement was executed before calling this method, statement is not valid, or there was an error when obtaining the execution plan.
      • getLastExplainedExecutionPlan

        public java.lang.String getLastExplainedExecutionPlan()
                                                       throws java.sql.SQLException
        Description copied from interface: FirebirdStatement
        Get detailed execution plan for the last executed statement. More structured and comprehensible form. Can be called only after executing a query or update statement.
        Specified by:
        getLastExplainedExecutionPlan in interface FirebirdStatement
        Returns:
        detailed execution plan returned by the server.
        Throws:
        java.sql.SQLException - if no statement was executed before calling this method, statement is not valid, or there was an error when obtaining the execution plan.
      • checkValidity

        protected void checkValidity()
                              throws java.sql.SQLException
        Check if this statement is valid. This method should be invoked before executing any action which requires a valid connection.
        Throws:
        java.sql.SQLException - if this Statement has been closed and cannot be used anymore.
      • getLargeUpdateCountMinZero

        protected final long getLargeUpdateCountMinZero()
                                                 throws java.sql.SQLException
        Equivalent of getLargeUpdateCount(), with a minimum value of zero.

        For use in executeLargeUpdate methods as the API mandates 0 instead of -1 for no results, and in (emulated) executeBatch methods for consistency with server-side batch execution.

        Throws:
        java.sql.SQLException
        See Also:
        getUpdateCountMinZero()
      • getLargeUpdateCount

        public long getLargeUpdateCount()
                                 throws java.sql.SQLException
        Specified by:
        getLargeUpdateCount in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • setLargeMaxRows

        public void setLargeMaxRows​(long max)
                             throws java.sql.SQLException

        Jaybird does not support maxRows exceeding Integer.MAX_VALUE, if a larger value is set, Jaybird will add a warning to the statement and reset the maximum to 0.

        Specified by:
        setLargeMaxRows in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • getLargeMaxRows

        public long getLargeMaxRows()
                             throws java.sql.SQLException

        Jaybird does not support maxRows exceeding Integer.MAX_VALUE, the return value of this method is the same as getMaxRows().

        Specified by:
        getLargeMaxRows in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • executeLargeBatch

        public final long[] executeLargeBatch()
                                       throws java.sql.SQLException
        Specified by:
        executeLargeBatch in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • executeLargeUpdate

        public final long executeLargeUpdate​(java.lang.String sql)
                                      throws java.sql.SQLException
        Specified by:
        executeLargeUpdate in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • executeLargeUpdate

        public final long executeLargeUpdate​(java.lang.String sql,
                                             int autoGeneratedKeys)
                                      throws java.sql.SQLException
        Specified by:
        executeLargeUpdate in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • executeLargeUpdate

        public final long executeLargeUpdate​(java.lang.String sql,
                                             int[] columnIndexes)
                                      throws java.sql.SQLException
        Specified by:
        executeLargeUpdate in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • executeLargeUpdate

        public final long executeLargeUpdate​(java.lang.String sql,
                                             java.lang.String[] columnNames)
                                      throws java.sql.SQLException
        Specified by:
        executeLargeUpdate in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • enquoteLiteral

        public java.lang.String enquoteLiteral​(java.lang.String val)
                                        throws java.sql.SQLException
        Returns a String enclosed in single quotes. Any occurrence of a single quote within the string will be replaced by two single quotes.

        For a dialect 3 database, this will behave exactly like the JDBC 4.3 default implementation. For a dialect 1 database this will quote literals with double quotes and escape double quotes by doubling.

        Specified by:
        enquoteLiteral in interface java.sql.Statement
        Parameters:
        val - a character string
        Returns:
        A string enclosed by single quotes with every single quote converted to two single quotes
        Throws:
        java.lang.NullPointerException - if val is null
        java.sql.SQLException - if a database access error occurs
      • enquoteNCharLiteral

        public java.lang.String enquoteNCharLiteral​(java.lang.String val)
                                             throws java.sql.SQLException
        Specified by:
        enquoteNCharLiteral in interface java.sql.Statement
        Throws:
        java.sql.SQLException
        See Also:
        enquoteLiteral(String)
      • enquoteIdentifier

        public java.lang.String enquoteIdentifier​(java.lang.String identifier,
                                                  boolean alwaysQuote)
                                           throws java.sql.SQLException
        Returns a SQL identifier. If identifier is a simple SQL identifier:
        • Return the original value if alwaysQuote is false
        • Return a delimited identifier if alwaysQuote is true
        Specified by:
        enquoteIdentifier in interface java.sql.Statement
        Parameters:
        identifier - a SQL identifier
        alwaysQuote - indicates if a simple SQL identifier should be returned as a quoted identifier
        Returns:
        A simple SQL identifier or a delimited identifier
        Throws:
        java.sql.SQLException - if identifier is not a valid identifier
        java.sql.SQLFeatureNotSupportedException - if the datasource does not support delimited identifiers (ie: a dialect 1 database)
        java.lang.NullPointerException - if identifier is null
      • isSimpleIdentifier

        public boolean isSimpleIdentifier​(java.lang.String identifier)
                                   throws java.sql.SQLException
        Specified by:
        isSimpleIdentifier in interface java.sql.Statement
        Throws:
        java.sql.SQLException
      • getLocalStatementId

        public final int getLocalStatementId()
        Description copied from interface: FirebirdStatement
        The local statement id is intended to identify the statement for internal implementation purposes.

        NOTE: This method is only included in this interface to try and avoid problems with proxied and bytecode enhanced classes in certain libraries, you should normally have no reason to call this method directly.

        The id is expected - but not guaranteed - to be unique for a single connection, and - preferably - for the entire JVM run time as well.

        Specified by:
        getLocalStatementId in interface FirebirdStatement
        Returns:
        The local statement id.
      • hashCode

        public final int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • equals

        public final boolean equals​(java.lang.Object other)
        Overrides:
        equals in class java.lang.Object