oracle.jdbc.driver
Class OracleStatement

oracle.jdbc.driver.OracleStatement

public class OracleStatement

Oracle statement class.


Field Summary
 int auto_rollback
           
 boolean closed
           
 oracle.jdbc.driver.DBStatement dbstmt
           
 oracle.jdbc.driver.DBDataSet defines
           
 int wait_option
           
 
Method Summary
 void addBatch(java.lang.String sql)
          Add a SQL command to the current batch.
 void cancel()
          Cancel the current statement
 void clearBatch()
          Make the set of commands in the current batch empty.
 void clearDefines()
          Allows the user to clear previously defined types for the define-columns of a select statement. This is useful if the user wishes to re-use a statement for a different query.
 void clearWarnings()
          We do not have any statement-level warnings.
 void close()
          Close the current result set, if any, and then close the statement.
 void closeWithKey(java.lang.String key)
          The underlying cursor is not closed and the Statement handle is cached on the Key.
 int creationState()
          Returns the Creation Status of this Statement.
 void defineColumnType(int column_index, int type)
          Define the type under which you will fetch data from the column.
 void defineColumnType(int column_index, int type, int max_size)
          Define the type under which you will fetch data from the column and the maximum size of data you want, specifying the maximum size in bytes, not characters.
 void defineColumnType(int column_index, int typeCode, java.lang.String typeName)
          Define the type under which you will fetch data from the column.
 void defineColumnTypeChars(int column_index, int type, int max_size)
          Define the type under which you will fetch data from the column and the maximum size of data you want, specifying the maximum size in characters, rather than bytes.
 boolean execute(java.lang.String sql)
          Execute a SQL statement.
 int[] executeBatch()
          Submit a batch of commands to the database for execution.
 java.sql.ResultSet executeQuery(java.lang.String sql)
          Execute a query statement.
 int executeUpdate(java.lang.String sql)
          Execute an update statement.
 boolean getAutoRefetch()
          Oracle extension.
 java.sql.Connection getConnection()
          JDBC 2.0 Returns the Connection object that produced this Statement object.
 short getDBTypeForm(int index)
           
 int getFetchDirection()
          JDBC 2.0 Retrieves the direction for fetching rows from database tables that is the default for result sets generated from this Statement object.
 int getFetchSize()
          JDBC 2.0 Retrieves the number of result set rows that is the default fetch size for result sets generated from this Statement object.
 boolean getFixedString()
          Returns the current setObject(string) behavior for this Statement. By default, a call to PreparedStatement.setObject() with a String will bind the string using Types.VARCHAR, which will use non blank-padded character comparison semantics.
 int getMaxFieldSize()
           
 int getMaxRows()
           
 boolean getMoreResults()
          We only have one result and there no way to indicate it.
 int getQueryTimeout()
          The queryTimeout limit is the number of seconds the driver will wait for a Statement to execute.
 java.sql.ResultSet getResultSet()
          Allocate a result set.
 int getResultSetConcurrency()
          JDBC 2.0 Retrieves the result set concurrency.
 int getResultSetType()
          JDBC 2.0 Determine the result set type.
 int getRowPrefetch()
          Allows the user to retrieve the prefetch value for all results sets created from this statement.
 byte getSqlKind()
          Return the statement kind.
 int getUpdateCount()
           
 java.sql.SQLWarning getWarnings()
          We do not have any statement-level warnings
 boolean is_value_null(boolean getColumn, int index)
          This is public only so that the Jolt server can get to it.
 int sendBatch()
          Void entrypoint so that we do not have to cast statements to OraclePreparedStatements when sending the batch
 void setAutoRefetch(boolean autoRefetch)
          Oracle extension.
 void setCursorName(java.lang.String name)
          We do not support that
 void setEscapeProcessing(boolean enable)
           
 void setFetchDirection(int direction)
          JDBC 2.0 Gives the driver a hint as to the direction in which the rows in a result set will be processed.
 void setFetchSize(int rows)
          JDBC 2.0 Gives the JDBC driver a hint as to the number of rows that should be fetched from the database when more rows are needed.
 void setFixedString(boolean fixedString_value)
          Changes the default setObject(string) behavior for this Statement. By default, a call to PreparedStatement.setObject() with a String will bind the string using Types.VARCHAR, which will use non blank-padded character comparison semantics.
 void setMaxFieldSize(int max)
           
 void setMaxRows(int max)
           
 void setQueryTimeout(int max)
          The queryTimeout limit is the number of seconds the driver will wait for a Statement to execute.
 void setResultSetCache(OracleResultSetCache cache)
          Oracle Extenstion Override the default result set cache.
 void setResultSetCache(OracleResultSetCache cache)
          Oracle Extenstion Override the default result set cache.
 void setRowPrefetch(int value)
          setRowPrefetch allows the user to set the row prefetch value for all result sets created from this statement. setRowPrefetch overrides the prefetch value set from the connection, for this particular statement. The row_prefetch will be turned back to 1 automatically by the driver if any of the select-column types is streaming (long data or long raw data).
 

