# Class ServerSidePreparedStatement

java.lang.Object
org.mariadb.jdbc.MariaDbStatement
org.mariadb.jdbc.BasePrepareStatement
org.mariadb.jdbc.ServerSidePreparedStatement

All Implemented Interfaces:
  `AutoCloseable, Cloneable, PreparedStatement, Statement, Wrapper`

Direct Known Subclasses:
  `CallableProcedureStatement`

public class ServerSidePreparedStatement extends BasePrepareStatement implements Cloneable

## Field Summary

Fields
Modifier and Type
Field
Description
`protected int`
`parameterCount`
`protected ServerPrepareResult`
`serverPrepareResult`
`protected String`
`sql`

### Fields inherited from class BasePrepareStatement

`autoGeneratedKeys, SPEC_ISO_ZONED_DATE_TIME`

### Fields inherited from class MariaDbStatement

`canUseServerTimeout, closed, connection, exceptionFactory, executing, fetchSize, lock, maxRows, options, protocol, queryTimeout, results, resultSetConcurrency, resultSetScrollType`

### Fields inherited from interface Statement

`CLOSE_ALL_RESULTS, CLOSE_CURRENT_RESULT, EXECUTE_FAILED, KEEP_CURRENT_RESULT, NO_GENERATED_KEYS, RETURN_GENERATED_KEYS, SUCCESS_NO_INFO`

## Constructor Summary

Constructors
Constructor
Description
`ServerSidePreparedStatement(MariaDbConnection connection, String sql, int resultSetScrollType, int resultSetConcurrency, int autoGeneratedKeys, ExceptionFactory exceptionFactory, boolean canDelayPrepare)`
Constructor for creating Server prepared statement.

## Method Summary

Modifier and Type
Method
Description
`void`
`addBatch()`
`void`
`addBatch(String sql)`
Add batch.
`void`
`clearBatch()`
Empties this `Statement` object's current list of SQL send.
`void`
`clearParameters()`
`ServerSidePreparedStatement`
`clone(MariaDbConnection connection)`
Clone statement.
`void`
`close()`
Releases this `Statement` object's database and JDBC resources immediately instead of waiting for this to happen when it is automatically closed.
`boolean`
`execute()`
`int[]`
`executeBatch()`
Submits a batch of send to the database for execution and if all send execute successfully, returns an array of update counts.
`protected boolean`
`executeInternal(int fetchSize)`
`long[]`
`executeLargeBatch()`
Execute batch, like executeBatch(), with returning results with long[].
`ResultSet`
`executeQuery()`
`int`
`executeUpdate()`
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.
`ResultSetMetaData`
`getMetaData()`
`protected int`
`getParameterCount()`
`ParameterMetaData`
`getParameterMetaData()`
Retrieves the number, types and properties of this `PreparedStatement` object's parameters.
`long`
`getServerThreadId()`
Permit to retrieve current connection thread id, or -1 if unknown.
`protected void`
`prepare(String sql)`
`void`
`setParameter(int parameterIndex, ParameterHolder holder)`
`void`
`setQueryTimeout(int seconds)`
Sets the number of seconds the driver will wait for a `Statement` object to execute to the given number of seconds.
`String`
`toString()`
Return sql String value.
`protected void`
`validParameters()`

### Methods inherited from class BasePrepareStatement

`executeLargeUpdate, setArray, setAsciiStream, setAsciiStream, setAsciiStream, setBigDecimal, setBinaryStream, setBinaryStream, setBinaryStream, setBlob, setBlob, setBlob, setBoolean, setByte, setBytes, setCharacterStream, setCharacterStream, setCharacterStream, setClob, setClob, setClob, setDate, setDate, setDouble, setFloat, setInt, setLong, setNCharacterStream, setNCharacterStream, setNClob, setNClob, setNClob, setNString, setNull, setNull, setNull, setObject, setObject, setObject, setObject, setObject, setRef, setRowId, setShort, setSQLXML, setString, setTime, setTime, setTimestamp, setTimestamp, setUnicodeStream, setURL`

### Methods inherited from class MariaDbStatement

