All Downloads are FREE. Search and download functionalities are using the official Maven repository.

src-main.org.awakefw.commons.jdbc.abstracts.AbstractStatement Maven / Gradle / Ivy

Go to download

Awake FILE is a secure Open Source framework that allows to program very easily file uploads/downloads and RPC through http. File transfers include powerful features like file chunking and automatic recovery mechanism. Security has been taken into account from the design: server side allows to specify strong security rules in order to protect the files and to secure the RPC calls.

There is a newer version: 3.0
Show newest version
/*
 * This file is part of Awake FILE. 
 * Awake FILE: Easy file upload & download over HTTP with Java.                                    
 * Copyright (C) 2014,  KawanSoft SAS
 * (http://www.kawansoft.com). All rights reserved.                                
 *                                                                               
 * Awake FILE is free software; you can redistribute it and/or                 
 * modify it under the terms of the GNU Lesser General Public                    
 * License as published by the Free Software Foundation; either                  
 * version 2.1 of the License, or (at your option) any later version.            
 *                                                                               
 * Awake FILE is distributed in the hope that it will be useful,               
 * but WITHOUT ANY WARRANTY; without even the implied warranty of                
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU             
 * Lesser General Public License for more details.                               
 *                                                                               
 * You should have received a copy of the GNU Lesser General Public              
 * License along with this library; if not, write to the Free Software           
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  
 * 02110-1301  USA
 *
 * Any modifications to this file must keep this entire header
 * intact.
 */
package org.awakefw.commons.jdbc.abstracts;

import java.sql.BatchUpdateException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.SQLWarning;
import java.sql.Statement;