Field Detail

defines

public oracle.jdbc.driver.DBDataSet defines

dbstmt

public oracle.jdbc.driver.DBStatement dbstmt

closed

public boolean closed

auto_rollback

public int auto_rollback

wait_option

public int wait_option
Method Detail

executeQuery

public java.sql.ResultSet executeQuery(java.lang.String sql)
                                throws java.sql.SQLException
Execute a query statement.
Parameters:
sql - SQL statement to be executed. The query is transformed into native SQL.
Returns:
the query result set.
Throws:
java.sql.SQLException - if error(s) occurred.

close

public void close()
           throws java.sql.SQLException
Close the current result set, if any, and then close the statement.
Throws:
java.sql.SQLException - if error(s) occurred.

closeWithKey

public void closeWithKey(java.lang.String key)
                  throws java.sql.SQLException
The underlying cursor is not closed and the Statement handle is cached on the Key. The Statement is cached as it is and the state, data, and meta-data is not cleared. The same statement can be retrieved with this Key later. Key cannot be null.
Parameters:
key - A key to tag to the statement to be retrieved later
Throws:
java.sql.SQLException - if a database access error occurs

executeUpdate

public int executeUpdate(java.lang.String sql)
                  throws java.sql.SQLException
Execute an update statement.
Parameters:
sql - SQL statement to be executed. The query is transformed into native SQL.
Returns:
the resulting update count.
Throws:
java.sql.SQLException - if error(s) occurred.

execute

public boolean execute(java.lang.String sql)
                throws java.sql.SQLException
Execute a SQL statement.
Parameters:
sql - SQL statement to be executed.
Throws:
java.sql.SQLException - if error(s) occurred.

getSqlKind

public byte getSqlKind()
Return the statement kind. This currently just looks at the first word in the statement string and compares it with "SELECT". It parses for both C Comments and SQL (--) comments

clearDefines

public void clearDefines()
                  throws java.sql.SQLException
Allows the user to clear previously defined types for the define-columns of a select statement.

This is useful if the user wishes to re-use a statement for a different query.

After calling clearDefines, the user can either perform defines by calling defineColumnType/defineColumnTypeChars or let the driver use the default defines for the table.

To use the clearDefines entrypoint you have to cast the Statement object to the type oracle.jdbc.driver.OracleStatement.


defineColumnType

public void defineColumnType(int column_index,
                             int type)
                      throws java.sql.SQLException
Define the type under which you will fetch data from the column.
Before executing a Query you may choose to inform JDBC of the type you will use for fetching data from columns. This will save 2 roundtrips to the RDBMS when executing the query as otherwise the JDBC driver has to ask the RDBMS for the column types.

If you decide to define column types you have to declare the types of exactly all columns in the Query. If definition are missing or too many definitions are provided executeQuery will fail with a SQLException.

To use the defineColumnType entrypoint you have to cast the Statement object to the type oracle.jdbc.driver.OracleStatement.

Parameters:
column_index - Index of column
type - Type to be assigned to column This type could be different from the native type of the column. Appropriate conversions will be done. A subsequent call to getObject() for this column will return the supplied type rather than the native type, however.

defineColumnType

public void defineColumnType(int column_index,
                             int type,
                             int max_size)
                      throws java.sql.SQLException
