Class ServerPreparedStatement
- java.lang.Object
-
- org.mariadb.jdbc.Statement
-
- org.mariadb.jdbc.BasePreparedStatement
-
- org.mariadb.jdbc.ServerPreparedStatement
-
- All Implemented Interfaces:
java.lang.AutoCloseable
,java.sql.PreparedStatement
,java.sql.Statement
,java.sql.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 Summary
Fields Modifier and Type Field Description private static java.util.regex.Pattern
PREPARABLE_STATEMENT_PATTERN
-
Fields inherited from class org.mariadb.jdbc.BasePreparedStatement
batchParameters, canCachePrepStmts, parameters, prepareResult, sql
-
Fields inherited from class org.mariadb.jdbc.Statement
autoGeneratedKeys, canUseServerMaxRows, canUseServerTimeout, clientParser, closed, closeOnCompletion, con, currResult, escape, fetchSize, lastSql, localInfileInputStream, lock, maxRows, queryTimeout, results, resultSetConcurrency, resultSetType
-
-
Constructor Summary
Constructors Constructor Description ServerPreparedStatement(java.lang.String sql, Connection con, ClosableLock lock, boolean canUseServerTimeout, boolean canUseServerMaxRows, boolean canCachePrepStmts, int autoGeneratedKeys, int resultSetType, int resultSetConcurrency, int defaultFetchSize)
Server prepare statement constructor
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addBatch()
Adds a set of parameters to thisPreparedStatement
object's batch of commands.void
close()
Releases thisStatement
object's database and JDBC resources immediately instead of waiting for this to happen when it is automatically closed.private ExceptionFactory
exceptionFactory()
boolean
execute()
Executes the SQL statement in thisPreparedStatement
object, which may be any kind of SQL statement.private void
executeBatchPipeline(java.lang.String cmd)
Send COM_STMT_PREPARE + X * COM_STMT_EXECUTE, then read for the all answersprivate void
executeBatchStandard(java.lang.String cmd)
Send COM_STMT_PREPARE + read answer, then Send a COM_STMT_EXECUTE + read answer * n timeprivate java.util.List<Completion>
executeBunch(java.lang.String cmd, int index, int maxCmd)
private java.util.List<Completion>
executeBunchPrepare(java.lang.String cmd, int index, int maxCmd)
protected void
executeInternal()
Execute command with parametersprotected boolean
executeInternalPreparedBatch()
long
executeLargeUpdate()
Executes the SQL statement in thisPreparedStatement
object, which must be an SQL Data Manipulation Language (DML) statement, such asINSERT
,UPDATE
orDELETE
; or an SQL statement that returns nothing, such as a DDL statement.private void
executePipeline(java.lang.String cmd)
Send COM_STMT_PREPARE + COM_STMT_EXECUTE, then read for the 2 answersjava.sql.ResultSet
executeQuery()
Executes the SQL query in thisPreparedStatement
object and returns theResultSet
object generated by the query.private void
executeStandard(java.lang.String cmd)
int
executeUpdate()
Executes the SQL statement in thisPreparedStatement
object, which must be an SQL Data Manipulation Language (DML) statement, such asINSERT
,UPDATE
orDELETE
; or an SQL statement that returns nothing, such as a DDL statement.java.sql.ResultSetMetaData
getMetaData()
Retrieves aResultSetMetaData
object that contains information about the columns of theResultSet
object that will be returned when thisPreparedStatement
object is executed.java.sql.ParameterMetaData
getParameterMetaData()
Retrieves the number, types and properties of thisPreparedStatement
object's parameters.protected void
handleParameterOutput()
Handle output parameter result-set (only for CallableStatement)void
setLargeMaxRows(long max)
Sets the limit for the maximum number of rows that any ResultSet object generated by this Statement object can contain to the given number.void
setMaxRows(int max)
Sets the limit for the maximum number of rows that anyResultSet
object generated by thisStatement
object can contain to the given number.void
setQueryTimeout(int seconds)
Sets the number of seconds the driver will wait for aStatement
object to execute to the given number of seconds.java.lang.String
toString()
protected void
validParameters()
Validated that all parameters have been set.-
Methods inherited from class org.mariadb.jdbc.BasePreparedStatement
addBatch, clearBatch, clearParameters, execute, execute, execute, execute, executeBatch, executeBatchBulk, executeLargeBatch, executeLargeUpdate, executeLargeUpdate, executeLargeUpdate, executeLargeUpdate, executeQuery, executeUpdate, executeUpdate, executeUpdate, executeUpdate, getGeneratedKeys, getLastSql, getMeta, reset, 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, setObject, setObject, setObject, setObject, setObject, setParameter, setPrepareResult, setRef, setRowId, setShort, setSQLXML, setString, setTime, setTime, setTimestamp, setTimestamp, setUnicodeStream, setURL, updateMeta
-
Methods inherited from class org.mariadb.jdbc.Statement
abort, cancel, checkNotClosed, clearWarnings, closeOnCompletion, enquoteIdentifier, enquoteLiteral, enquoteNCharLiteral, escapeTimeout, executeInternalBatchPipeline, executeInternalBatchStandard, fetchRemaining, getConnection, getFetchDirection, getFetchSize, getLargeMaxRows, getLargeUpdateCount, getMaxFieldSize, getMaxRows, getMoreResults, getMoreResults, getQueryTimeout, getResultSet, getResultSetConcurrency, getResultSetHoldability, getResultSetType, getUpdateCount, getWarnings, isClosed, isCloseOnCompletion, isPoolable, isSimpleIdentifier, isWrapperFor, parseCommandIfNeeded, setCursorName, setEscapeProcessing, setFetchDirection, setFetchSize, setLocalInfileInputStream, setMaxFieldSize, setPoolable, unwrap
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface java.sql.Statement
cancel, clearWarnings, closeOnCompletion, getConnection, getFetchDirection, getFetchSize, getLargeMaxRows, getLargeUpdateCount, getMaxFieldSize, getMaxRows, getMoreResults, getMoreResults, getQueryTimeout, getResultSet, getResultSetConcurrency, getResultSetHoldability, getResultSetType, getUpdateCount, getWarnings, isClosed, isCloseOnCompletion, isPoolable, setCursorName, setEscapeProcessing, setFetchDirection, setFetchSize, setMaxFieldSize, setPoolable
-
-
-
-
Constructor Detail
-
ServerPreparedStatement
public ServerPreparedStatement(java.lang.String sql, Connection con, ClosableLock lock, boolean canUseServerTimeout, boolean canUseServerMaxRows, boolean canCachePrepStmts, int autoGeneratedKeys, int resultSetType, int resultSetConcurrency, int defaultFetchSize) throws java.sql.SQLException
Server prepare statement constructor- Parameters:
sql
- commandcon
- connectionlock
- thread safe lockcanUseServerTimeout
- can server use timeoutcanUseServerMaxRows
- can server use max rowscanCachePrepStmts
- can server cache prepared statementautoGeneratedKeys
- must command return automatically generated keysresultSetType
- resultset typeresultSetConcurrency
- resultset concurrencydefaultFetchSize
- default fetch size- Throws:
java.sql.SQLException
- if prepare fails
-
-
Method Detail
-
executeInternal
protected void executeInternal() throws java.sql.SQLException
Execute command with parameters- Throws:
java.sql.SQLException
- if any error occurs
-
executePipeline
private void executePipeline(java.lang.String cmd) throws java.sql.SQLException
Send COM_STMT_PREPARE + COM_STMT_EXECUTE, then read for the 2 answers- Parameters:
cmd
- command- Throws:
java.sql.SQLException
- if IOException / Command error
-
executeStandard
private void executeStandard(java.lang.String cmd) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
executeInternalPreparedBatch
protected boolean executeInternalPreparedBatch() throws java.sql.SQLException
- Specified by:
executeInternalPreparedBatch
in classBasePreparedStatement
- Throws:
java.sql.SQLException
-
executeBatchPipeline
private void executeBatchPipeline(java.lang.String cmd) throws java.sql.SQLException
Send COM_STMT_PREPARE + X * COM_STMT_EXECUTE, then read for the all answers- Parameters:
cmd
- command- Throws:
java.sql.SQLException
- if Command error
-
executeBunch
private java.util.List<Completion> executeBunch(java.lang.String cmd, int index, int maxCmd) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
executeBunchPrepare
private java.util.List<Completion> executeBunchPrepare(java.lang.String cmd, int index, int maxCmd) throws java.sql.SQLException
- Throws:
java.sql.SQLException
-
executeBatchStandard
private void executeBatchStandard(java.lang.String cmd) throws java.sql.SQLException
Send COM_STMT_PREPARE + read answer, then Send a COM_STMT_EXECUTE + read answer * n time- Parameters:
cmd
- command- Throws:
java.sql.SQLException
- if IOException / Command error
-
execute
public boolean execute() throws java.sql.SQLException
Executes the SQL statement in thisPreparedStatement
object, which may be any kind of SQL statement. Some prepared statements return multiple results; theexecute
method handles these complex statements as well as the simpler form of statements handled by the methodsexecuteQuery
andexecuteUpdate
.The
execute
method returns aboolean
to indicate the form of the first result. You must call either the methodgetResultSet
orgetUpdateCount
to retrieve the result; you must callgetMoreResults
to move to any subsequent result(s).- Specified by:
execute
in interfacejava.sql.PreparedStatement
- Specified by:
execute
in classBasePreparedStatement
- Returns:
true
if the first result is aResultSet
object;false
if the first result is an update count or there is no result- Throws:
java.sql.SQLException
- if a database access error occurs; this method is called on a closedPreparedStatement
or an argument is supplied to this methodjava.sql.SQLTimeoutException
- when the driver has determined that the timeout value that was specified by thesetQueryTimeout
method has been exceeded and has at least attempted to cancel the currently runningStatement
- See Also:
Statement.execute(java.lang.String)
,Statement.getResultSet()
,Statement.getUpdateCount()
,Statement.getMoreResults()
-
setMaxRows
public void setMaxRows(int max) throws java.sql.SQLException
Description copied from class:Statement
Sets the limit for the maximum number of rows that anyResultSet
object generated by thisStatement
object can contain to the given number. If the limit is exceeded, the excess rows are silently dropped.- Specified by:
setMaxRows
in interfacejava.sql.Statement
- Overrides:
setMaxRows
in classStatement
- Parameters:
max
- the new max rows limit; zero means there is no limit- Throws:
java.sql.SQLException
- if a database access error occurs, this method is called on a closedStatement
or the conditionmax >= 0
is not satisfied- See Also:
Statement.getMaxRows()
-
setLargeMaxRows
public void setLargeMaxRows(long max) throws java.sql.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 interfacejava.sql.Statement
- Overrides:
setLargeMaxRows
in classStatement
- Parameters:
max
- the new max rows limit; zero means there is no limit- Throws:
java.sql.SQLException
- if the condition max >= 0 is not satisfied
-
setQueryTimeout
public void setQueryTimeout(int seconds) throws java.sql.SQLException
Description copied from class:Statement
Sets the number of seconds the driver will wait for aStatement
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, anSQLTimeoutException
is thrown. A JDBC driver must apply this limit to theexecute
,executeQuery
andexecuteUpdate
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 theaddBatch
method or to the entire batch of SQL commands invoked by theexecuteBatch
method (consult your driver vendor documentation for details).- Specified by:
setQueryTimeout
in interfacejava.sql.Statement
- Overrides:
setQueryTimeout
in classStatement
- Parameters:
seconds
- the new query timeout limit in seconds; zero means there is no limit- Throws:
java.sql.SQLException
- if a database access error occurs, this method is called on a closedStatement
or the conditionseconds >= 0
is not satisfied- See Also:
Statement.getQueryTimeout()
-
executeQuery
public java.sql.ResultSet executeQuery() throws java.sql.SQLException
Executes the SQL query in thisPreparedStatement
object and returns theResultSet
object generated by the query.- Specified by:
executeQuery
in interfacejava.sql.PreparedStatement
- Specified by:
executeQuery
in classBasePreparedStatement
- Returns:
- a
ResultSet
object that contains the data produced by the query; nevernull
- Throws:
java.sql.SQLException
- if a database access error occurs; this method is called on a closedPreparedStatement
or the SQL statement does not return aResultSet
objectjava.sql.SQLTimeoutException
- when the driver has determined that the timeout value that was specified by thesetQueryTimeout
method has been exceeded and has at least attempted to cancel the currently runningStatement
-
executeUpdate
public int executeUpdate() throws java.sql.SQLException
Executes the SQL statement in thisPreparedStatement
object, which must be an SQL Data Manipulation Language (DML) statement, such asINSERT
,UPDATE
orDELETE
; or an SQL statement that returns nothing, such as a DDL statement.- Specified by:
executeUpdate
in interfacejava.sql.PreparedStatement
- Specified by:
executeUpdate
in classBasePreparedStatement
- Returns:
- either (1) the row count for SQL Data Manipulation Language (DML) statements or (2) 0 for SQL statements that return nothing
- Throws:
java.sql.SQLException
- if a database access error occurs; this method is called on a closedPreparedStatement
or the SQL statement returns aResultSet
objectjava.sql.SQLTimeoutException
- when the driver has determined that the timeout value that was specified by thesetQueryTimeout
method has been exceeded and has at least attempted to cancel the currently runningStatement
-
executeLargeUpdate
public long executeLargeUpdate() throws java.sql.SQLException
Executes the SQL statement in thisPreparedStatement
object, which must be an SQL Data Manipulation Language (DML) statement, such asINSERT
,UPDATE
orDELETE
; 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 interfacejava.sql.PreparedStatement
- Specified by:
executeLargeUpdate
in classBasePreparedStatement
- Returns:
- either (1) the row count for SQL Data Manipulation Language (DML) statements or (2) 0 for SQL statements that return nothing
- Throws:
java.sql.SQLException
- if a database access error occurs; this method is called on a closedPreparedStatement
or the SQL statement returns aResultSet
objectjava.sql.SQLTimeoutException
- when the driver has determined that the timeout value that was specified by thesetQueryTimeout
method has been exceeded and has at least attempted to cancel the currently runningStatement
- Since:
- 1.8
-
handleParameterOutput
protected void handleParameterOutput() throws java.sql.SQLException
Handle output parameter result-set (only for CallableStatement)- Throws:
java.sql.SQLException
- if any error occurs
-
addBatch
public void addBatch() throws java.sql.SQLException
Adds a set of parameters to thisPreparedStatement
object's batch of commands.- Specified by:
addBatch
in interfacejava.sql.PreparedStatement
- Specified by:
addBatch
in classBasePreparedStatement
- Throws:
java.sql.SQLException
- if a database access error occurs or this method is called on a closedPreparedStatement
- Since:
- 1.2
- See Also:
Statement.addBatch(java.lang.String)
-
validParameters
protected void validParameters() throws java.sql.SQLException
Validated that all parameters have been set.- Throws:
java.sql.SQLException
- if number of parameters doesn't correspond to expected number
-
getMetaData
public java.sql.ResultSetMetaData getMetaData() throws java.sql.SQLException
Retrieves aResultSetMetaData
object that contains information about the columns of theResultSet
object that will be returned when thisPreparedStatement
object is executed.Because a
PreparedStatement
object is precompiled, it is possible to know about theResultSet
object that it will return without having to execute it. Consequently, it is possible to invoke the methodgetMetaData
on aPreparedStatement
object rather than waiting to execute it and then invoking theResultSet.getMetaData
method on theResultSet
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 interfacejava.sql.PreparedStatement
- Specified by:
getMetaData
in classBasePreparedStatement
- Returns:
- the description of a
ResultSet
object's columns ornull
if the driver cannot return aResultSetMetaData
object - Throws:
java.sql.SQLException
- if a database access error occurs or this method is called on a closedPreparedStatement
java.sql.SQLFeatureNotSupportedException
- if the JDBC driver does not support this method- Since:
- 1.2
-
getParameterMetaData
public java.sql.ParameterMetaData getParameterMetaData() throws java.sql.SQLException
Retrieves the number, types and properties of thisPreparedStatement
object's parameters.- Specified by:
getParameterMetaData
in interfacejava.sql.PreparedStatement
- Specified by:
getParameterMetaData
in classBasePreparedStatement
- Returns:
- a
ParameterMetaData
object that contains information about the number, types and properties for each parameter marker of thisPreparedStatement
object - Throws:
java.sql.SQLException
- if a database access error occurs or this method is called on a closedPreparedStatement
- Since:
- 1.4
- See Also:
ParameterMetaData
-
exceptionFactory
private ExceptionFactory exceptionFactory()
-
close
public void close() throws java.sql.SQLException
Description copied from class:Statement
Releases thisStatement
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 aStatement
object that is already closed has no effect.Note:When a
Statement
object is closed, its currentResultSet
object, if one exists, is also closed.
-
toString
public java.lang.String toString()
- Overrides:
toString
in classBasePreparedStatement
-
-