/**
 * Statement Wrapper. 
* Implements all the Statement methods. Usage is exactly the same as a * Statement. * */ public class AbstractStatement implements Statement { /** The Statement */ private Statement statement = null; /** Flag that says the caller is ConnectionHttp */ private boolean isConnectionHttp = false; /** * Set to true if the user has closed the connection by a explicit call to * close() */ private boolean isClosed = false; /** * Void Constructor * * Needed for HTTP usage because there is no real JDBC Connection */ public AbstractStatement() { isConnectionHttp = true; } /** * Constructor * * @param statement * actual statement in use to wrap */ public AbstractStatement(Statement statement) throws SQLException { this.statement = statement; } /** * Will throw a SQL Exception if calling method is not authorized **/ private void verifyCallAuthorization(String methodName) throws SQLException { if (isClosed) { throw new SQLException("Statement is closed."); } if (isConnectionHttp) { throw new SQLException( AbstractConnection.FEATURE_NOT_SUPPORTED_IN_THIS_VERSION + methodName); } } /** * Executes the given SQL statement, which returns a single * ResultSet object. * * @param sql * an SQL statement to be sent to the database, typically a * static SQL SELECT statement * @return a ResultSet object that contains the data produced * by the given query; never null * @exception SQLException * if a database access error occurs or the given SQL * statement produces anything other than a single * ResultSet object */ public ResultSet executeQuery(String sql) throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.executeQuery(sql); } /** * Executes the given SQL statement, which may be an INSERT, * UPDATE, or DELETE statement or an SQL statement * that returns nothing, such as an SQL DDL statement. * * @param sql * an SQL INSERT, UPDATE or * DELETE statement or an SQL statement that returns * nothing * @return either the row count for INSERT, UPDATE * or DELETE statements, or 0 for SQL * statements that return nothing * @exception SQLException * if a database access error occurs or the given SQL * statement produces a ResultSet object */ public int executeUpdate(String sql) throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.executeUpdate(sql); } /** * Releases this Statement object's database and JDBC resources * immediately instead of waiting for this to happen when it is * automatically closed. It is generally good practice to release resources * as soon as you are finished with them to avoid tying up database * resources. *

* Calling the method close on a Statement object * that is already closed has no effect. *

* Note: A Statement object is automatically closed when * it is garbage collected. When a Statement object is closed, * its current ResultSet object, if one exists, is also closed. * * @exception SQLException * if a database access error occurs */ public void close() throws SQLException { isClosed = true; } // ---------------------------------------------------------------------- /** * Retrieves the maximum number of bytes that can be returned for character * and binary column values in a ResultSet object produced by * this Statement object. This limit applies only to * BINARY, VARBINARY, LONGVARBINARY, * CHAR, VARCHAR, and LONGVARCHAR * columns. If the limit is exceeded, the excess data is silently discarded. * * @return the current column size limit for columns storing character and * binary values; zero means there is no limit * @exception SQLException * if a database access error occurs * @see #setMaxFieldSize */ public int getMaxFieldSize() throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.getMaxFieldSize(); } /** * Sets the limit for the maximum number of bytes in a * ResultSet column storing character or binary values to the * given number of bytes. This limit applies only to BINARY, * VARBINARY, LONGVARBINARY, CHAR, * VARCHAR, and LONGVARCHAR fields. If the limit * is exceeded, the excess data is silently discarded. For maximum * portability, use values greater than 256. * * @param max * the new column size limit in bytes; zero means there is no * limit * @exception SQLException * if a database access error occurs or the condition max >= * 0 is not satisfied * @see #getMaxFieldSize */ public void setMaxFieldSize(int max) throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); this.statement.setMaxFieldSize(max); } /** * Retrieves the maximum number of rows that a ResultSet object * produced by this Statement object can contain. If this limit * is exceeded, the excess rows are silently dropped. * * @return the current maximum number of rows for a ResultSet * object produced by this Statement object; zero means * there is no limit * @exception SQLException * if a database access error occurs * @see #setMaxRows */ public int getMaxRows() throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.getMaxRows(); } /** * Sets the limit for the maximum number of rows that any * ResultSet object can contain to the given number. If the * limit is exceeded, the excess rows are silently dropped. * * @param max * the new max rows limit; zero means there is no limit * @exception SQLException * if a database access error occurs or the condition max >= * 0 is not satisfied * @see #getMaxRows */ public void setMaxRows(int max) throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); this.statement.setMaxRows(max); } /** * Sets escape processing on or off. If escape scanning is on (the default), * the driver will do escape substitution before sending the SQL statement * to the database. * * Note: Since prepared statements have usually been parsed prior to making * this call, disabling escape processing for * PreparedStatements objects will have no effect. * * @param enable * true to enable escape processing; * false to disable it * @exception SQLException * if a database access error occurs */ public void setEscapeProcessing(boolean enable) throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); this.statement.setEscapeProcessing(enable); } /** * Retrieves the number of seconds the driver will wait for a * Statement object to execute. If the limit is exceeded, a * SQLException is thrown. * * @return the current query timeout limit in seconds; zero means there is * no limit * @exception SQLException * if a database access error occurs * @see #setQueryTimeout */ public int getQueryTimeout() throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.getQueryTimeout(); } /** * Sets the number of seconds the driver will wait for a * Statement object to execute to the given number of seconds. * If the limit is exceeded, an SQLException is thrown. * * @param seconds * the new query timeout limit in seconds; zero means there is no * limit * @exception SQLException * if a database access error occurs or the condition seconds * >= 0 is not satisfied * @see #getQueryTimeout */ public void setQueryTimeout(int seconds) throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); this.statement.setQueryTimeout(seconds); } /** * Cancels this Statement object if both the DBMS and driver * support aborting an SQL statement. This method can be used by one thread * to cancel a statement that is being executed by another thread. * * @exception SQLException * if a database access error occurs */ public void cancel() throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); this.statement.cancel(); } /** * Retrieves the first warning reported by calls on this * Statement object. Subsequent Statement object * warnings will be chained to this SQLWarning object. * *

* The warning chain is automatically cleared each time a statement is * (re)executed. This method may not be called on a closed * Statement object; doing so will cause an * SQLException to be thrown. * *

* Note: If you are processing a ResultSet object, any * warnings associated with reads on that ResultSet object will * be chained on it rather than on the Statement object that * produced it. * * @return the first SQLWarning object or null if * there are no warnings * @exception SQLException * if a database access error occurs or this method is called * on a closed statement */ public SQLWarning getWarnings() throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.getWarnings(); } /** * Clears all the warnings reported on this Statement object. * After a call to this method, the method getWarnings will * return null until a new warning is reported for this * Statement object. * * @exception SQLException * if a database access error occurs */ public void clearWarnings() throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); this.statement.clearWarnings(); } /** * Sets the SQL cursor name to the given String, which will be * used by subsequent Statement object execute * methods. This name can then be used in SQL positioned update or delete * statements to identify the current row in the ResultSet * object generated by this statement. If the database does not support * positioned update/delete, this method is a noop. To insure that a cursor * has the proper isolation level to support updates, the cursor's * SELECT statement should have the form * SELECT FOR UPDATE. If FOR UPDATE is not * present, positioned updates may fail. * *

* Note: By definition, the execution of positioned updates and * deletes must be done by a different Statement object than * the one that generated the ResultSet object being used for * positioning. Also, cursor names must be unique within a connection. * * @param name * the new cursor name, which must be unique within a connection * @exception SQLException * if a database access error occurs */ public void setCursorName(String name) throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); this.statement.setCursorName(name); } // ----------------------- Multiple Results -------------------------- /** * Executes the given SQL statement, which may return multiple results. In * some (uncommon) situations, a single SQL statement may return multiple * result sets and/or update counts. Normally you can ignore this unless you * are (1) executing a stored procedure that you know may return multiple * results or (2) you are dynamically executing an unknown SQL string. *

