public interface

Statement

java.sql.Statement
Known Indirect Subclasses

Class Overview

Interface used for executing static SQL statements to retrieve query results. The resulting table rows are returned as ResultSets. For any given Statement object, only one ResultSet can be opened at one time. A call to any of the execution methods of Statement will cause any previously created ResultSet object for that Statement to be closed implicitly.

To have multiple ResultSet objects opened concurrently, multiple Statement objects must be created and then executed.

To obtain such an executable statement one needs to invoke Connection#createStatement.

Summary

Constants
int CLOSE_ALL_RESULTS Passing this constant to getMoreResults() implies that all ResultSet objects previously kept open should be closed.
int CLOSE_CURRENT_RESULT Passing this constant to getMoreResults() implies that the current ResultSet object should be closed.
int EXECUTE_FAILED Indicates that an error was encountered during execution of a batch statement.
int KEEP_CURRENT_RESULT Passing this constant to getMoreResults implies that the current ResultSet object should not be closed.
int NO_GENERATED_KEYS Indicates that generated keys should not be accessible for retrieval.
int RETURN_GENERATED_KEYS Indicates that generated keys should be accessible for retrieval.
int SUCCESS_NO_INFO Indicates that a batch statement was executed with a successful result, but a count of the number of rows it affected is unavailable.
Public Methods
abstract void addBatch(String sql)
Adds a specified SQL command to the list of commands for this Statement.
abstract void cancel()
Cancels this statement's execution if both the database and the JDBC driver support aborting an SQL statement in flight.
abstract void clearBatch()
Clears the current list of SQL commands for this statement.
abstract void clearWarnings()
Clears all SQLWarnings from this statement.
abstract void close()
Releases this statement's database and JDBC driver resources.
abstract boolean execute(String sql, String[] columnNames)
Executes the supplied SQL statement.
abstract boolean execute(String sql)
Executes a supplied SQL statement.
abstract boolean execute(String sql, int autoGeneratedKeys)
Executes a supplied SQL statement.
abstract boolean execute(String sql, int[] columnIndexes)
Executes the supplied SQL statement.
abstract int[] executeBatch()
Submits a batch of SQL commands to the database.
abstract ResultSet executeQuery(String sql)
Executes a supplied SQL statement.
abstract int executeUpdate(String sql, int[] columnIndexes)
Executes the supplied SQL statement.
abstract int executeUpdate(String sql)
Executes the supplied SQL statement.
abstract int executeUpdate(String sql, String[] columnNames)
Executes the supplied SQL statement.
abstract int executeUpdate(String sql, int autoGeneratedKeys)
Executes the supplied SQL statement.
abstract Connection getConnection()
Gets the Connection object which created this statement.
abstract int getFetchDirection()
Gets the default direction for fetching rows for ResultSets generated from this statement.
abstract int getFetchSize()
Gets the default number of rows for a fetch for the ResultSet objects returned from this statement.
abstract ResultSet getGeneratedKeys()
Returns auto generated keys created by executing this statement.
abstract int getMaxFieldSize()
Gets the maximum number of bytes which can be returned as values from character and binary type columns in a ResultSet derived from this statement.
abstract int getMaxRows()
Gets the maximum number of rows that a ResultSet can contain when produced from this statement.
abstract boolean getMoreResults(int current)
Moves to this statement's next result.
abstract boolean getMoreResults()
Moves to this statement's next result.
abstract int getQueryTimeout()
Gets the timeout value for the statement's execution time.
abstract ResultSet getResultSet()
Gets the current result.
abstract int getResultSetConcurrency()
Gets the concurrency setting for ResultSet objects generated by this statement.
abstract int getResultSetHoldability()
Gets the cursor hold setting for ResultSet objects generated by this statement.
abstract int getResultSetType()
Gets the ResultSet type setting for ResultSets derived from this statement.
abstract int getUpdateCount()
Gets an update count for the current result if it is not a ResultSet.
abstract SQLWarning getWarnings()
Retrieves the first SQLWarning reported by calls on this statement.
abstract void setCursorName(String name)
Sets the SQL cursor name.
abstract void setEscapeProcessing(boolean enable)
Sets Escape Processing mode.
abstract void setFetchDirection(int direction)
Sets the fetch direction - a hint to the JDBC driver about the direction of processing of rows in ResultSets created by this statement.
abstract void setFetchSize(int rows)
Sets the fetch size.
abstract void setMaxFieldSize(int max)
Sets the maximum number of bytes for ResultSet columns that contain character or binary values.
abstract void setMaxRows(int max)
Sets the maximum number of rows that any ResultSet can contain.
abstract void setQueryTimeout(int seconds)
Sets the timeout, in seconds, for queries - how long the driver will allow for completion of a statement execution.

Constants

public static final int CLOSE_ALL_RESULTS

Since: API Level 1

Passing this constant to getMoreResults() implies that all ResultSet objects previously kept open should be closed.

Constant Value: 3 (0x00000003)

public static final int CLOSE_CURRENT_RESULT

Since: API Level 1

Passing this constant to getMoreResults() implies that the current ResultSet object should be closed.

Constant Value: 1 (0x00000001)

public static final int EXECUTE_FAILED

Since: API Level 1

Indicates that an error was encountered during execution of a batch statement.

Constant Value: -3 (0xfffffffd)

public static final int KEEP_CURRENT_RESULT

Since: API Level 1

Passing this constant to getMoreResults implies that the current ResultSet object should not be closed.

Constant Value: 2 (0x00000002)

public static final int NO_GENERATED_KEYS

Since: API Level 1

Indicates that generated keys should not be accessible for retrieval.

Constant Value: 2 (0x00000002)

public static final int RETURN_GENERATED_KEYS

Since: API Level 1

Indicates that generated keys should be accessible for retrieval.

Constant Value: 1 (0x00000001)

public static final int SUCCESS_NO_INFO

Since: API Level 1

Indicates that a batch statement was executed with a successful result, but a count of the number of rows it affected is unavailable.

Constant Value: -2 (0xfffffffe)

Public Methods

public abstract void addBatch (String sql)

Since: API Level 1

Adds a specified SQL command to the list of commands for this Statement.

The list of commands is executed by invoking the executeBatch method.

Parameters
sql the SQL command as a String. Typically an INSERT or UPDATE statement.
Throws
SQLException if an error occurs accessing the database or the database does not support batch updates.

public abstract void cancel ()

Since: API Level 1

Cancels this statement's execution if both the database and the JDBC driver support aborting an SQL statement in flight. This method can be used by one thread to stop a statement that is executed on another thread.

Throws
SQLException if an error occurs accessing the database.

public abstract void clearBatch ()

Since: API Level 1

Clears the current list of SQL commands for this statement.

Throws
SQLException if an error occurs accessing the database or the database does not support batch updates.

public abstract void clearWarnings ()

Since: API Level 1

Clears all SQLWarnings from this statement.

Throws
SQLException if an error occurs accessing the database.

public abstract void close ()

Since: API Level 1

Releases this statement's database and JDBC driver resources.

Using this method to release these resources as soon as possible is strongly recommended.

One should not rely on the resources being automatically released when finalized during garbage collection. Doing so can result in unpredictable behavior for the application.

Throws
SQLException if an error occurs accessing the database.

public abstract boolean execute (String sql, String[] columnNames)

Since: API Level 1

Executes the supplied SQL statement. This may return multiple ResultSets. This method allows retrieval of auto generated keys specified by the supplied array of column indexes, if the SQL statement is an INSERT statement.

Use the getResultSet or getUpdateCount methods to get the first result and getMoreResults to get any subsequent results.

Parameters
sql the SQL statement to execute.
columnNames an array of column names in the inserted row which should be made available for retrieval via the getGeneratedKeys method.
Returns
  • true if the first result is a ResultSet, false if the first result is an update count or if there is no result
Throws
SQLException if an error occurs accessing the database.

public abstract boolean execute (String sql)

Since: API Level 1

Executes a supplied SQL statement. This may return multiple ResultSets.

Use the getResultSet or getUpdateCount methods to get the first result and getMoreResults to get any subsequent results.

Parameters
sql the SQL statement to execute
Returns
  • true if the first result is a ResultSet, false if the first result is an update count or if there is no result.
Throws
SQLException if an error occurs accessing the database.

public abstract boolean execute (String sql, int autoGeneratedKeys)

Since: API Level 1

Executes a supplied SQL statement. This may return multiple ResultSets. This method allows control of whether auto-generated Keys should be made available for retrieval, if the SQL statement is an INSERT statement.

Use the getResultSet or getUpdateCount methods to get the first result and getMoreResults to get any subsequent results.

Parameters
sql the SQL statement to execute.
autoGeneratedKeys a flag indicating whether to make auto generated keys available for retrieval. This parameter must be one of Statement.NO_GENERATED_KEYS or Statement.RETURN_GENERATED_KEYS.
Returns
  • true if results exists and the first result is a ResultSet, false if the first result is an update count or if there is no result.
Throws
SQLException if an error occurs accessing the database.

public abstract boolean execute (String sql, int[] columnIndexes)

Since: API Level 1

Executes the supplied SQL statement. This may return multiple ResultSets. This method allows retrieval of auto generated keys specified by the supplied array of column indexes, if the SQL statement is an INSERT statement.

Use the getResultSet or getUpdateCount methods to get the first result and getMoreResults to get any subsequent results.

Parameters
sql the SQL statement to execute.
columnIndexes an array of indexes of the columns in the inserted row which should be made available for retrieval via the getGeneratedKeys method.
Returns
  • true if the first result is a ResultSet, false if the first result is an update count or if there is no result.
Throws
SQLException if an error occurs accessing the database.

public abstract int[] executeBatch ()

Since: API Level 1

Submits a batch of SQL commands to the database. Returns an array of update counts, if all the commands execute successfully.

If one of the commands in the batch fails, this method can throw a BatchUpdateException and the JDBC driver may or may not process the remaining commands. The JDBC driver must behave consistently with the underlying database, following the "all or nothing" principle. If the driver continues processing, the array of results returned contains the same number of elements as there are commands in the batch, with a minimum of one of the elements having the EXECUTE_FAILED value.

Returns
  • an array of update counts, with one entry for each command in the batch. The elements are ordered according to the order in which the commands were added to the batch.

    1. If the value of an element is ≥ 0, the corresponding command completed successfully and the value is the update count (the number of rows in the database affected by the command) for that command.
    2. If the value is SUCCESS_NO_INFO, the command completed successfully but the number of rows affected is unknown.
    3. If the value is EXECUTE_FAILED, the command failed.
Throws
SQLException if an error occurs accessing the database.

public abstract ResultSet executeQuery (String sql)

Since: API Level 1

Executes a supplied SQL statement. Returns a single ResultSet.

Parameters
sql an SQL statement to execute. Typically a SELECT statement
Returns
  • a ResultSet containing the data produced by the SQL statement. Never null.
Throws
SQLException if an error occurs accessing the database or if the statement produces anything other than a single ResultSet.

public abstract int executeUpdate (String sql, int[] columnIndexes)

Since: API Level 1

Executes the supplied SQL statement. This method allows retrieval of auto generated keys specified by the supplied array of column indexes.

Parameters
sql an SQL statement to execute - an SQL INSERT, UPDATE, DELETE or a statement which returns nothing
columnIndexes an array of indexes of the columns in the inserted row which should be made available for retrieval via the getGeneratedKeys method.
Returns
  • the count of updated rows, or 0 for a statement that returns nothing.
Throws
SQLException if an error occurs accessing the database or if the statement produces a ResultSet.

public abstract int executeUpdate (String sql)

Since: API Level 1

Executes the supplied SQL statement. The statement may be an INSERT, UPDATE or DELETE statement or a statement which returns nothing.

Parameters
sql an SQL statement to execute - an SQL INSERT, UPDATE, DELETE or a statement which returns nothing
Returns
  • the count of updated rows, or 0 for a statement that returns nothing.
Throws
SQLException if an error occurs accessing the database or if the statement produces a ResultSet.

public abstract int executeUpdate (String sql, String[] columnNames)

Since: API Level 1

Executes the supplied SQL statement. This method allows retrieval of auto generated keys specified by the supplied array of column names.

Parameters
sql an SQL statement to execute - an SQL INSERT, UPDATE, DELETE or a statement which returns nothing
columnNames an array of column names in the inserted row which should be made available for retrieval via the getGeneratedKeys method.
Returns
  • the count of updated rows, or 0 for a statement that returns nothing.
Throws
SQLException if an error occurs accessing the database or if the statement produces a ResultSet.

public abstract int executeUpdate (String sql, int autoGeneratedKeys)

Since: API Level 1

Executes the supplied SQL statement. This method allows control of whether auto-generated Keys should be made available for retrieval.

