| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package java.sql; |
| |
| /** |
| * Interface used for executing static SQL statements to retrieve query results. |
| * The resulting table rows are returned as {@code ResultSet}s. For any given |
| * {@code Statement} object, only one {@code ResultSet} can be opened at one |
| * time. A call to any of the execution methods of {@code Statement} will cause |
| * any previously created {@code ResultSet} object for that {@code Statement} to |
| * be closed implicitly. |
| * <p> |
| * To have multiple {@code ResultSet} objects opened concurrently, multiple |
| * {@code Statement} objects must be created and then executed. |
| * <p> |
| * To obtain such an executable statement one needs to invoke {@code |
| * Connection#createStatement}. |
| * |
| * @see ResultSet |
| * @see Connection#createStatement |
| */ |
| public interface Statement extends Wrapper, AutoCloseable { |
| |
| /** |
| * Passing this constant to {@link #getMoreResults} implies that all {@code |
| * ResultSet} objects previously kept open should be closed. |
| */ |
| public static final int CLOSE_ALL_RESULTS = 3; |
| |
| /** |
| * Passing this constant to {@link #getMoreResults} implies that the current |
| * {@code ResultSet} object should be closed. |
| */ |
| public static final int CLOSE_CURRENT_RESULT = 1; |
| |
| /** |
| * Indicates that an error was encountered during execution of a batch |
| * statement. |
| */ |
| public static final int EXECUTE_FAILED = -3; |
| |
| /** |
| * Passing this constant to <i>getMoreResults</i> implies that the current |
| * {@code ResultSet} object should not be closed. |
| */ |
| public static final int KEEP_CURRENT_RESULT = 2; |
| |
| /** |
| * Indicates that generated keys should not be accessible for retrieval. |
| */ |
| public static final int NO_GENERATED_KEYS = 2; |
| |
| /** |
| * Indicates that generated keys should be accessible for retrieval. |
| */ |
| public static final int RETURN_GENERATED_KEYS = 1; |
| |
| /** |
| * Indicates that a batch statement was executed with a successful result, |
| * but a count of the number of rows it affected is unavailable. |
| */ |
| public static final int SUCCESS_NO_INFO = -2; |
| |
| /** |
| * Adds a specified SQL command to the list of commands for this {@code |
| * Statement}. |
| * <p> |
| * The list of commands is executed by invoking the {@code executeBatch} |
| * method. |
| * |
| * @param sql |
| * the SQL command as a String. Typically an {@code INSERT} or |
| * {@code UPDATE} statement. |
| * @throws SQLException |
| * if an error occurs accessing the database or the database |
| * does not support batch updates. |
| */ |
| public void addBatch(String sql) throws SQLException; |
| |
| /** |
| * 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 void cancel() throws SQLException; |
| |
| /** |
| * 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 void clearBatch() throws SQLException; |
| |
| /** |
| * Clears all {@code SQLWarnings} from this statement. |
| * |
| * @throws SQLException |
| * if an error occurs accessing the database. |
| */ |
| public void clearWarnings() throws SQLException; |
| |
| /** |
| * Releases this statement's database and JDBC driver resources. |
| * <p> |
| * Using this method to release these resources as soon as possible is |
| * strongly recommended. |
| * <p> |
| * 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 void close() throws SQLException; |
| |
| /** |
| * Executes a supplied SQL statement. This may return multiple {@code |
| * ResultSet}s. |
| * <p> |
| * Use the {@code getResultSet} or {@code getUpdateCount} methods to get the |
| * first result and {@code getMoreResults} to get any subsequent results. |
| * |
| * @param sql |
| * the SQL statement to execute |
| * @return {@code true} if the first result is a {@code ResultSet}, {@code |
| * 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 boolean execute(String sql) throws SQLException; |
| |
| /** |
| * Executes a supplied SQL statement. This may return multiple {@code |
| * ResultSet}s. This method allows control of whether auto-generated Keys |
| * should be made available for retrieval, if the SQL statement is an |
| * {@code INSERT} statement. |
| * <p> |
| * Use the {@code getResultSet} or {@code getUpdateCount} methods to get the |
| * first result and {@code getMoreResults} to get any subsequent results. |
| * |
| * @param sql |
| * the SQL statement to execute. |
| * @param autoGeneratedKeys |
| * a flag indicating whether to make auto generated keys |
| * available for retrieval. This parameter must be one of {@code |
| * Statement.NO_GENERATED_KEYS} or {@code |
| * Statement.RETURN_GENERATED_KEYS}. |
| * @return {@code true} if results exists and the first result is a {@code |
| * ResultSet}, {@code 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 boolean execute(String sql, int autoGeneratedKeys) |
| throws SQLException; |
| |
| /** |
| * Executes the supplied SQL statement. This may return multiple {@code |
| * ResultSet}s. This method allows retrieval of auto generated keys |
| * specified by the supplied array of column indexes, if the SQL statement |
| * is an {@code INSERT} statement. |
| * <p> |
| * Use the {@code getResultSet} or {@code getUpdateCount} methods to get the |
| * first result and {@code getMoreResults} to get any subsequent results. |
| * |
| * @param sql |
| * the SQL statement to execute. |
| * @param columnIndexes |
| * an array of indexes of the columns in the inserted row which |
| * should be made available for retrieval via the {@code |
| * getGeneratedKeys} method. |
| * @return {@code true} if the first result is a {@code ResultSet}, {@code |
| * 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 boolean execute(String sql, int[] columnIndexes) throws SQLException; |
| |
| /** |
| * Executes the supplied SQL statement. This may return multiple {@code |
| * ResultSet}s. This method allows retrieval of auto generated keys |
| * specified by the supplied array of column indexes, if the SQL statement |
| * is an {@code INSERT} statement. |
| * <p> |
| * Use the {@code getResultSet} or {@code getUpdateCount} methods to get the |
| * first result and {@code getMoreResults} to get any subsequent results. |
| * |
| * @param sql |
| * the SQL statement to execute. |
| * @param columnNames |
| * an array of column names in the inserted row which should be |
| * made available for retrieval via the {@code getGeneratedKeys} |
| * method. |
| * @return {@code true} if the first result is a {@code ResultSet}, {@code |
| * 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 boolean execute(String sql, String[] columnNames) |
| throws SQLException; |
| |
| /** |
| * Submits a batch of SQL commands to the database. Returns an array of |
| * update counts, if all the commands execute successfully. |
| * <p> |
| * If one of the commands in the batch fails, this method can throw a |
| * {@link 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 {@code EXECUTE_FAILED} value. |
| * |
| * @return 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. |
| * <p> |
| * <ol> |
| * <li>If the value of an element is ≥ 0, the corresponding |
| * command completed successfully and the value is the <i>update |
| * count</i> (the number of rows in the database affected by the |
| * command) for that command.</li> |
| * <li>If the value is {@code SUCCESS_NO_INFO}, the command |
| * completed successfully but the number of rows affected is |
| * unknown. |
| * <li> |
| * <li>If the value is {@code EXECUTE_FAILED}, the command failed. |
| * </ol> |
| * @throws SQLException |
| * if an error occurs accessing the database. |
| */ |
| public int[] executeBatch() throws SQLException; |
| |
| /** |
| * Executes a supplied SQL statement. Returns a single {@code ResultSet}. |
| * |
| * @param sql |
| * an SQL statement to execute. Typically a {@code SELECT} |
| * statement |
| * @return a {@code 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 {@code ResultSet}. |
| */ |
| public ResultSet executeQuery(String sql) throws SQLException; |
| |
| /** |
| * Executes the supplied SQL statement. The statement may be an {@code |
| * INSERT}, {@code UPDATE} or {@code DELETE} statement or a statement which |
| * returns nothing. |
| * |
| * @param sql |
| * an SQL statement to execute - an SQL {@code INSERT}, {@code |
| * UPDATE}, {@code DELETE} or a statement which returns nothing |
| * @return 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 {@code ResultSet}. |
| */ |
| public int executeUpdate(String sql) throws SQLException; |
| |
| /** |
| * Executes the supplied SQL statement. This method allows control of |
| * whether auto-generated Keys should be made available for retrieval. |
| * |
| * @param sql |
| * an SQL statement to execute - an SQL {@code INSERT}, {@code |
| * UPDATE}, {@code DELETE} or a statement which does not return |
| * anything. |
| * @param autoGeneratedKeys |
| * a flag that indicates whether to allow retrieval of auto |
| * generated keys. Parameter must be one of {@code |
| * Statement.RETURN_GENERATED_KEYS} or {@code |
| * Statement.NO_GENERATED_KEYS} |
| * @return 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 {@code ResultSet}. |
| */ |
| public int executeUpdate(String sql, int autoGeneratedKeys) |
| throws SQLException; |
| |
| /** |
| * Executes the supplied SQL statement. This method allows retrieval of auto |
| * generated keys specified by the supplied array of column indexes. |
| * |
| * @param sql |
| * an SQL statement to execute - an SQL {@code INSERT}, {@code |
| * UPDATE}, {@code DELETE} or a statement which returns nothing |
| * @param columnIndexes |
| * an array of indexes of the columns in the inserted row which |
| * should be made available for retrieval via the {@code |
| * getGeneratedKeys} method. |
| * @return 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 {@code ResultSet}. |
| */ |
| public int executeUpdate(String sql, int[] columnIndexes) |
| throws SQLException; |
| |
| /** |
| * Executes the supplied SQL statement. This method allows retrieval of auto |
| * generated keys specified by the supplied array of column names. |
| * |
| * @param sql |
| * an SQL statement to execute - an SQL {@code INSERT}, {@code |
| * UPDATE}, {@code DELETE} or a statement which returns nothing |
| * @param columnNames |
| * an array of column names in the inserted row which should be |
| * made available for retrieval via the {@code getGeneratedKeys} |
| * method. |
| * @return 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 {@code ResultSet}. |
| */ |
| public int executeUpdate(String sql, String[] columnNames) |
| throws SQLException; |
| |
| /** |
| * Gets the {@code Connection} object which created this statement. |
| * |
| * @return the {@code Connection} through which this statement is |
| * transmitted to the database. |
| * @throws SQLException |
| * if an error occurs accessing the database. |
| */ |
| public Connection getConnection() throws SQLException; |
| |
| /** |
| * Gets the default direction for fetching rows for {@code ResultSet}s |
| * generated from this statement. |
| * |
| * @return the default fetch direction, one of: |
| * <ul> |
| * <li>ResultSet.FETCH_FORWARD</li> <li>ResultSet.FETCH_REVERSE</li> |
| * <li>ResultSet.FETCH_UNKNOWN</li> |
| * </ul> |
| * @throws SQLException |
| * if an error occurs accessing the database. |
| */ |
| public int getFetchDirection() throws SQLException; |
| |
| /** |
| * Gets the default number of rows for a fetch for the {@code ResultSet} |
| * objects returned from this statement. |
| * |
| * @return the default fetch size for {@code ResultSet}s produced by this |
| * statement. |
| * @throws SQLException |
| * if an error occurs accessing the database. |
| */ |
| public int getFetchSize() throws SQLException; |
| |
| /** |
| * Returns auto generated keys created by executing this statement. |
| * |
| * @return a {@code 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 ResultSet getGeneratedKeys() throws SQLException; |
| |
| /** |
| * Gets the maximum number of bytes which can be returned as values from |
| * character and binary type columns in a {@code ResultSet} derived from this |
| * statement. This limit applies to {@code BINARY}, {@code VARBINARY}, |
| * {@code LONGVARBINARY}, {@code CHAR}, {@code VARCHAR}, and {@code |
| * LONGVARCHAR} types. Any data exceeding the maximum size is abandoned |
| * without announcement. |
| * |
| * @return the current size limit, where {@code 0} means that there is no |
| * limit. |
| * @throws SQLException |
| * if an error occurs accessing the database. |
| */ |
| public int getMaxFieldSize() throws SQLException; |
| |
| /** |
| * Gets the maximum number of rows that a {@code ResultSet} can contain when |
| * produced from this statement. If the limit is exceeded, the excess rows |
| * are discarded silently. |
| * |
| * @return the current row limit, where {@code 0} means that there is no |
| * limit. |
| * @throws SQLException |
| * if an error occurs accessing the database. |
| */ |
| public int getMaxRows() throws SQLException; |
| |
| /** |
| * Moves to this statement's next result. Returns {@code true} if it is a |
| * {@code ResultSet}. Any current {@code ResultSet} objects previously |
| * obtained with {@code getResultSet()} are closed implicitly. |
| * |
| * @return {@code true} if the next result is a {@code ResultSet}, {@code |
| * false} if the next result is not a {@code ResultSet} or if there |
| * are no more results. Note that if there is no more data, this |
| * method will return {@code false} and {@code getUpdateCount} will |
| * return -1. |
| * @throws SQLException |
| * if an error occurs accessing the database. |
| */ |
| public boolean getMoreResults() throws SQLException; |
| |
| /** |
| * Moves to this statement's next result. Returns {@code true} if the next |
| * result is a {@code ResultSet}. Any current {@code ResultSet} objects |
| * previously obtained with {@code getResultSet()} are handled as indicated |
| * by a supplied Flag parameter. |
| * |
| * @param current |
| * a flag indicating what to do with existing {@code ResultSet}s. |
| * This parameter must be one of {@code |
| * Statement.CLOSE_ALL_RESULTS}, {@code |
| * Statement.CLOSE_CURRENT_RESULT} or {@code |
| * Statement.KEEP_CURRENT_RESULT}. |
| * @return {@code true} if the next result exists and is a {@code ResultSet} |
| * , {@code false} if the next result is not a {@code ResultSet} or |
| * if there are no more results. Note that if there is no more data, |
| * this method will return {@code false} and {@code getUpdateCount} |
| * will return -1. |
| * @throws SQLException |
| * if an error occurs accessing the database. |
| */ |
| public boolean getMoreResults(int current) throws SQLException; |
| |
| /** |
| * 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 {@code Exception} is thrown. |
| * |
| * @return the current query timeout value, where {@code 0} indicates that |
| * there is no current timeout. |
| * @throws SQLException |
| * if an error occurs accessing the database. |
| */ |
| public int getQueryTimeout() throws SQLException; |
| |
| /** |
| * Gets the current result. Should only be called once per result. |
| * |
| * @return the {@code ResultSet} for the current result. {@code 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 ResultSet getResultSet() throws SQLException; |
| |
| /** |
| * Gets the concurrency setting for {@code ResultSet} objects generated by |
| * this statement. |
| * |
| * @return {@code ResultSet.CONCUR_READ_ONLY} or {@code |
| * ResultSet.CONCUR_UPDATABLE}. |
| * @throws SQLException |
| * if an error occurs accessing the database. |
| */ |
| public int getResultSetConcurrency() throws SQLException; |
| |
| /** |
| * Gets the cursor hold setting for {@code ResultSet} objects generated by |
| * this statement. |
| * |
| * @return {@code ResultSet.HOLD_CURSORS_OVER_COMMIT} or {@code |
| * ResultSet.CLOSE_CURSORS_AT_COMMIT} |
| * @throws SQLException |
| * if there is an error while accessing the database. |
| */ |
| public int getResultSetHoldability() throws SQLException; |
| |
| /** |
| * Gets the {@code ResultSet} type setting for {@code ResultSet}s derived |
| * from this statement. |
| * |
| * @return {@code ResultSet.TYPE_FORWARD_ONLY} for a {@code ResultSet} where |
| * the cursor can only move forwards, {@code |
| * ResultSet.TYPE_SCROLL_INSENSITIVE} for a {@code ResultSet} which |
| * is scrollable but is not sensitive to changes made by others, |
| * {@code ResultSet.TYPE_SCROLL_SENSITIVE} for a {@code ResultSet} |
| * which is scrollable but is sensitive to changes made by others. |
| * @throws SQLException |
| * if there is an error accessing the database. |
| */ |
| public int getResultSetType() throws SQLException; |
| |
| /** |
| * Gets an update count for the current result if it is not a {@code |
| * ResultSet}. |
| * |
| * @return the current result as an update count. {@code -1} if the current |
| * result is a {@code ResultSet} or if there are no more results. |
| * @throws SQLException |
| * if an error occurs accessing the database. |
| */ |
| public int getUpdateCount() throws SQLException; |
| |
| /** |
| * Retrieves the first {@code 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. |
| * <p> |
| * Warnings associated with reads from the {@code ResultSet} returned from |
| * executing the statement will be attached to the {@code ResultSet}, not the |
| * statement object. |
| * |
| * @return an SQLWarning, null if there are no warnings |
| * @throws SQLException |
| * if an error occurs accessing the database. |
| */ |
| public SQLWarning getWarnings() throws SQLException; |
| |
| /** |
| * Sets the SQL cursor name. This name is used by subsequent statement |
| * execute methods. |
| * <p> |
| * Cursor names must be unique within one Connection. |
| * <p> |
| * With the cursor name set, it can then be used in SQL positioned |
| * update or delete statements to determine the current row in a {@code |
| * ResultSet} generated from this statement. The positioned update or delete |
| * must be done with a different statement than this one. |
| * |
| * @param name |
| * the Cursor name as a string, |
| * @throws SQLException |
| * if an error occurs accessing the database. |
| */ |
| public void setCursorName(String name) throws SQLException; |
| |
| /** |
| * Sets Escape Processing mode. |
| * <p> |
| * 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 {@link PreparedStatement}s since they are processed when created, |
| * before this method can be called. |
| * |
| * @param enable |
| * {@code true} to set escape processing mode <i>on</i>, {@code |
| * false} to turn it <i>off</i>. |
| * @throws SQLException |
| * if an error occurs accessing the database. |
| */ |
| public void setEscapeProcessing(boolean enable) throws SQLException; |
| |
| /** |
| * Sets the fetch direction - a hint to the JDBC driver about the direction |
| * of processing of rows in {@code ResultSet}s created by this statement. |
| * The default fetch direction is {@code FETCH_FORWARD}. |
| * |
| * @param direction |
| * which fetch direction to use. This parameter should be one of |
| * <ul> |
| * <li>{@code ResultSet.FETCH_UNKNOWN}</li> |
| * <li>{@code ResultSet.FETCH_FORWARD}</li> |
| * <li>{@code ResultSet.FETCH_REVERSE}</li> |
| * </ul> |
| * @throws SQLException |
| * if there is an error while accessing the database or if the |
| * fetch direction is unrecognized. |
| */ |
| public void setFetchDirection(int direction) throws SQLException; |
| |
| /** |
| * 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. |
| * |
| * @param rows |
| * the number of rows that should be fetched. {@code 0} tells the driver |
| * to ignore the hint. Should be less than {@code 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 void setFetchSize(int rows) throws SQLException; |
| |
| /** |
| * Sets the maximum number of bytes for {@code ResultSet} columns that |
| * contain character or binary values. This applies to {@code BINARY}, |
| * {@code VARBINARY}, {@code LONGVARBINARY}, {@code CHAR}, {@code VARCHAR}, |
| * and {@code LONGVARCHAR} fields. Any data exceeding the maximum size is |
| * abandoned without announcement. |
| * |
| * @param max |
| * the maximum field size in bytes. {@code 0} means "no limit". |
| * @throws SQLException |
| * if an error occurs accessing the database or the {@code max} |
| * value is < {@code 0}. |
| */ |
| public void setMaxFieldSize(int max) throws SQLException; |
| |
| /** |
| * Sets the maximum number of rows that any {@code ResultSet} can contain. |
| * If the number of rows exceeds this value, the additional rows are |
| * silently discarded. |
| * |
| * @param max |
| * the maximum number of rows. {@code 0} means "no limit". |
| * @throws SQLException |
| * if an error occurs accessing the database or if max < {@code |
| * 0}. |
| */ |
| public void setMaxRows(int max) throws SQLException; |
| |
| /** |
| * 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 {@code SQLException}. |
| * |
| * @param seconds |
| * timeout in seconds. 0 means no timeout ("wait forever") |
| * @throws SQLException |
| * if an error occurs accessing the database or if seconds < |
| * {@code 0}. |
| */ |
| public void setQueryTimeout(int seconds) throws SQLException; |
| |
| /** |
| * Returns true if this statement has been closed, false otherwise. |
| */ |
| public boolean isClosed() throws SQLException; |
| |
| /** |
| * Hints whether this statement should be pooled. Defaults to false for {@code Statement}, |
| * but true for {@code CallableStatement} and {@code PreparedStatement}. Pool manager |
| * implementations may or may not honor this hint. |
| */ |
| public void setPoolable(boolean poolable) throws SQLException; |
| |
| /** |
| * Returns true if this statement is poolable, false otherwise. |
| */ |
| public boolean isPoolable() throws SQLException; |
| } |