* The execute method executes an SQL statement and indicates * the form of the first result. You must then use the methods * getResultSet or getUpdateCount to retrieve the * result, and getMoreResults to move to any subsequent * result(s). * * @param sql * any SQL statement * @return true if the first result is a ResultSet * object; false if it is an update count or there are * no results * @exception SQLException * if a database access error occurs * @see #getResultSet * @see #getUpdateCount * @see #getMoreResults */ public boolean execute(String sql) throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.execute(sql); } /** * Retrieves the current result as a ResultSet object. This * method should be called only once per result. * * @return the current result as a ResultSet object or * null if the result is an update count or there are * no more results * @exception SQLException * if a database access error occurs * @see #execute */ public ResultSet getResultSet() throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.getResultSet(); } /** * Retrieves the current result as an update count; if the result is a * ResultSet object or there are no more results, -1 is * returned. This method should be called only once per result. * * @return the current result as an update count; -1 if the current result * is a ResultSet object or there are no more results * @exception SQLException * if a database access error occurs * @see #execute */ public int getUpdateCount() throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.getUpdateCount(); } /** * Moves to this Statement object's next result, returns * true if it is a ResultSet object, and * implicitly closes any current ResultSet object(s) obtained * with the method getResultSet. * *

* There are no more results when the following is true: * *

     *      (!getMoreResults() && (getUpdateCount() == -1)
     * 
* * @return true if the next result is a ResultSet * object; false if it is an update count or there are * no more results * @exception SQLException * if a database access error occurs * @see #execute */ public boolean getMoreResults() throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.getMoreResults(); } // --------------------------JDBC 2.0----------------------------- /** * Gives the driver a hint as to the direction in which rows will be * processed in ResultSet objects created using this * Statement object. The default value is * ResultSet.FETCH_FORWARD. *

* Note that this method sets the default fetch direction for result sets * generated by this Statement object. Each result set has its * own methods for getting and setting its own fetch direction. * * @param direction * the initial direction for processing rows * @exception SQLException * if a database access error occurs or the given direction * is not one of ResultSet.FETCH_FORWARD, * ResultSet.FETCH_REVERSE, or * ResultSet.FETCH_UNKNOWN * @since 1.2 * @see #getFetchDirection */ public void setFetchDirection(int direction) throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); this.statement.setFetchDirection(direction); } /** * Retrieves the direction for fetching rows from database tables that is * the default for result sets generated from this Statement * object. If this Statement object has not set a fetch * direction by calling the method setFetchDirection, the * return value is implementation-specific. * * @return the default fetch direction for result sets generated from this * Statement object * @exception SQLException * if a database access error occurs * @since 1.2 * @see #setFetchDirection */ public int getFetchDirection() throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.getFetchDirection(); } /** * 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, then the hint is ignored. The default value is * zero. * * @param rows * the number of rows to fetch * @exception SQLException * if a database access error occurs, or the condition 0 <= * rows <= this.getMaxRows() is not * satisfied. * @since 1.2 * @see #getFetchSize */ public void setFetchSize(int rows) throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); this.statement.setFetchSize(rows); } /** * Retrieves the number of result set rows that is the default fetch size * for ResultSet objects generated from this * Statement object. If this Statement object has * not set a fetch size by calling the method setFetchSize, the * return value is implementation-specific. * * @return the default fetch size for result sets generated from this * Statement object * @exception SQLException * if a database access error occurs * @since 1.2 * @see #setFetchSize */ public int getFetchSize() throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.getFetchSize(); } /** * Retrieves the result set concurrency for ResultSet objects * generated by this Statement object. * * @return either ResultSet.CONCUR_READ_ONLY or * ResultSet.CONCUR_UPDATABLE * @exception SQLException * if a database access error occurs * @since 1.2 */ public int getResultSetConcurrency() throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.getResultSetConcurrency(); } /** * Retrieves the result set type for ResultSet objects * generated by this Statement object. * * @return one of ResultSet.TYPE_FORWARD_ONLY, * ResultSet.TYPE_SCROLL_INSENSITIVE, or * ResultSet.TYPE_SCROLL_SENSITIVE * @exception SQLException * if a database access error occurs * @since 1.2 */ public int getResultSetType() throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.getResultSetType(); } /** * Adds the given SQL command to the current list of commmands for this * Statement object. The commands in this list can be executed * as a batch by calling the method executeBatch. *

* NOTE: This method is optional. * * @param sql * typically this is a static SQL INSERT or * UPDATE statement * @exception SQLException * if a database access error occurs, or the driver does not * support batch updates * @see #executeBatch * @since 1.2 */ public void addBatch(String sql) throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); this.statement.addBatch(sql); } /** * Empties this Statement object's current list of SQL * commands. *

* NOTE: This method is optional. * * @exception SQLException * if a database access error occurs or the driver does not * support batch updates * @see #addBatch * @since 1.2 */ public void clearBatch() throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); this.statement.clearBatch(); } /** * Submits a batch of commands to the database for execution and if all * commands execute successfully, returns an array of update counts. The * int elements of the array that is returned are ordered to * correspond to the commands in the batch, which are ordered according to * the order in which they were added to the batch. The elements in the * array returned by the method executeBatch may be one of the * following: *

    *
  1. A number greater than or equal to zero -- indicates that the command * was processed successfully and is an update count giving the number of * rows in the database that were affected by the command's execution *
  2. A value of SUCCESS_NO_INFO -- indicates that the command * was processed successfully but that the number of rows affected is * unknown *

    * If one of the commands in a batch update fails to execute properly, this * method throws a BatchUpdateException, and a JDBC driver may * or may not continue to process the remaining commands in the batch. * However, the driver's behavior must be consistent with a particular DBMS, * either always continuing to process commands or never continuing to * process commands. If the driver continues processing after a failure, the * array returned by the method * BatchUpdateException.getUpdateCounts will contain as many * elements as there are commands in the batch, and at least one of the * elements will be the following: *

    *

  3. A value of EXECUTE_FAILED -- indicates that the command * failed to execute successfully and occurs only if a driver continues to * process commands after a command fails *
*

* A driver is not required to implement this method. The possible * implementations and return values have been modified in the Java 2 SDK, * Standard Edition, version 1.3 to accommodate the option of continuing to * proccess commands in a batch update after a * BatchUpdateException obejct has been thrown. * * @return an array of update counts containing one element for each command * in the batch. The elements of the array are ordered according to * the order in which commands were added to the batch. * @exception SQLException * if a database access error occurs or the driver does not * support batch statements. Throws * {@link BatchUpdateException} (a subclass of * SQLException) if one of the commands sent to * the database fails to execute properly or attempts to * return a result set. * @since 1.3 */ public int[] executeBatch() throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.executeBatch(); } /** * Retrieves the Connection object that produced this * Statement object. * * @return the connection that produced this statement * @exception SQLException * if a database access error occurs * @since 1.2 */ public Connection getConnection() throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.getConnection(); } // --------------------------JDBC 3.0----------------------------- /** * The constant indicating that the current ResultSet object * should be closed when calling getMoreResults. * * @since 1.4 */ public int CLOSE_CURRENT_RESULT = 1; /** * The constant indicating that the current ResultSet object * should not be closed when calling getMoreResults. * * @since 1.4 */ public int KEEP_CURRENT_RESULT = 2; /** * The constant indicating that all ResultSet objects that have * previously been kept open should be closed when calling * getMoreResults. * * @since 1.4 */ public int CLOSE_ALL_RESULTS = 3; /** * The constant indicating that a batch statement executed successfully but * that no count of the number of rows it affected is available. * * @since 1.4 */ public int SUCCESS_NO_INFO = -2; /** * The constant indicating that an error occured while executing a batch * statement. * * @since 1.4 */ public int EXECUTE_FAILED = -3; /** * The constant indicating that generated keys should be made available for * retrieval. * * @since 1.4 */ public int RETURN_GENERATED_KEYS = 1; /** * The constant indicating that generated keys should not be made available * for retrieval. * * @since 1.4 */ public int NO_GENERATED_KEYS = 2; /** * Moves to this Statement object's next result, deals with any * current ResultSet object(s) according to the instructions * specified by the given flag, and returns true if the next * result is a ResultSet object. * *