`cancel, checkClose, checkCloseOnCompletion, clearWarnings, closeOnCompletion, enquoteIdentifier, enquoteLiteral, enquoteNCharLiteral, execute, execute, execute, execute, executeBatchEpilogue, executeBatchExceptionEpilogue, executeEpilogue, executeExceptionEpilogue, executeLargeUpdate, executeLargeUpdate, executeLargeUpdate, executeLargeUpdate, executeQuery, executeQueryPrologue, executeUpdate, executeUpdate, executeUpdate, executeUpdate, getConnection, getFetchDirection, getFetchSize, getGeneratedKeys, getLargeMaxRows, getLargeUpdateCount, getMaxFieldSize, getMaxRows, getMoreResults, getMoreResults, getQueryTimeout, getResultSet, getResultSetConcurrency, getResultSetHoldability, getResultSetType, getTimeoutSql, getUpdateCount, getWarnings, isClosed, isCloseOnCompletion, isPoolable, isSimpleIdentifier, isWrapperFor, setCursorName, setEscapeProcessing, setFetchDirection, setFetchSize, setLargeMaxRows, setLocalInfileInputStream, setMaxFieldSize, setMaxRows, setPoolable, setTimerTask, skipMoreResults, testExecute, unwrap`

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Methods inherited from interface Statement

`cancel, clearWarnings, closeOnCompletion, enquoteIdentifier, enquoteLiteral, enquoteNCharLiteral, execute, execute, execute, execute, executeLargeUpdate, executeLargeUpdate, executeLargeUpdate, executeLargeUpdate, executeQuery, executeUpdate, executeUpdate, executeUpdate, executeUpdate, getConnection, getFetchDirection, getFetchSize, getGeneratedKeys, getLargeMaxRows, getLargeUpdateCount, getMaxFieldSize, getMaxRows, getMoreResults, getMoreResults, getQueryTimeout, getResultSet, getResultSetConcurrency, getResultSetHoldability, getResultSetType, getUpdateCount, getWarnings, isClosed, isCloseOnCompletion, isPoolable, isSimpleIdentifier, setCursorName, setEscapeProcessing, setFetchDirection, setFetchSize, setLargeMaxRows, setMaxFieldSize, setMaxRows, setPoolable`

### Methods inherited from interface Wrapper

`isWrapperFor, unwrap`

## Field Details

### parameterCount

protected int parameterCount

### sql

protected String sql

### serverPrepareResult

protected ServerPrepareResult serverPrepareResult

## Constructor Details

### ServerSidePreparedStatement

public ServerSidePreparedStatement(MariaDbConnection connection, String sql, int resultSetScrollType, int resultSetConcurrency, int autoGeneratedKeys, ExceptionFactory exceptionFactory, boolean canDelayPrepare) throws SQLException
Constructor for creating Server prepared statement.

Parameters:
  `connection` - current connection
  `sql` - Sql String to prepare
  `resultSetScrollType` - one of the following `ResultSet` constants: `ResultSet.TYPE_FORWARD_ONLY`, `ResultSet.TYPE_SCROLL_INSENSITIVE`, or `ResultSet.TYPE_SCROLL_SENSITIVE`
  `resultSetConcurrency` - a concurrency type; one of `ResultSet.CONCUR_READ_ONLY` or `ResultSet.CONCUR_UPDATABLE`
  `autoGeneratedKeys` - a flag indicating whether auto-generated keys should be returned; one of `Statement.RETURN_GENERATED_KEYS` or `Statement.NO_GENERATED_KEYS`
  `exceptionFactory` - Exception factory
  `canDelayPrepare` - can delay prepare command
Throws:
  `SQLException` - exception

## Method Details

### clone

public ServerSidePreparedStatement clone(MariaDbConnection connection) throws CloneNotSupportedException
Clone statement.

Overrides:
  `clone` in class `BasePrepareStatement`
Parameters:
  `connection` - connection
Returns:
  Clone statement.
Throws:
  `CloneNotSupportedException` - if any error occur.

### prepare

protected void prepare(String sql) throws SQLException

Throws:
  `SQLException`

### setParameter

public void setParameter(int parameterIndex, ParameterHolder holder) throws SQLException

Specified by:
  `setParameter` in class `BasePrepareStatement`
Throws:
  `SQLException`

### addBatch

public void addBatch() throws SQLException

Specified by:
  `addBatch` in interface `PreparedStatement`
Throws:
  `SQLException`

### addBatch

public void addBatch(String sql) throws SQLException
Add batch.

Specified by:
  `addBatch` in interface `Statement`
Overrides:
  `addBatch` in class `MariaDbStatement`
Parameters:
  `sql` - typically this is a SQL `INSERT` or `UPDATE` statement