Parameters
sql an SQL statement to execute - an SQL INSERT, UPDATE, DELETE or a statement which does not return anything.
autoGeneratedKeys a flag that indicates whether to allow retrieval of auto generated keys. Parameter must be one of Statement.RETURN_GENERATED_KEYS or Statement.NO_GENERATED_KEYS
Returns
  • the number of updated rows, or 0 if the statement returns nothing.
Throws
SQLException if an error occurs accessing the database or if the statement produces a ResultSet.

public abstract Connection getConnection ()

Since: API Level 1

Gets the Connection object which created this statement.

Returns
  • the Connection through which this statement is transmitted to the database.
Throws
SQLException if an error occurs accessing the database.

public abstract int getFetchDirection ()

Since: API Level 1

Gets the default direction for fetching rows for ResultSets generated from this statement.

Returns
  • the default fetch direction, one of:
    • ResultSet.FETCH_FORWARD
    • ResultSet.FETCH_REVERSE
    • ResultSet.FETCH_UNKNOWN
Throws
SQLException if an error occurs accessing the database.

public abstract int getFetchSize ()

Since: API Level 1

Gets the default number of rows for a fetch for the ResultSet objects returned from this statement.

Returns
  • the default fetch size for ResultSets produced by this statement.
Throws
SQLException if an error occurs accessing the database.

public abstract ResultSet getGeneratedKeys ()

Since: API Level 1

Returns auto generated keys created by executing this statement.

Returns
  • a ResultSet containing the auto generated keys - empty if no keys are generated by this statement.
Throws
SQLException if an error occurs accessing the database.

public abstract int getMaxFieldSize ()

Since: API Level 1

Gets the maximum number of bytes which can be returned as values from character and binary type columns in a ResultSet derived from this statement. This limit applies to BINARY, VARBINARY, LONGVARBINARY, CHAR, VARCHAR, and LONGVARCHAR types. Any data exceeding the maximum size is abandoned without announcement.

Returns
  • the current size limit, where 0 means that there is no limit.
Throws
SQLException if an error occurs accessing the database.

public abstract int getMaxRows ()

Since: API Level 1

Gets the maximum number of rows that a ResultSet can contain when produced from this statement. If the limit is exceeded, the excess rows are discarded silently.

Returns
  • the current row limit, where 0 means that there is no limit.
Throws
SQLException if an error occurs accessing the database.

public abstract boolean getMoreResults (int current)

Since: API Level 1

Moves to this statement's next result. Returns true if the next result is a ResultSet. Any current ResultSet objects previously obtained with getResultSet() are handled as indicated by a supplied Flag parameter.

Parameters
current a flag indicating what to do with existing ResultSets. This parameter must be one of Statement.CLOSE_ALL_RESULTS, Statement.CLOSE_CURRENT_RESULT or Statement.KEEP_CURRENT_RESULT.
Returns
  • true if the next result exists and is a ResultSet , false if the next result is not a ResultSet or if there are no more results. Note that if there is no more data, this method will return false and getUpdateCount will return -1.
Throws
SQLException if an error occurs accessing the database.

public abstract boolean getMoreResults ()

Since: API Level 1

Moves to this statement's next result. Returns true if it is a ResultSet. Any current ResultSet objects previously obtained with getResultSet() are closed implicitly.

Returns
  • true if the next result is a ResultSet, false if the next result is not a ResultSet or if there are no more results. Note that if there is no more data, this method will return false and getUpdateCount will return -1.
Throws
SQLException if an error occurs accessing the database.

public abstract int getQueryTimeout ()

Since: API Level 1

Gets the timeout value for the statement's execution time. The JDBC driver will wait up to this value for the execution to complete - after the limit is exceeded an SQL Exception is thrown.

Returns
  • the current query timeout value, where 0 indicates that there is no current timeout.
Throws
SQLException if an error occurs accessing the database.

public abstract ResultSet getResultSet ()

Since: API Level 1

Gets the current result. Should only be called once per result.

Returns
  • the ResultSet for the current result. null if the result is an update count or if there are no more results.
Throws
SQLException if an error occurs accessing the database.

public abstract int getResultSetConcurrency ()

Since: API Level 1

Gets the concurrency setting for ResultSet objects generated by this statement.

Returns
  • ResultSet.CONCUR_READ_ONLY or ResultSet.CONCUR_UPDATABLE.
Throws
SQLException if an error occurs accessing the database.

public abstract int getResultSetHoldability ()

Since: API Level 1

Gets the cursor hold setting for ResultSet objects generated by this statement.