Define the type under which you will fetch data from the column and the maximum size of data you want, specifying the maximum size in bytes, not characters.
Similarly to the previous void defineColumnType (int column_index, int type) before executing a Query you may choose to inform JDBC of the type you will use for fetching data from columns and the maximum length of data you desire. Each type of data has a default maximum length. This API is useful if you do not wish to get the full default length of data. The actual maximum length of data returned will be the minimum of the following values: If you decide to define column types you have to declare the types of exactly all columns in the Query. Any of the 2 "define" API can be used for any column. If definitions are missing or too many definitions are provided executeQuery will fail with a SQLException.

Similar to the other "define" API, to use the defineColumnType entrypoint you have to cast the Statement object to the type oracle.jdbc.driver.OracleStatement.

The actual maximum length of data returned will be the minimum of the following values:

Parameters:
column_index - Index of column
type - Type to be assigned to column This type could be different from the native type of the column. Appropriate conversions will be done. A subsequent call to getObject() for this column will return the supplied type rather than the native type, however.
max_size - Maximum length of data that the user wants for this column. This value is specified in bytes, not characters. To specify the maximum length in characters, use the defineColumnTypeChars entrypoint.

defineColumnTypeChars

public void defineColumnTypeChars(int column_index,
                                  int type,
                                  int max_size)
                           throws java.sql.SQLException
Define the type under which you will fetch data from the column and the maximum size of data you want, specifying the maximum size in characters, rather than bytes. For non-character types, this entrypoint behaves the same as defineColumnType.
Similarly to the previous void defineColumnType (int column_index, int type) before executing a Query you may choose to inform JDBC of the type you will use for fetching data from columns and the maximum length of data you desire. Each type of data has a default maximum length. This API is useful if you do not wish to get the full default length of data. The actual maximum length of data returned will be the minimum of the following values: If you decide to define column types you have to declare the types of exactly all columns in the Query. Any of the 2 "define" API can be used for any column. If definitions are missing or too many definitions are provided executeQuery will fail with a SQLException.

Similar to the other "define" API, to use the defineColumnTypeChars entrypoint you have to cast the Statement object to the type oracle.jdbc.driver.OracleStatement.

The actual maximum length of data returned will be the minimum of the following values:

Parameters:
column_index - Index of column
type - Type to be assigned to column This type could be different from the native type of the column. Appropriate conversions will be done.
max_size - Maximum length of data that the user wants for this column. This value is specified in characters, not bytes. To specify the maximum length in bytes, use the defineColumnType entrypoint.

defineColumnType

public void defineColumnType(int column_index,
                             int typeCode,
                             java.lang.String typeName)
                      throws java.sql.SQLException
Define the type under which you will fetch data from the column.
Before executing a query you may choose to inform JDBC of the type you will use for fetching data from columns. This will save 2 roundtrips to the RDBMS when executing the query as otherwise the JDBC driver has to ask the RDBMS for the column types.

If you decide to define column types you have to declare the types of exactly all columns in the Query. If definition are missing or too many definitions are provided executeQuery will fail with a SQLException.

To use the defineColumnType entrypoint you have to cast the Statement object to the type oracle.jdbc.driver.OracleStatement.

Parameters:
column_index - Index of column
typeCode - Type code for this column.
typeName - specifies the fully-qualified name of the column if typeCode is OracleTypes.REF_TYPE or OracleTypes.STRUCT or OracleTypes.ARRAY. This parameter is ignored for other type codes.

setRowPrefetch

public void setRowPrefetch(int value)
                    throws java.sql.SQLException
setRowPrefetch allows the user to set the row prefetch value for all result sets created from this statement.

setRowPrefetch overrides the prefetch value set from the connection, for this particular statement.

The row_prefetch will be turned back to 1 automatically by the driver if any of the select-column types is streaming (long data or long raw data). This is overrides any value the user might set. Also, this will be done regardless of wether the streaming columns are read or not.

To use the setRowPrefetch entrypoint you have to cast the Statement object to the type oracle.jdbc.driver.OracleStatement.


getRowPrefetch

public int getRowPrefetch()
Allows the user to retrieve the prefetch value for all results sets created from this statement.

To use the getRowPrefetch entrypoint you have to cast the Statement object to the type oracle.jdbc.driver.OracleStatement.


setFixedString

public void setFixedString(boolean fixedString_value)
Changes the default setObject(string) behavior for this Statement.

By default, a call to PreparedStatement.setObject() with a String will bind the string using Types.VARCHAR, which will use non blank-padded character comparison semantics. This is in accordance with the JDBC specification.

This behavior can be changed for this Statement by passing false to setFixedString().

Parameters:
fixedString - If true, then setObject(x, String) calls will bind with Types.FIXED_CHAR rather than Types.VARCHAR, which will result in blank-padded character comparison semantics.
See Also:
getFixedString

getFixedString

public boolean getFixedString()
Returns the current setObject(string) behavior for this Statement.

By default, a call to PreparedStatement.setObject() with a String will bind the string using Types.VARCHAR, which will use non blank-padded character comparison semantics. This is in accordance with the JDBC specification.

This behavior can be changed for this Statement by passing false to setFixedString().

Returns:
The current setting. If true, then setObject(x, String) calls will bind with Types.FIXED_CHAR rather than Types.VARCHAR, which will result in blank-padded character comparison semantics.
See Also:
setFixedString

getMaxFieldSize

public int getMaxFieldSize()
                    throws java.sql.SQLException

setMaxFieldSize

public void setMaxFieldSize(int max)
                     throws java.sql.SQLException

getMaxRows

public int getMaxRows()
               throws java.sql.SQLException

setMaxRows

public void setMaxRows(int max)
                throws java.sql.SQLException

setEscapeProcessing

public void setEscapeProcessing(boolean enable)
                         throws java.sql.SQLException

getQueryTimeout

public int getQueryTimeout()
                    throws java.sql.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.
Returns:
the current query timeout limit in seconds; zero means unlimited

setQueryTimeout

public void setQueryTimeout(int max)
                     throws java.sql.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.
Parameters:
seconds - the new query timeout limit in seconds; zero means unlimit ed

cancel

public void cancel()
            throws java.sql.SQLException
Cancel the current statement

getWarnings

public java.sql.SQLWarning getWarnings()
                                throws java.sql.SQLException
We do not have any statement-level warnings

clearWarnings

public void clearWarnings()
                   throws java.sql.SQLException
We do not have any statement-level warnings.

setCursorName

public void setCursorName(java.lang.String name)
                   throws java.sql.SQLException
We do not support that

getResultSet

public java.sql.ResultSet getResultSet()
                                throws java.sql.SQLException
Allocate a result set. I'm not sure if we should clear the warnings here or not.

getUpdateCount

public int getUpdateCount()
                   throws java.sql.SQLException

getMoreResults

public boolean getMoreResults()
                       throws java.sql.SQLException
We only have one result and there no way to indicate it.

sendBatch

public int sendBatch()
              throws java.sql.SQLException
Void entrypoint so that we do not have to cast statements to OraclePreparedStatements when sending the batch

getDBTypeForm

public short getDBTypeForm(int index)

is_value_null

public boolean is_value_null(boolean getColumn,
                             int index)
                      throws java.sql.SQLException
This is public only so that the Jolt server can get to it. (This is currently used only in Jolt)

setFetchDirection

public void setFetchDirection(int direction)
                       throws java.sql.SQLException
JDBC 2.0 Gives the driver 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. Oracle JDBC driver only supports FETCH_FORWARD; changing fetch direction to FETCH_REVERSE or FETCH_UNKNOWN is ignored.
Parameters:
direction - the initial direction for processing rows
Throws:
java.sql.SQLException - if a database access error occurs

getFetchDirection

public int getFetchDirection()
                      throws java.sql.SQLException
JDBC 2.0 Retrieves the direction for fetching rows from database tables that is the default for result sets generated from this Statement object. Since Oracle database only supports forward only cursor. This method always return FETCH_FORWARD.
Returns:
the default fetch direction for result sets generated from this Statement object
Throws:
java.sql.SQLException - if a database access error occurs

setFetchSize

public void setFetchSize(int rows)
                  throws java.sql.SQLException
JDBC 2.0 Gives 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 affects only result sets created using this statement. If the value specified is zero, the connection default row prefetch size is used.
Parameters:
rows - the number of rows to fetch
Throws:
java.sql.SQLException - if a database access error occurs, or the condition 0 <= rows <= this.getMaxRows() is not satisfied.

getFetchSize

public int getFetchSize()
                 throws java.sql.SQLException
JDBC 2.0 Retrieves the number of result set rows that is the default fetch size for result sets generated from this Statement object. If this Statement object has not set a fetch size by calling the method setFetchSize, the return value is the connection default prefetch size.
Returns:
the default fetch size for result sets generated from this Statement object
Throws:
java.sql.SQLException - if a database access error occurs

getResultSetConcurrency

public int getResultSetConcurrency()
                            throws java.sql.SQLException
JDBC 2.0 Retrieves the result set concurrency.

getResultSetType

public int getResultSetType()
                     throws java.sql.SQLException
JDBC 2.0 Determine the result set type.

getConnection

public java.sql.Connection getConnection()
                                  throws java.sql.SQLException
JDBC 2.0 Returns the Connection object that produced this Statement object.
Returns:
the connection that produced this statement
Throws:
java.sql.SQLException - if a database access error occurs

setResultSetCache

public void setResultSetCache(OracleResultSetCache cache)
                       throws java.sql.SQLException
Oracle Extenstion Override the default result set cache.
Parameters:
cache - is a OracleResultSetCache instance

setResultSetCache

public void setResultSetCache(OracleResultSetCache cache)
                       throws java.sql.SQLException
Oracle Extenstion Override the default result set cache.
Parameters:
cache - is a OracleResultSetCache instance

addBatch

public void addBatch(java.lang.String sql)
              throws java.sql.SQLException
Add a SQL command to the current batch.
Parameters:
sql - typically this is a static SQL INSERT or UPDATE statement.
Throws:
java.sql.SQLException - if an error occurred.
Since:
8.1.6 (JDBC 2.0).

clearBatch

public void clearBatch()
                throws java.sql.SQLException
Make the set of commands in the current batch empty.
Throws:
java.sql.SQLException - if a database access error occurred.
Since:
81.6 (JDBC 2.0).

executeBatch

public int[] executeBatch()
                   throws java.sql.SQLException
Submit a batch of commands to the database for execution.

Commands are executed in the order in which they were added to the batch. This method closes the calling Statement object's current set if one is open. The statement's internal list of batch commands is reset to empty once this method returns.

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:
java.sql.BatchUpdateException - if any of the commands in the batch failed to execute property. (For example, the batch will fail if it contained a command that returns a result set.) executeBatch() will stop when the first command returns an error. The update counts for the executed commands can be obtained by invoking the method BatchUpdateException.getUpdateCounts().
Since:
8.1.6 (JDBC 2.0).

setAutoRefetch

public void setAutoRefetch(boolean autoRefetch)
                    throws java.sql.SQLException
Oracle extension. Set the default state of ResultSet's auto-refetch mode of the statement. If a ResultSet is in auto-refetch mode, then it automatically refetches the column values during updateRow(). Otherwise, the column values in the ResultSet are the same as the value from the updateXXX() calls which may not be in sync with the database column values if a database trigger is enabled to modify the column values. Disable auto-refetch improves performance by avoiding one database round-trip druing the updateRow() call. By default, the connection's default auto-refetech value is true.
Parameters:
autoRefetch - true enables auto-refetch; false disables auto-refetch.
Throws:
java.sql.SQLException - if a database access error occurs
Since:
8.1.7
See Also:
OracleConnection.setDefaultAutoRefetch(boolean), OracleResultSet.setAutoRefetch(boolean)

getAutoRefetch

public boolean getAutoRefetch()
                       throws java.sql.SQLException
Oracle extension. Gets the default auto-refetch state of this statement.
Returns:
the current state of auot-refetch mode
Throws:
java.sql.SQLException - if a database access error occurs
Since:
8.1.7
See Also:
setAutoRefetch(boolean)

creationState

public int creationState()
Returns the Creation Status of this Statement. Whether it is a new created or returned from KEY based cache or internal cache. Possible returns values are :

OracleStatement.NEW (0) OracleStatement.IMPLICIT (1) OracleStatement.EXPLICIT (2)

Returns:
Creation Status flag