* There are no more results when the following is true: * *

     *      (!getMoreResults() && (getUpdateCount() == -1)
     * 
* * @param current * one of the following Statement constants * indicating what should happen to current * ResultSet objects obtained using the method * getResultSetCLOSE_CURRENT_RESULT, * KEEP_CURRENT_RESULT, or * CLOSE_ALL_RESULTS * @return true if the next result is a ResultSet * object; false if it is an update count or there are * no more results * @exception SQLException * if a database access error occurs * @since 1.4 * @see #execute */ public boolean getMoreResults(int current) throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.getMoreResults(current); } /** * Retrieves any auto-generated keys created as a result of executing this * Statement object. If this Statement object did * not generate any keys, an empty ResultSet object is * returned. * * @return a ResultSet object containing the auto-generated * key(s) generated by the execution of this Statement * object * @exception SQLException * if a database access error occurs * @since 1.4 */ public ResultSet getGeneratedKeys() throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.getGeneratedKeys(); } /** * Executes the given SQL statement and signals the driver with the given * flag about whether the auto-generated keys produced by this * Statement object should be made available for retrieval. * * @param sql * must be an SQL INSERT, UPDATE or * DELETE statement or an SQL statement that returns * nothing * @param autoGeneratedKeys * a flag indicating whether auto-generated keys should be made * available for retrieval; one of the following constants: * Statement.RETURN_GENERATED_KEYS * Statement.NO_GENERATED_KEYS * @return either the row count for INSERT, UPDATE * or DELETE statements, or 0 for SQL * statements that return nothing * @exception SQLException * if a database access error occurs, the given SQL statement * returns a ResultSet object, or the given * constant is not one of those allowed * @since 1.4 */ public int executeUpdate(String sql, int autoGeneratedKeys) throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.executeUpdate(sql, autoGeneratedKeys); } /** * Executes the given SQL statement and signals the driver that the * auto-generated keys indicated in the given array should be made available * for retrieval. The driver will ignore the array if the SQL statement is * not an INSERT statement. * * @param sql * an SQL INSERT, UPDATE or * DELETE statement or an SQL statement that returns * nothing, such as an SQL DDL statement * @param columnIndexes * an array of column indexes indicating the columns that should * be returned from the inserted row * @return either the row count for INSERT, UPDATE * , or DELETE statements, or 0 for SQL statements that * return nothing * @exception SQLException * if a database access error occurs or the SQL statement * returns a ResultSet object * @since 1.4 */ public int executeUpdate(String sql, int[] columnIndexes) throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.executeUpdate(sql, columnIndexes); } /** * Executes the given SQL statement and signals the driver that the * auto-generated keys indicated in the given array should be made available * for retrieval. The driver will ignore the array if the SQL statement is * not an INSERT statement. * * @param sql * an SQL INSERT, UPDATE or * DELETE statement or an SQL statement that returns * nothing * @param columnNames * an array of the names of the columns that should be returned * from the inserted row * @return either the row count for INSERT, UPDATE * , or DELETE statements, or 0 for SQL statements that * return nothing * @exception SQLException * if a database access error occurs * * @since 1.4 */ public int executeUpdate(String sql, String[] columnNames) throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.executeUpdate(sql, columnNames); } /** * Executes the given SQL statement, which may return multiple results, and * signals the driver that any auto-generated keys should be made available * for retrieval. The driver will ignore this signal if the SQL statement is * not an INSERT statement. *

* In some (uncommon) situations, a single SQL statement may return multiple * result sets and/or update counts. Normally you can ignore this unless you * are (1) executing a stored procedure that you know may return multiple * results or (2) you are dynamically executing an unknown SQL string. *

* The execute method executes an SQL statement and indicates * the form of the first result. You must then use the methods * getResultSet or getUpdateCount to retrieve the * result, and getMoreResults to move to any subsequent * result(s). * * @param sql * any SQL statement * @param autoGeneratedKeys * a constant indicating whether auto-generated keys should be * made available for retrieval using the method * getGeneratedKeys; one of the following constants: * Statement.RETURN_GENERATED_KEYS or * Statement.NO_GENERATED_KEYS * @return true if the first result is a ResultSet * object; false if it is an update count or there are * no results * @exception SQLException * if a database access error occurs * @see #getResultSet * @see #getUpdateCount * @see #getMoreResults * @see #getGeneratedKeys * * @since 1.4 */ public boolean execute(String sql, int autoGeneratedKeys) throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.execute(sql, autoGeneratedKeys); } /** * Executes the given SQL statement, which may return multiple results, and * signals the driver that the auto-generated keys indicated in the given * array should be made available for retrieval. This array contains the * indexes of the columns in the target table that contain the * auto-generated keys that should be made available. The driver will ignore * the array if the given SQL statement is not an INSERT * statement. *

* Under some (uncommon) situations, a single SQL statement may return * multiple result sets and/or update counts. Normally you can ignore this * unless you are (1) executing a stored procedure that you know may return * multiple results or (2) you are dynamically executing an unknown SQL * string. *

* The execute method executes an SQL statement and indicates * the form of the first result. You must then use the methods * getResultSet or getUpdateCount to retrieve the * result, and getMoreResults to move to any subsequent * result(s). * * @param sql * any SQL statement * @param columnIndexes * an array of the indexes of the columns in the inserted row * that should be made available for retrieval by a call to the * method getGeneratedKeys * @return true if the first result is a ResultSet * object; false if it is an update count or there are * no results * @exception SQLException * if a database access error occurs * @see #getResultSet * @see #getUpdateCount * @see #getMoreResults * * @since 1.4 */ public boolean execute(String sql, int[] columnIndexes) throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.execute(sql, columnIndexes); } /** * Executes the given SQL statement, which may return multiple results, and * signals the driver that the auto-generated keys indicated in the given * array should be made available for retrieval. This array contains the * names of the columns in the target table that contain the auto-generated * keys that should be made available. The driver will ignore the array if * the given SQL statement is not an INSERT statement. *

* In some (uncommon) situations, a single SQL statement may return multiple * result sets and/or update counts. Normally you can ignore this unless you * are (1) executing a stored procedure that you know may return multiple * results or (2) you are dynamically executing an unknown SQL string. *

* The execute method executes an SQL statement and indicates * the form of the first result. You must then use the methods * getResultSet or getUpdateCount to retrieve the * result, and getMoreResults to move to any subsequent * result(s). * * @param sql * any SQL statement * @param columnNames * an array of the names of the columns in the inserted row that * should be made available for retrieval by a call to the method * getGeneratedKeys * @return true if the next result is a ResultSet * object; false if it is an update count or there are * no more results * @exception SQLException * if a database access error occurs * @see #getResultSet * @see #getUpdateCount * @see #getMoreResults * @see #getGeneratedKeys * * @since 1.4 */ public boolean execute(String sql, String[] columnNames) throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.execute(sql, columnNames); } /** * Retrieves the result set holdability for ResultSet objects * generated by this Statement object. * * @return either ResultSet.HOLD_CURSORS_OVER_COMMIT or * ResultSet.CLOSE_CURSORS_AT_COMMIT * @exception SQLException * if a database access error occurs * * @since 1.4 */ public int getResultSetHoldability() throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return this.statement.getResultSetHoldability(); } /** * @return * @throws SQLException * @see java.sql.Statement#isClosed() */ public boolean isClosed() throws SQLException { return isClosed; } /** * @return * @throws SQLException * @see java.sql.Statement#isPoolable() */ public boolean isPoolable() throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return statement.isPoolable(); } /** * @param arg0 * @return * @throws SQLException * @see java.sql.Wrapper#isWrapperFor(java.lang.Class) */ public boolean isWrapperFor(Class arg0) throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return statement.isWrapperFor(arg0); } /** * @param arg0 * @throws SQLException * @see java.sql.Statement#setPoolable(boolean) */ public void setPoolable(boolean arg0) throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); statement.setPoolable(arg0); } /** * @param * @param arg0 * @return * @throws SQLException * @see java.sql.Wrapper#unwrap(java.lang.Class) */ public T unwrap(Class arg0) throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return statement.unwrap(arg0); } /////////////////////////////////////////////////////////// // JAVA 7 METHOD EMULATION // /////////////////////////////////////////////////////////// //@Override do not not override for Java 6 compatibility public void closeOnCompletion() throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); } //@Override do not not override for Java 6 compatibility public boolean isCloseOnCompletion() throws SQLException { String methodName = new Object() { }.getClass().getEnclosingMethod().getName(); verifyCallAuthorization(methodName); return false; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy