Class ServerPreparedStatement

All Implemented Interfaces:
AutoCloseable, PreparedStatement, Statement, Wrapper
Direct Known Subclasses:
BaseCallableStatement

public class ServerPreparedStatement extends BasePreparedStatement
Server prepare statement. command will generate COM_STMT_PREPARE + COM_STMT_EXECUTE (+ COM_STMT_CLOSE)
  • Field Details

    • PREPARABLE_STATEMENT_PATTERN

      private static final Pattern PREPARABLE_STATEMENT_PATTERN
  • Constructor Details

    • ServerPreparedStatement

      public ServerPreparedStatement(String sql, Connection con, ClosableLock lock, int autoGeneratedKeys, int resultSetType, int resultSetConcurrency, int defaultFetchSize) throws SQLException
      Server prepare statement constructor
      Parameters:
      sql - command
      con - connection
      lock - thread safe lock
      autoGeneratedKeys - must command return automatically generated keys
      resultSetType - resultset type
      resultSetConcurrency - resultset concurrency
      defaultFetchSize - default fetch size
      Throws:
      SQLException - if prepare fails
  • Method Details

    • executeInternal

      protected void executeInternal() throws SQLException
      Execute command with parameters
      Throws:
      SQLException - if any error occurs
    • executePipeline

      private void executePipeline(String cmd) throws SQLException
      Send COM_STMT_PREPARE + COM_STMT_EXECUTE, then read for the 2 answers
      Parameters:
      cmd - command
      Throws:
      SQLException - if IOException / Command error
    • executeStandard

      private void executeStandard(String cmd) throws SQLException
      Throws:
      SQLException
    • executeInternalPreparedBatch

      protected boolean executeInternalPreparedBatch() throws SQLException
      Specified by:
      executeInternalPreparedBatch in class BasePreparedStatement
      Throws:
      SQLException
    • executeBatchPipeline

      private void executeBatchPipeline(String cmd) throws SQLException
      Send COM_STMT_PREPARE + X * COM_STMT_EXECUTE, then read for the all answers
      Parameters:
      cmd - command
      Throws:
      SQLException - if Command error
    • executeBunch

      private List<Completion> executeBunch(String cmd, int index, int maxCmd) throws SQLException
      Throws:
      SQLException
    • executeBunchPrepare

      private List<Completion> executeBunchPrepare(String cmd, int index, int maxCmd) throws SQLException
      Throws:
      SQLException
    • executeBatchStandard

      private void executeBatchStandard(String cmd) throws SQLException
      Send COM_STMT_PREPARE + read answer, then Send a COM_STMT_EXECUTE + read answer * n time
      Parameters:
      cmd - command
      Throws:
      SQLException - if IOException / Command error
    • execute

      public boolean execute() throws SQLException
      Executes the SQL statement in this PreparedStatement object, which may be any kind of SQL statement. Some prepared statements return multiple results; the execute method handles these complex statements as well as the simpler form of statements handled by the methods executeQuery and executeUpdate.

      The execute method returns a boolean to indicate the form of the first result. You must call either the method getResultSet or getUpdateCount to retrieve the result; you must call getMoreResults to move to any subsequent result(s).

      Specified by:
      execute in interface PreparedStatement
      Specified by:
      execute in class BasePreparedStatement
      Returns:
      true if the first result is a ResultSet object; false if the first result is an update count or there is no result
      Throws:
      SQLException - if a database access error occurs; this method is called on a closed PreparedStatement or an argument is supplied to this method
      SQLTimeoutException - when the driver has determined that the timeout value that was specified by the setQueryTimeout method has been exceeded and has at least attempted to cancel the currently running Statement
      See Also:
    • setMaxRows

      public void setMaxRows(int max) throws SQLException
      Description copied from class: Statement
      Sets the limit for the maximum number of rows that any ResultSet object generated by this Statement object can contain to the given number. If the limit is exceeded, the excess rows are silently dropped.
      Specified by:
      setMaxRows in interface Statement
      Overrides:
      setMaxRows in class Statement
      Parameters:
      max - the new max rows limit; zero means there is no limit
      Throws:
      SQLException - if a database access error occurs, this method is called on a closed Statement or the condition max >= 0 is not satisfied
      See Also:
    • setLargeMaxRows

      public void setLargeMaxRows(long max) throws SQLException
      Description copied from class: Statement
      Sets the limit for the maximum number of rows that any ResultSet object generated by this Statement object can contain to the given number. If the limit is exceeded, the excess rows are silently dropped.
      Specified by:
      setLargeMaxRows in interface Statement
      Overrides:
      setLargeMaxRows in class Statement
      Parameters:
      max - the new max rows limit; zero means there is no limit
      Throws:
      SQLException - if the condition max >= 0 is not satisfied
    • setQueryTimeout

      public void setQueryTimeout(int seconds) throws SQLException
      Description copied from class: Statement
      Sets the number of seconds the driver will wait for a Statement object to execute to the given number of seconds. By default, there is no limit on the amount of time allowed for a running statement to complete. If the limit is exceeded, an SQLTimeoutException is thrown. A JDBC driver must apply this limit to the execute, executeQuery and executeUpdate methods.

      Note: JDBC driver implementations may also apply this limit to ResultSet methods (consult your driver vendor documentation for details).

      Note: In the case of Statement batching, it is implementation defined whether the time-out is applied to individual SQL commands added via the addBatch method or to the entire batch of SQL commands invoked by the executeBatch method (consult your driver vendor documentation for details).

      Specified by:
      setQueryTimeout in interface Statement
      Overrides:
      setQueryTimeout in class Statement
      Parameters:
      seconds - the new query timeout limit in seconds; zero means there is no limit
      Throws:
      SQLException - if a database access error occurs, this method is called on a closed Statement or the condition seconds >= 0 is not satisfied
      See Also:
    • executeQuery

      public ResultSet executeQuery() throws SQLException
      Executes the SQL query in this PreparedStatement object and returns the ResultSet object generated by the query.
      Specified by:
      executeQuery in interface PreparedStatement
      Specified by:
      executeQuery in class BasePreparedStatement
      Returns:
      a ResultSet object that contains the data produced by the query; never null
      Throws:
      SQLException - if a database access error occurs; this method is called on a closed PreparedStatement or the SQL statement does not return a ResultSet object
      SQLTimeoutException - when the driver has determined that the timeout value that was specified by the setQueryTimeout method has been exceeded and has at least attempted to cancel the currently running Statement
    • executeUpdate

      public int executeUpdate() throws SQLException
      Executes the SQL statement in this PreparedStatement object, which must be an SQL Data Manipulation Language (DML) statement, such as INSERT, UPDATE or DELETE; or an SQL statement that returns nothing, such as a DDL statement.
      Specified by:
      executeUpdate in interface PreparedStatement
      Specified by:
      executeUpdate in class BasePreparedStatement
      Returns:
      either (1) the row count for SQL Data Manipulation Language (DML) statements or (2) 0 for SQL statements that return nothing
      Throws:
      SQLException - if a database access error occurs; this method is called on a closed PreparedStatement or the SQL statement returns a ResultSet object
      SQLTimeoutException - when the driver has determined that the timeout value that was specified by the setQueryTimeout method has been exceeded and has at least attempted to cancel the currently running Statement
    • executeLargeUpdate

      public long executeLargeUpdate() throws SQLException
      Executes the SQL statement in this PreparedStatement object, which must be an SQL Data Manipulation Language (DML) statement, such as INSERT, UPDATE or DELETE; or an SQL statement that returns nothing, such as a DDL statement.

      This method should be used when the returned row count may exceed Integer.MAX_VALUE.

      The default implementation will throw UnsupportedOperationException

      Specified by:
      executeLargeUpdate in interface PreparedStatement
      Specified by:
      executeLargeUpdate in class BasePreparedStatement
      Returns:
      either (1) the row count for SQL Data Manipulation Language (DML) statements or (2) 0 for SQL statements that return nothing
      Throws:
      SQLException - if a database access error occurs; this method is called on a closed PreparedStatement or the SQL statement returns a ResultSet object
      SQLTimeoutException - when the driver has determined that the timeout value that was specified by the setQueryTimeout method has been exceeded and has at least attempted to cancel the currently running Statement
      Since:
      1.8
    • handleParameterOutput

      protected void handleParameterOutput() throws SQLException
      Handle output parameter result-set (only for CallableStatement)
      Throws:
      SQLException - if any error occurs
    • addBatch

      public void addBatch() throws SQLException
      Adds a set of parameters to this PreparedStatement object's batch of commands.
      Specified by:
      addBatch in interface PreparedStatement
      Specified by:
      addBatch in class BasePreparedStatement
      Throws:
      SQLException - if a database access error occurs or this method is called on a closed PreparedStatement
      Since:
      1.2
      See Also:
    • validParameters

      protected void validParameters() throws SQLException
      Validated that all parameters have been set.
      Throws:
      SQLException - if number of parameters doesn't correspond to expected number
    • getMetaData

      public ResultSetMetaData getMetaData() throws SQLException
      Retrieves a ResultSetMetaData object that contains information about the columns of the ResultSet object that will be returned when this PreparedStatement object is executed.

      Because a PreparedStatement object is precompiled, it is possible to know about the ResultSet object that it will return without having to execute it. Consequently, it is possible to invoke the method getMetaData on a PreparedStatement object rather than waiting to execute it and then invoking the ResultSet.getMetaData method on the ResultSet object that is returned.

      NOTE: Using this method may be expensive for some drivers due to the lack of underlying DBMS support.

      Specified by:
      getMetaData in interface PreparedStatement
      Specified by:
      getMetaData in class BasePreparedStatement
      Returns:
      the description of a ResultSet object's columns or null if the driver cannot return a ResultSetMetaData object
      Throws:
      SQLException - if a database access error occurs or this method is called on a closed PreparedStatement
      SQLFeatureNotSupportedException - if the JDBC driver does not support this method
      Since:
      1.2
    • getParameterMetaData

      public ParameterMetaData getParameterMetaData() throws SQLException
      Retrieves the number, types and properties of this PreparedStatement object's parameters.
      Specified by:
      getParameterMetaData in interface PreparedStatement
      Specified by:
      getParameterMetaData in class BasePreparedStatement
      Returns:
      a ParameterMetaData object that contains information about the number, types and properties for each parameter marker of this PreparedStatement object
      Throws:
      SQLException - if a database access error occurs or this method is called on a closed PreparedStatement
      Since:
      1.4
      See Also:
    • exceptionFactory

      protected ExceptionFactory exceptionFactory()
    • close

      public void close() throws SQLException
      Description copied from class: Statement
      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:When a Statement object is closed, its current ResultSet object, if one exists, is also closed.

      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in interface Statement
      Overrides:
      close in class Statement
      Throws:
      SQLException - if a database access error occurs
    • toString

      public String toString()
      Overrides:
      toString in class BasePreparedStatement