Throws:
  `SQLException` - every time since that method is forbidden on prepareStatement
See Also:
  - `MariaDbStatement.executeBatch()`
  - `DatabaseMetaData.supportsBatchUpdates()`

### clearBatch

public void clearBatch()
Description copied from class: `MariaDbStatement`
Empties this `Statement` object's current list of SQL send.

Specified by:
  `clearBatch` in interface `Statement`
Overrides:
  `clearBatch` in class `MariaDbStatement`
See Also:
  - `MariaDbStatement.addBatch(String)`
  - `DatabaseMetaData.supportsBatchUpdates()`

### getParameterMetaData

public ParameterMetaData getParameterMetaData() throws SQLException
Description copied from class: `BasePrepareStatement`
Retrieves the number, types and properties of this `PreparedStatement` object's parameters.

Specified by:
  `getParameterMetaData` in interface `PreparedStatement`
Specified by:
  `getParameterMetaData` in class `BasePrepareStatement`
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`
See Also:
  - `ParameterMetaData`

### getMetaData

public ResultSetMetaData getMetaData() throws SQLException

Specified by:
  `getMetaData` in interface `PreparedStatement`
Throws:
  `SQLException`

### executeBatch

public int[] executeBatch() throws SQLException
Submits a batch of send to the database for execution and if all send execute successfully, returns an array of update counts. The `int` elements of the array that is returned are ordered to correspond to the send 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 send 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 send in the batch. However, the driver's behavior must be consistent with a particular DBMS, either always continuing to process send or never continuing to process send. If the driver continues processing after a failure, the array returned by the method `BatchUpdateException.getUpdateCounts` will contain as many elements as there are send 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 send after a command fails

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 send in a batch update after a `BatchUpdateException` object has been thrown.

Specified by:
  `executeBatch` in interface `Statement`
Overrides:
  `executeBatch` in class `MariaDbStatement`
Returns:
  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 send were added to the batch.
Throws:
  `SQLException` - if a database access error occurs, this method is called on a closed `Statement` or the driver does not support batch statements. Throws `BatchUpdateException` (a subclass of `SQLException`) if one of the send sent to the database fails to execute properly or attempts to return a result set.
Since:
  1.3
See Also:
  - `addBatch()`
  - `DatabaseMetaData.supportsBatchUpdates()`

### executeLargeBatch

public long[] executeLargeBatch() throws SQLException
Execute batch, like executeBatch(), with returning results with long[]. For when row count may exceed Integer.MAX_VALUE.

Specified by:
  `executeLargeBatch` in interface `Statement`
Overrides:
  `executeLargeBatch` in class `MariaDbStatement`
Returns:
  an array of update counts (one element for each command in the batch)
Throws:
  `SQLException` - if a database error occur.

### setQueryTimeout

public void setQueryTimeout(int seconds) throws SQLException
Description copied from class: `MariaDbStatement`
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. A JDBC driver must apply this limit to the `execute`, `executeQuery` and `executeUpdate` methods.

Specified by:
  `setQueryTimeout` in interface `Statement`
Overrides:
  `setQueryTimeout` in class `MariaDbStatement`
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:
  - `MariaDbStatement.getQueryTimeout()`

### executeQuery

public ResultSet executeQuery() throws SQLException

Specified by:
  `executeQuery` in interface `PreparedStatement`
Throws:
  `SQLException`

### 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. Result-set are permitted for historical reason, even if spec indicate to throw exception.

Specified by:
  `executeUpdate` in interface `PreparedStatement`
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`

### clearParameters

public void clearParameters()

Specified by:
  `clearParameters` in interface `PreparedStatement`

### execute

public boolean execute() throws SQLException

Specified by:
  `execute` in interface `PreparedStatement`
Throws:
  `SQLException`

### validParameters

protected void validParameters() throws SQLException

Throws:
  `SQLException`

### executeInternal

protected boolean executeInternal(int fetchSize) throws SQLException

Specified by:
  `executeInternal` in class `BasePrepareStatement`
Throws:
  `SQLException`

### close

public void close() throws SQLException
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 `MariaDbStatement`
Throws:
  `SQLException` - if a database access error occurs

### getParameterCount

protected int getParameterCount()

### toString

public String toString()
Return sql String value.

Overrides:
  `toString` in class `Object`
Returns:
  String representation

### getServerThreadId

public long getServerThreadId()
Permit to retrieve current connection thread id, or -1 if unknown.

Returns:
  current connection thread id.