Class JnaStatement

    • Constructor Detail

      • JnaStatement

        public JnaStatement​(JnaDatabase database)
    • Method Detail

      • isValidTransactionClass

        protected boolean isValidTransactionClass​(java.lang.Class<? extends FbTransaction> transactionClass)
        Description copied from class: AbstractFbStatement
        Method to decide if a transaction implementation class is valid for the statement implementation.

        Eg a V10Statement will only work with an FbWireTransaction implementation.

        Specified by:
        isValidTransactionClass in class AbstractFbStatement
        Parameters:
        transactionClass - Class of the transaction
        Returns:
        true when the transaction class is valid for the statement implementation.
      • getDatabase

        public JnaDatabase getDatabase()
        Returns:
        The database connection that created this statement
      • getHandle

        public int getHandle()
        Returns:
        The Firebird statement handle identifier
      • prepare

        public void prepare​(java.lang.String statementText)
                     throws java.sql.SQLException
        Description copied from interface: FbStatement
        Prepare the statement text.

        If this handle is in state StatementState.NEW then it will first allocate the statement.

        Parameters:
        statementText - Statement text
        Throws:
        java.sql.SQLException - If a database access error occurs, or this statement is currently executing a query.
      • execute

        public void execute​(RowValue parameters)
                     throws java.sql.SQLException
        Description copied from interface: FbStatement
        Execute the statement.
        Parameters:
        parameters - The list of parameter values to use for execution.
        Throws:
        java.sql.SQLException - When the number of type of parameters does not match the types returned by FbStatement.getParameterDescriptor(), a parameter value was not set, or when an error occurred executing this statement.
      • setXSqlDaData

        protected void setXSqlDaData​(XSQLDA xSqlDa,
                                     RowDescriptor rowDescriptor,
                                     RowValue parameters)
        Populates an XSQLDA from the row descriptor and parameter values.
        Parameters:
        xSqlDa - XSQLDA
        rowDescriptor - Row descriptor
        parameters - Parameter values
      • allocateXSqlDa

        protected XSQLDA allocateXSqlDa​(RowDescriptor rowDescriptor)
        Creates an XSQLDA, populates type information and allocates memory for the sqldata fields.
        Parameters:
        rowDescriptor - The row descriptor
        Returns:
        Allocated XSQLDA without data
      • toRowValue

        protected RowValue toRowValue​(RowDescriptor rowDescriptor,
                                      XSQLDA xSqlDa)
        Converts the data from an XSQLDA to a RowValue.
        Parameters:
        rowDescriptor - Row descriptor
        xSqlDa - XSQLDA
        Returns:
        Row value
      • fetchRows

        public void fetchRows​(int fetchSize)
                       throws java.sql.SQLException
        Requests this statement to fetch the next fetchSize rows.

        Fetched rows are not returned from this method, but sent to the registered StatementListener instances.

        The JNA implementation ignores the specified fetchSize to prevent problems with - for example - positioned updates with named cursors. For the wire protocol that case is handled by the server ignoring the fetch size. Internally the native fetch will batch a number of records, but the number is outside our control.

        Parameters:
        fetchSize - Number of rows to fetch (must be greater than 0)
        Throws:
        java.sql.SQLException - For database access errors, when called on a closed statement, when no cursor is open or when the fetch size is not greater than 0.
      • getSqlInfo

        public byte[] getSqlInfo​(byte[] requestItems,
                                 int bufferLength)
                          throws java.sql.SQLException
        Description copied from interface: FbStatement
        Request statement info.
        Parameters:
        requestItems - Array of info items to request
        bufferLength - Response buffer length to use
        Returns:
        Response buffer
        Throws:
        java.sql.SQLException - For errors retrieving or transforming the response.
      • getDefaultSqlInfoSize

        public int getDefaultSqlInfoSize()
        Returns:
        The default size to use for the sql info buffer
      • getMaxSqlInfoSize

        public int getMaxSqlInfoSize()
        Returns:
        The maximum size to use for the sql info buffer
      • setCursorName

        public void setCursorName​(java.lang.String cursorName)
                           throws java.sql.SQLException
        Description copied from interface: FbStatement
        Sets the named cursor name for this statement.
        Parameters:
        cursorName - Name of the cursor
        Throws:
        java.sql.SQLException - If this statement is closed, TODO: Other reasons (eg cursor open)?
      • emptyRowDescriptor

        public final RowDescriptor emptyRowDescriptor()
        Returns:
        A potentially cached empty row descriptor for this statement or database.