Returns
  • ResultSet.HOLD_CURSORS_OVER_COMMIT or ResultSet.CLOSE_CURSORS_AT_COMMIT
Throws
SQLException if there is an error while accessing the database.

public abstract int getResultSetType ()

Since: API Level 1

Gets the ResultSet type setting for ResultSets derived from this statement.

Returns
  • ResultSet.TYPE_FORWARD_ONLY for a ResultSet where the cursor can only move forwards, ResultSet.TYPE_SCROLL_INSENSITIVE for a ResultSet which is scrollable but is not sensitive to changes made by others, ResultSet.TYPE_SCROLL_SENSITIVE for a ResultSet which is scrollable but is sensitive to changes made by others.
Throws
SQLException if there is an error accessing the database.

public abstract int getUpdateCount ()

Since: API Level 1

Gets an update count for the current result if it is not a ResultSet.

Returns
  • the current result as an update count. -1 if the current result is a ResultSet or if there are no more results.
Throws
SQLException if an error occurs accessing the database.

public abstract SQLWarning getWarnings ()

Since: API Level 1

Retrieves the first SQLWarning reported by calls on this statement. If there are multiple warnings, subsequent warnings are chained to the first one. The chain of warnings is cleared each time the statement is executed.

Warnings associated with reads from the ResultSet returned from executing the statement will be attached to the ResultSet, not the statement object.

Returns
  • an SQLWarning, null if there are no warnings
Throws
SQLException if an error occurs accessing the database.

public abstract void setCursorName (String name)

Since: API Level 1

Sets the SQL cursor name. This name is used by subsequent statement execute methods.

Cursor names must be unique within one Connection.

With the cursor name set, it can then be used in SQL positioned update or delete statements to determine the current row in a ResultSet generated from this statement. The positioned update or delete must be done with a different statement than this one.

Parameters
name the Cursor name as a string,
Throws
SQLException if an error occurs accessing the database.

public abstract void setEscapeProcessing (boolean enable)

Since: API Level 1

Sets Escape Processing mode.

If Escape Processing is on, the JDBC driver will do escape substitution on an SQL statement before sending it for execution. This does not apply to PreparedStatements since they are processed when created, before this method can be called.

Parameters
enable true to set escape processing mode on, false to turn it off.
Throws
SQLException if an error occurs accessing the database.

public abstract void setFetchDirection (int direction)

Since: API Level 1

Sets the fetch direction - a hint to the JDBC driver about the direction of processing of rows in ResultSets created by this statement. The default fetch direction is FETCH_FORWARD.

Parameters
direction which fetch direction to use. This parameter should be one of
  • ResultSet.FETCH_UNKNOWN
  • ResultSet.FETCH_FORWARD
  • ResultSet.FETCH_REVERSE
Throws
SQLException if there is an error while accessing the database or if the fetch direction is unrecognized.

public abstract void setFetchSize (int rows)

Since: API Level 1

Sets the fetch size. This is a hint to the JDBC driver about how many rows should be fetched from the database when more are required by application processing.

Parameters
rows the number of rows that should be fetched. 0 tells the driver to ignore the hint. Should be less than getMaxRows for this statement. Should not be negative.
Throws
SQLException if an error occurs accessing the database, or if the rows parameter is out of range.

public abstract void setMaxFieldSize (int max)

Since: API Level 1

Sets the maximum number of bytes for ResultSet columns that contain character or binary values. This applies to BINARY, VARBINARY, LONGVARBINARY, CHAR, VARCHAR, and LONGVARCHAR fields. Any data exceeding the maximum size is abandoned without announcement.

Parameters
max the maximum field size in bytes. 0 means "no limit".
Throws
SQLException if an error occurs accessing the database or the max value is < 0.

public abstract void setMaxRows (int max)

Since: API Level 1

Sets the maximum number of rows that any ResultSet can contain. If the number of rows exceeds this value, the additional rows are silently discarded.

Parameters
max the maximum number of rows. 0 means "no limit".
Throws
SQLException if an error occurs accessing the database or if max < 0.

public abstract void setQueryTimeout (int seconds)

Since: API Level 1

Sets the timeout, in seconds, for queries - how long the driver will allow for completion of a statement execution. If the timeout is exceeded, the query will throw an SQLException.

Parameters
seconds timeout in seconds. 0 means no timeout ("wait forever")
Throws
SQLException if an error occurs accessing the database or if seconds < 0.