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

org.mariadb.jdbc.BaseCallableStatement Maven / Gradle / Ivy

The newest version!
// SPDX-License-Identifier: LGPL-2.1-or-later
// Copyright (c) 2012-2014 Monty Program Ab
// Copyright (c) 2015-2024 MariaDB Corporation Ab
package org.mariadb.jdbc;

import java.io.InputStream;
import java.io.Reader;
import java.math.BigDecimal;
import java.net.URL;
import java.sql.*;
import java.sql.Date;
import java.sql.Statement;
import java.util.*;
import org.mariadb.jdbc.client.result.Result;
import org.mariadb.jdbc.client.util.ClosableLock;
import org.mariadb.jdbc.codec.Parameter;
import org.mariadb.jdbc.export.ExceptionFactory;
import org.mariadb.jdbc.util.ParameterList;

/** Common methods for function/stored procedure */
public abstract class BaseCallableStatement extends ServerPreparedStatement
    implements CallableStatement {

  /** Database name */
  protected final String databaseName;

  /** Procedure name */
  protected final String procedureName;

  /** Declared output parameters */
  protected final Set outputParameters = new HashSet<>();

  /** parameter metadata */
  protected CallableParameterMetaData parameterMetaData = null;

  /** output parameter result */
  private Result outputResult = null;

  /**
   * Constructor
   *
   * @param sql sql command
   * @param con connection
   * @param lock thread safe lock
   * @param databaseName database name
   * @param procedureName procedure name
   * @param canUseServerTimeout indicate if server support server timeout
   * @param canUseServerMaxRows indicate if server support server max rows
   * @param canCachePrepStmts can cache server prepared result
   * @param resultSetType resultset type
   * @param resultSetConcurrency resultset concurrency
   * @param defaultFetchSize default fetch size
   * @throws SQLException if prepare fails
   */
  public BaseCallableStatement(
      String sql,
      Connection con,
      ClosableLock lock,
      String databaseName,
      String procedureName,
      boolean canUseServerTimeout,
      boolean canUseServerMaxRows,
      boolean canCachePrepStmts,
      int resultSetType,
      int resultSetConcurrency,
      int defaultFetchSize)
      throws SQLException {
    super(
        sql,
        con,
        lock,
        canUseServerTimeout,
        canUseServerMaxRows,
        canCachePrepStmts,
        Statement.RETURN_GENERATED_KEYS,
        resultSetType,
        resultSetConcurrency,
        defaultFetchSize);
    this.databaseName = databaseName;
    this.procedureName = procedureName;
  }

  /**
   * Indicate if callable statement is a function or a stored procedure
   *
   * @return indicate if is a function
   */
  public abstract boolean isFunction();

  /**
   * Output result without output parameters
   *
   * @param i index
   * @throws SQLException if any exception
   */
  protected void outputResultFromRes(int i) throws SQLException {
    this.outputResult = (Result) this.results.remove(this.results.size() - i);
    this.outputResult.next();
  }

  /**
   * Registers the OUT parameter in ordinal position parameterIndex to the JDBC type
   * sqlType. All OUT parameters must be registered before a stored procedure is
   * executed.
   *
   * 

The JDBC type specified by sqlType for an OUT parameter determines the Java * type that must be used in the get method to read the value of that parameter. * *

If the JDBC type expected to be returned to this output parameter is specific to this * particular database, sqlType should be java.sql.Types.OTHER. The * method {@link #getObject} retrieves the value. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @param sqlType the JDBC type code defined by java.sql.Types. If the parameter is * of JDBC type NUMERIC or DECIMAL, the version of * registerOutParameter that accepts a scale value should be used. * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if sqlType is a ARRAY, * BLOB, CLOB, DATALINK, JAVA_OBJECT, * NCHAR, NCLOB, NVARCHAR, LONGNVARCHAR, * REF, ROWID, SQLXML or STRUCT data type and * the JDBC driver does not support this data type * @see Types */ @Override public void registerOutParameter(int parameterIndex, int sqlType) throws SQLException { checkIndex(parameterIndex); outputParameters.add(parameterIndex); if (!parameters.containsKey(parameterIndex - 1)) parameters.set(parameterIndex - 1, Parameter.NULL_PARAMETER); } private void checkIndex(int index) throws SQLException { if (index <= 0 || (prepareResult != null && index > (prepareResult.getParameters().length + (isFunction() ? 1 : 0))) || (prepareResult == null && parameterMetaData != null && index > parameterMetaData.getParameterCount())) { throw exceptionFactory().create(String.format("wrong parameter index %s", index)); } } /** * Registers the parameter in ordinal position parameterIndex to be of JDBC type * sqlType. All OUT parameters must be registered before a stored procedure is * executed. * *

The JDBC type specified by sqlType for an OUT parameter determines the Java * type that must be used in the get method to read the value of that parameter. * *

This version of registerOutParameter should be used when the parameter is of * JDBC type NUMERIC or DECIMAL. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @param sqlType the SQL type code defined by java.sql.Types. * @param scale the desired number of digits to the right of the decimal point. It must be greater * than or equal to zero. * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if sqlType is a ARRAY, * BLOB, CLOB, DATALINK, JAVA_OBJECT, * NCHAR, NCLOB, NVARCHAR, LONGNVARCHAR, * REF, ROWID, SQLXML or STRUCT data type and * the JDBC driver does not support this data type * @see Types */ @Override public void registerOutParameter(int parameterIndex, int sqlType, int scale) throws SQLException { registerOutParameter(parameterIndex, sqlType); } @Override public void clearParameters() throws SQLException { checkNotClosed(); parameters = new ParameterList(); outputParameters.stream().forEach(index -> parameters.set(index - 1, Parameter.NULL_PARAMETER)); } /** * Retrieves whether the last OUT parameter read had the value of SQL NULL. Note that * this method should be called only after calling a getter method; otherwise, there is no value * to use in determining whether it is null or not. * * @return true if the last parameter read was SQL NULL; false * otherwise * @throws SQLException if a database access error occurs or this method is called on a closed * CallableStatement */ @Override public boolean wasNull() throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.wasNull(); } private int idxToOutIdx(int idx) throws SQLException { int outputIndex = 1; if (idx < 1) throw exceptionFactory().create(String.format("wrong index %s", idx)); if (!outputParameters.contains(idx)) throw exceptionFactory().create(String.format("index %s not declared as output", idx)); for (int i = 1; i < idx; i++) { if (outputParameters.contains(i)) outputIndex++; } return outputIndex; } /** * Check if statement is closed, and throw exception if so. * * @throws SQLException if statement close */ protected void checkOutputResult() throws SQLException { if (outputResult == null) { throw exceptionFactory().create("No output result"); } } /** * Retrieves the value of the designated JDBC CHAR, VARCHAR, or * LONGVARCHAR parameter as a String in the Java programming language. * *

For the fixed-length type JDBC CHAR, the String object returned * has exactly the same value the SQL CHAR value had in the database, including any * padding added by the database. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @return the parameter value. If the value is SQL NULL, the result is null * . * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @see #setString */ @Override public String getString(int parameterIndex) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getString(idxToOutIdx(parameterIndex)); } /** * Retrieves the value of the designated JDBC BIT or BOOLEAN parameter * as a boolean in the Java programming language. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @return the parameter value. If the value is SQL NULL, the result is false * . * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @see #setBoolean */ @Override public boolean getBoolean(int parameterIndex) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getBoolean(idxToOutIdx(parameterIndex)); } /** * Retrieves the value of the designated JDBC TINYINT parameter as a byte * in the Java programming language. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @return the parameter value. If the value is SQL NULL, the result is 0 * . * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @see #setByte */ @Override public byte getByte(int parameterIndex) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getByte(idxToOutIdx(parameterIndex)); } /** * Retrieves the value of the designated JDBC SMALLINT parameter as a short * in the Java programming language. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @return the parameter value. If the value is SQL NULL, the result is 0 * . * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @see #setShort */ @Override public short getShort(int parameterIndex) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getShort(idxToOutIdx(parameterIndex)); } /** * Retrieves the value of the designated JDBC INTEGER parameter as an int * in the Java programming language. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @return the parameter value. If the value is SQL NULL, the result is 0 * . * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @see #setInt */ @Override public int getInt(int parameterIndex) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getInt(idxToOutIdx(parameterIndex)); } /** * Retrieves the value of the designated JDBC BIGINT parameter as a long * in the Java programming language. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @return the parameter value. If the value is SQL NULL, the result is 0 * . * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @see #setLong */ @Override public long getLong(int parameterIndex) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getLong(idxToOutIdx(parameterIndex)); } /** * Retrieves the value of the designated JDBC FLOAT parameter as a float * in the Java programming language. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @return the parameter value. If the value is SQL NULL, the result is 0 * . * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @see #setFloat */ @Override public float getFloat(int parameterIndex) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getFloat(idxToOutIdx(parameterIndex)); } /** * Retrieves the value of the designated JDBC DOUBLE parameter as a double * in the Java programming language. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @return the parameter value. If the value is SQL NULL, the result is 0 * . * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @see #setDouble */ @Override public double getDouble(int parameterIndex) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getDouble(idxToOutIdx(parameterIndex)); } /** * Retrieves the value of the designated JDBC NUMERIC parameter as a * java.math.BigDecimal object with scale digits to the right of the decimal point. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @param scale the number of digits to the right of the decimal point * @return the parameter value. If the value is SQL NULL, the result is null * . * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #setBigDecimal * @deprecated use getBigDecimal(int parameterIndex) or * getBigDecimal(String parameterName) */ @Override @Deprecated public BigDecimal getBigDecimal(int parameterIndex, int scale) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getBigDecimal(idxToOutIdx(parameterIndex), scale); } /** * Retrieves the value of the designated JDBC BINARY or VARBINARY * parameter as an array of byte values in the Java programming language. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @return the parameter value. If the value is SQL NULL, the result is null * . * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @see #setBytes */ @Override public byte[] getBytes(int parameterIndex) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getBytes(idxToOutIdx(parameterIndex)); } /** * Retrieves the value of the designated JDBC DATE parameter as a java.sql.Date * object. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @return the parameter value. If the value is SQL NULL, the result is null * . * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @see #setDate */ @Override public Date getDate(int parameterIndex) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getDate(idxToOutIdx(parameterIndex)); } /** * Retrieves the value of the designated JDBC TIME parameter as a java.sql.Time * object. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @return the parameter value. If the value is SQL NULL, the result is null * . * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @see #setTime */ @Override public Time getTime(int parameterIndex) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getTime(idxToOutIdx(parameterIndex)); } /** * Retrieves the value of the designated JDBC TIMESTAMP parameter as a * java.sql.Timestamp object. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @return the parameter value. If the value is SQL NULL, the result is null * . * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @see #setTimestamp */ @Override public Timestamp getTimestamp(int parameterIndex) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getTimestamp(idxToOutIdx(parameterIndex)); } /** * Retrieves the value of the designated parameter as an Object in the Java * programming language. If the value is an SQL NULL, the driver returns a Java * null. * *

This method returns a Java object whose type corresponds to the JDBC type that was * registered for this parameter using the method registerOutParameter. By * registering the target JDBC types as java.sql.Types.OTHER, this method can be used * to read database-specific abstract data types. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @return A java.lang.Object holding the OUT parameter value * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @see Types * @see #setObject */ @Override public Object getObject(int parameterIndex) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getObject(idxToOutIdx(parameterIndex)); } /** * Retrieves the value of the designated JDBC NUMERIC parameter as a * java.math.BigDecimal object with as many digits to the right of the decimal point as the * value contains. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @return the parameter value in full precision. If the value is SQL NULL, the * result is null. * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @see #setBigDecimal * @since 1.2 */ @Override public BigDecimal getBigDecimal(int parameterIndex) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getBigDecimal(idxToOutIdx(parameterIndex)); } /** * Returns an object representing the value of OUT parameter parameterIndex and uses * map for the custom mapping of the parameter value. * *

This method returns a Java object whose type corresponds to the JDBC type that was * registered for this parameter using the method registerOutParameter. By * registering the target JDBC types as java.sql.Types.OTHER, this method can be used * to read database-specific abstract data types. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @param map the mapping from SQL type names to Java classes * @return a java.lang.Object holding the OUT parameter value * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #setObject * @since 1.2 */ @Override public Object getObject(int parameterIndex, Map> map) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getObject(idxToOutIdx(parameterIndex), map); } /** * Retrieves the value of the designated JDBC REF(<structured-type>) parameter * as a {@link Ref} object in the Java programming language. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @return the parameter value as a Ref object in the Java programming language. If * the value was SQL NULL, the value null is returned. * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.2 */ @Override public Ref getRef(int parameterIndex) throws SQLException { throw exceptionFactory().notSupported("Method ResultSet.getRef not supported"); } /** * Retrieves the value of the designated JDBC BLOB parameter as a {@link Blob} object * in the Java programming language. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @return the parameter value as a Blob object in the Java programming language. If * the value was SQL NULL, the value null is returned. * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.2 */ @Override public Blob getBlob(int parameterIndex) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getBlob(idxToOutIdx(parameterIndex)); } /** * Retrieves the value of the designated JDBC CLOB parameter as a java.sql.Clob * object in the Java programming language. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @return the parameter value as a Clob object in the Java programming language. If * the value was SQL NULL, the value null is returned. * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.2 */ @Override public Clob getClob(int parameterIndex) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getClob(idxToOutIdx(parameterIndex)); } /** * Retrieves the value of the designated JDBC ARRAY parameter as an {@link Array} * object in the Java programming language. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @return the parameter value as an Array object in the Java programming language. * If the value was SQL NULL, the value null is returned. * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.2 */ @Override public Array getArray(int parameterIndex) throws SQLException { checkNotClosed(); checkOutputResult(); throw exceptionFactory().notSupported("Method ResultSet.getArray not supported"); } /** * Retrieves the value of the designated JDBC DATE parameter as a java.sql.Date * object, using the given Calendar object to construct the date. With a * Calendar object, the driver can calculate the date taking into account a custom * timezone and locale. If no Calendar object is specified, the driver uses the * default timezone and locale. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @param cal the Calendar object the driver will use to construct the date * @return the parameter value. If the value is SQL NULL, the result is null * . * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @see #setDate * @since 1.2 */ @Override public Date getDate(int parameterIndex, Calendar cal) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getDate(idxToOutIdx(parameterIndex)); } /** * Retrieves the value of the designated JDBC TIME parameter as a java.sql.Time * object, using the given Calendar object to construct the time. With a * Calendar object, the driver can calculate the time taking into account a custom * timezone and locale. If no Calendar object is specified, the driver uses the * default timezone and locale. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @param cal the Calendar object the driver will use to construct the time * @return the parameter value; if the value is SQL NULL, the result is null * . * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @see #setTime * @since 1.2 */ @Override public Time getTime(int parameterIndex, Calendar cal) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getTime(idxToOutIdx(parameterIndex)); } /** * Retrieves the value of the designated JDBC TIMESTAMP parameter as a * java.sql.Timestamp object, using the given Calendar object to construct the * Timestamp object. With a Calendar object, the driver can calculate * the timestamp taking into account a custom timezone and locale. If no Calendar * object is specified, the driver uses the default timezone and locale. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @param cal the Calendar object the driver will use to construct the timestamp * @return the parameter value. If the value is SQL NULL, the result is null * . * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @see #setTimestamp * @since 1.2 */ @Override public Timestamp getTimestamp(int parameterIndex, Calendar cal) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getTimestamp(idxToOutIdx(parameterIndex)); } /** * Registers the designated output parameter. This version of the method * registerOutParameter should be used for a user-defined or REF output * parameter. Examples of user-defined types include: STRUCT, DISTINCT, * JAVA_OBJECT, and named array types. * *

All OUT parameters must be registered before a stored procedure is executed. * *

For a user-defined parameter, the fully-qualified SQL type name of the parameter should also * be given, while a REF parameter requires that the fully-qualified type name of the * referenced type be given. A JDBC driver that does not need the type code and type name * information may ignore it. To be portable, however, applications should always provide these * values for user-defined and REF parameters. * *

Although it is intended for user-defined and REF parameters, this method may be * used to register a parameter of any JDBC type. If the parameter does not have a user-defined or * REF type, the typeName parameter is ignored. * *

Note: When reading the value of an out parameter, you must use the getter method * whose Java type corresponds to the parameter's registered SQL type. * * @param parameterIndex the first parameter is 1, the second is 2,... * @param sqlType a value from {@link Types} * @param typeName the fully-qualified name of an SQL structured type * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if sqlType is a ARRAY, * BLOB, CLOB, DATALINK, JAVA_OBJECT, * NCHAR, NCLOB, NVARCHAR, LONGNVARCHAR, * REF, ROWID, SQLXML or STRUCT data type and * the JDBC driver does not support this data type * @see Types * @since 1.2 */ @Override public void registerOutParameter(int parameterIndex, int sqlType, String typeName) throws SQLException { registerOutParameter(parameterIndex, sqlType); } /** * Registers the OUT parameter named parameterName to the JDBC type sqlType * . All OUT parameters must be registered before a stored procedure is executed. * *

The JDBC type specified by sqlType for an OUT parameter determines the Java * type that must be used in the get method to read the value of that parameter. * *

If the JDBC type expected to be returned to this output parameter is specific to this * particular database, sqlType should be java.sql.Types.OTHER. The * method {@link #getObject} retrieves the value. * * @param parameterName the name of the parameter * @param sqlType the JDBC type code defined by java.sql.Types. If the parameter is * of JDBC type NUMERIC or DECIMAL, the version of * registerOutParameter that accepts a scale value should be used. * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if sqlType is a ARRAY, * BLOB, CLOB, DATALINK, JAVA_OBJECT, * NCHAR, NCLOB, NVARCHAR, LONGNVARCHAR, * REF, ROWID, SQLXML or STRUCT data type and * the JDBC driver does not support this data type or if the JDBC driver does not support this * method * @see Types * @since 1.4 */ @Override public void registerOutParameter(String parameterName, int sqlType) throws SQLException { checkNotClosed(); registerOutParameter(nameToIndex(parameterName), sqlType); } private int nameToIndex(String parameterName) throws SQLException { if (parameterName == null) throw exceptionFactory().create("parameter name cannot be null"); if (parameterMetaData == null) parameterMetaData = getParameterMetaData(); int count = parameterMetaData.getParameterCount(); for (int i = 1; i <= count; i++) { String name = parameterMetaData.getParameterName(i); if (name != null && name.equalsIgnoreCase(parameterName)) { return i; } } throw exceptionFactory().create(String.format("parameter name %s not found", parameterName)); } /** * Registers the parameter named parameterName to be of JDBC type sqlType * . All OUT parameters must be registered before a stored procedure is executed. * *

The JDBC type specified by sqlType for an OUT parameter determines the Java * type that must be used in the get method to read the value of that parameter. * *

This version of registerOutParameter should be used when the parameter is of * JDBC type NUMERIC or DECIMAL. * * @param parameterName the name of the parameter * @param sqlType SQL type code defined by java.sql.Types. * @param scale the desired number of digits to the right of the decimal point. It must be greater * than or equal to zero. * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if sqlType is a ARRAY, * BLOB, CLOB, DATALINK, JAVA_OBJECT, * NCHAR, NCLOB, NVARCHAR, LONGNVARCHAR, * REF, ROWID, SQLXML or STRUCT data type and * the JDBC driver does not support this data type or if the JDBC driver does not support this * method * @see Types * @since 1.4 */ @Override public void registerOutParameter(String parameterName, int sqlType, int scale) throws SQLException { registerOutParameter(parameterName, sqlType); } /** * Registers the designated output parameter. This version of the method * registerOutParameter should be used for a user-named or REF output parameter. Examples * of user-named types include: STRUCT, DISTINCT, JAVA_OBJECT, and named array types. * *

All OUT parameters must be registered before a stored procedure is executed. * *

For a user-named parameter the fully-qualified SQL type name of the parameter should also be * given, while a REF parameter requires that the fully-qualified type name of the referenced type * be given. A JDBC driver that does not need the type code and type name information may ignore * it. To be portable, however, applications should always provide these values for user-named and * REF parameters. * *

Although it is intended for user-named and REF parameters, this method may be used to * register a parameter of any JDBC type. If the parameter does not have a user-named or REF type, * the typeName parameter is ignored. * *

Note: When reading the value of an out parameter, you must use the getXXX * method whose Java type XXX corresponds to the parameter's registered SQL type. * * @param parameterName the name of the parameter * @param sqlType a value from {@link Types} * @param typeName the fully-qualified name of an SQL structured type * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if sqlType is a ARRAY, * BLOB, CLOB, DATALINK, JAVA_OBJECT, * NCHAR, NCLOB, NVARCHAR, LONGNVARCHAR, * REF, ROWID, SQLXML or STRUCT data type and * the JDBC driver does not support this data type or if the JDBC driver does not support this * method * @see Types * @since 1.4 */ @Override public void registerOutParameter(String parameterName, int sqlType, String typeName) throws SQLException { registerOutParameter(parameterName, sqlType); } /** * Retrieves the value of the designated JDBC DATALINK parameter as a * java.net.URL object. * * @param parameterIndex the first parameter is 1, the second is 2,... * @return a java.net.URL object that represents the JDBC DATALINK value * used as the designated parameter * @throws SQLException if the parameterIndex is not valid; if a database access error occurs, * this method is called on a closed CallableStatement, or if the URL being * returned is not a valid URL on the Java platform * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #setURL * @since 1.4 */ @Override public URL getURL(int parameterIndex) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getURL(idxToOutIdx(parameterIndex)); } /** * Sets the designated parameter to the given java.net.URL object. The driver * converts this to an SQL DATALINK value when it sends it to the database. * * @param parameterName the name of the parameter * @param val the parameter value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs; this method is called on a closed CallableStatement or if * a URL is malformed * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #getURL * @since 1.4 */ @Override public void setURL(String parameterName, URL val) throws SQLException { setURL(nameToIndex(parameterName), val); } /** * Sets the designated parameter to SQL NULL. * *

Note: You must specify the parameter's SQL type. * * @param parameterName the name of the parameter * @param sqlType the SQL type code defined in java.sql.Types * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.4 */ @Override public void setNull(String parameterName, int sqlType) throws SQLException { setNull(nameToIndex(parameterName), sqlType); } /** * Sets the designated parameter to the given Java boolean value. The driver converts * this to an SQL BIT or BOOLEAN value when it sends it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #getBoolean * @since 1.4 */ @Override public void setBoolean(String parameterName, boolean x) throws SQLException { setBoolean(nameToIndex(parameterName), x); } /** * Sets the designated parameter to the given Java byte value. The driver converts * this to an SQL TINYINT value when it sends it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #getByte * @since 1.4 */ @Override public void setByte(String parameterName, byte x) throws SQLException { setByte(nameToIndex(parameterName), x); } /** * Sets the designated parameter to the given Java short value. The driver converts * this to an SQL SMALLINT value when it sends it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #getShort * @since 1.4 */ @Override public void setShort(String parameterName, short x) throws SQLException { setShort(nameToIndex(parameterName), x); } /** * Sets the designated parameter to the given Java int value. The driver converts * this to an SQL INTEGER value when it sends it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #getInt * @since 1.4 */ @Override public void setInt(String parameterName, int x) throws SQLException { setInt(nameToIndex(parameterName), x); } /** * Sets the designated parameter to the given Java long value. The driver converts * this to an SQL BIGINT value when it sends it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #getLong * @since 1.4 */ @Override public void setLong(String parameterName, long x) throws SQLException { setLong(nameToIndex(parameterName), x); } /** * Sets the designated parameter to the given Java float value. The driver converts * this to an SQL FLOAT value when it sends it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #getFloat * @since 1.4 */ @Override public void setFloat(String parameterName, float x) throws SQLException { setFloat(nameToIndex(parameterName), x); } /** * Sets the designated parameter to the given Java double value. The driver converts * this to an SQL DOUBLE value when it sends it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #getDouble * @since 1.4 */ @Override public void setDouble(String parameterName, double x) throws SQLException { setDouble(nameToIndex(parameterName), x); } /** * Sets the designated parameter to the given java.math.BigDecimal value. The driver * converts this to an SQL NUMERIC value when it sends it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #getBigDecimal * @since 1.4 */ @Override public void setBigDecimal(String parameterName, BigDecimal x) throws SQLException { setBigDecimal(nameToIndex(parameterName), x); } /** * Sets the designated parameter to the given Java String value. The driver converts * this to an SQL VARCHAR or LONGVARCHAR value (depending on the * argument's size relative to the driver's limits on VARCHAR values) when it sends * it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #getString * @since 1.4 */ @Override public void setString(String parameterName, String x) throws SQLException { setString(nameToIndex(parameterName), x); } /** * Sets the designated parameter to the given Java array of bytes. The driver converts this to an * SQL VARBINARY or LONGVARBINARY (depending on the argument's size * relative to the driver's limits on VARBINARY values) when it sends it to the * database. * * @param parameterName the name of the parameter * @param x the parameter value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #getBytes * @since 1.4 */ @Override public void setBytes(String parameterName, byte[] x) throws SQLException { setBytes(nameToIndex(parameterName), x); } /** * Sets the designated parameter to the given java.sql.Date value using the default * time zone of the virtual machine that is running the application. The driver converts this to * an SQL DATE value when it sends it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #getDate * @since 1.4 */ @Override public void setDate(String parameterName, Date x) throws SQLException { setDate(nameToIndex(parameterName), x); } /** * Sets the designated parameter to the given java.sql.Time value. The driver * converts this to an SQL TIME value when it sends it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #getTime * @since 1.4 */ @Override public void setTime(String parameterName, Time x) throws SQLException { setTime(nameToIndex(parameterName), x); } /** * Sets the designated parameter to the given java.sql.Timestamp value. The driver * converts this to an SQL TIMESTAMP value when it sends it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #getTimestamp * @since 1.4 */ @Override public void setTimestamp(String parameterName, Timestamp x) throws SQLException { setTimestamp(nameToIndex(parameterName), x); } /** * Sets the designated parameter to the given input stream, which will have the specified number * of bytes. When a very large ASCII value is input to a LONGVARCHAR parameter, it * may be more practical to send it via a java.io.InputStream. Data will be read from * the stream as needed until end-of-file is reached. The JDBC driver will do any necessary * conversion from ASCII to the database char format. * *

Note: This stream object can either be a standard Java stream object or your own * subclass that implements the standard interface. * * @param parameterName the name of the parameter * @param x the Java input stream that contains the ASCII parameter value * @param length the number of bytes in the stream * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.4 */ @Override public void setAsciiStream(String parameterName, InputStream x, int length) throws SQLException { setAsciiStream(nameToIndex(parameterName), x); } /** * Sets the designated parameter to the given input stream, which will have the specified number * of bytes. When a very large binary value is input to a LONGVARBINARY parameter, it * may be more practical to send it via a java.io.InputStream object. The data will * be read from the stream as needed until end-of-file is reached. * *

Note: This stream object can either be a standard Java stream object or your own * subclass that implements the standard interface. * * @param parameterName the name of the parameter * @param x the java input stream which contains the binary parameter value * @param length the number of bytes in the stream * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.4 */ @Override public void setBinaryStream(String parameterName, InputStream x, int length) throws SQLException { setBinaryStream(nameToIndex(parameterName), x, length); } /** * Sets the value of the designated parameter with the given object. * *

The given Java object will be converted to the given targetSqlType before being sent to the * database. * *

If the object has a custom mapping (is of a class implementing the interface SQLData * ), the JDBC driver should call the method SQLData.writeSQL to write it to * the SQL data stream. If, on the other hand, the object is of a class implementing Ref * , Blob, Clob, NClob, Struct, * java.net.URL, or Array, the driver should pass it to the database as a * value of the corresponding SQL type. * *

Note that this method may be used to pass datatabase- specific abstract data types. * * @param parameterName the name of the parameter * @param x the object containing the input parameter value * @param targetSqlType the SQL type (as defined in java.sql.Types) to be sent to the database. * The scale argument may further qualify this type. * @param scale for java.sql.Types.DECIMAL or java.sql.Types.NUMERIC types, this is the number of * digits after the decimal point. For all other types, this value will be ignored. * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support the specified * targetSqlType * @see Types * @see #getObject * @since 1.4 */ @Override public void setObject(String parameterName, Object x, int targetSqlType, int scale) throws SQLException { setObject(nameToIndex(parameterName), x); } /** * Sets the value of the designated parameter with the given object. * *

This method is similar to {@link #setObject(String parameterName, Object x, int * targetSqlType, int scaleOrLength)}, except that it assumes a scale of zero. * * @param parameterName the name of the parameter * @param x the object containing the input parameter value * @param targetSqlType the SQL type (as defined in java.sql.Types) to be sent to the database * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support the specified * targetSqlType * @see #getObject * @since 1.4 */ @Override public void setObject(String parameterName, Object x, int targetSqlType) throws SQLException { setObject(nameToIndex(parameterName), x); } /** * Sets the value of the designated parameter with the given object. * *

The JDBC specification specifies a standard mapping from Java Object types to * SQL types. The given argument will be converted to the corresponding SQL type before being sent * to the database. * *

Note that this method may be used to pass database- specific abstract data types, by using a * driver-specific Java type. * *

If the object is of a class implementing the interface SQLData, the JDBC driver * should call the method SQLData.writeSQL to write it to the SQL data stream. If, on * the other hand, the object is of a class implementing Ref, Blob, * Clob, NClob, Struct, java.net.URL, or * Array, the driver should pass it to the database as a value of the corresponding * SQL type. * *

This method throws an exception if there is an ambiguity, for example, if the object is of a * class implementing more than one of the interfaces named above. * *

Note: Not all databases allow for a non-typed Null to be sent to the backend. For * maximum portability, the setNull or the * setObject(String parameterName, Object x, int sqlType) method should be used instead of * setObject(String parameterName, Object x). * * @param parameterName the name of the parameter * @param x the object containing the input parameter value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs, this method is called on a closed CallableStatement or if * the given Object parameter is ambiguous * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #getObject * @since 1.4 */ @Override public void setObject(String parameterName, Object x) throws SQLException { setObject(nameToIndex(parameterName), x); } /** * Sets the designated parameter to the given Reader object, which is the given * number of characters long. When a very large UNICODE value is input to a LONGVARCHAR * parameter, it may be more practical to send it via a java.io.Reader * object. The data will be read from the stream as needed until end-of-file is reached. The JDBC * driver will do any necessary conversion from UNICODE to the database char format. * *

Note: This stream object can either be a standard Java stream object or your own * subclass that implements the standard interface. * * @param parameterName the name of the parameter * @param reader the java.io.Reader object that contains the UNICODE data used as the * designated parameter * @param length the number of characters in the stream * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.4 */ @Override public void setCharacterStream(String parameterName, Reader reader, int length) throws SQLException { setCharacterStream(nameToIndex(parameterName), reader, length); } /** * Sets the designated parameter to the given java.sql.Date value, using the given * Calendar object. The driver uses the Calendar object to construct an * SQL DATE value, which the driver then sends to the database. With a a * Calendar object, the driver can calculate the date taking into account a custom * timezone. If no Calendar object is specified, the driver uses the default * timezone, which is that of the virtual machine running the application. * * @param parameterName the name of the parameter * @param x the parameter value * @param cal the Calendar object the driver will use to construct the date * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #getDate * @since 1.4 */ @Override public void setDate(String parameterName, Date x, Calendar cal) throws SQLException { setDate(nameToIndex(parameterName), x, cal); } /** * Sets the designated parameter to the given java.sql.Time value, using the given * Calendar object. The driver uses the Calendar object to construct an * SQL TIME value, which the driver then sends to the database. With a a * Calendar object, the driver can calculate the time taking into account a custom * timezone. If no Calendar object is specified, the driver uses the default * timezone, which is that of the virtual machine running the application. * * @param parameterName the name of the parameter * @param x the parameter value * @param cal the Calendar object the driver will use to construct the time * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #getTime * @since 1.4 */ @Override public void setTime(String parameterName, Time x, Calendar cal) throws SQLException { setTime(nameToIndex(parameterName), x, cal); } /** * Sets the designated parameter to the given java.sql.Timestamp value, using the * given Calendar object. The driver uses the Calendar object to * construct an SQL TIMESTAMP value, which the driver then sends to the database. * With a a Calendar object, the driver can calculate the timestamp taking into * account a custom timezone. If no Calendar object is specified, the driver uses the * default timezone, which is that of the virtual machine running the application. * * @param parameterName the name of the parameter * @param x the parameter value * @param cal the Calendar object the driver will use to construct the timestamp * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #getTimestamp * @since 1.4 */ @Override public void setTimestamp(String parameterName, Timestamp x, Calendar cal) throws SQLException { setTimestamp(nameToIndex(parameterName), x, cal); } /** * Sets the designated parameter to SQL NULL. This version of the method * setNull should be used for user-defined types and REF type parameters. Examples of * user-defined types include: STRUCT, DISTINCT, JAVA_OBJECT, and named array types. * *

Note: To be portable, applications must give the SQL type code and the * fully-qualified SQL type name when specifying a NULL user-defined or REF parameter. In the case * of a user-defined type the name is the type name of the parameter itself. For a REF parameter, * the name is the type name of the referenced type. * *

Although it is intended for user-defined and Ref parameters, this method may be used to set * a null parameter of any JDBC type. If the parameter does not have a user-defined or REF type, * the given typeName is ignored. * * @param parameterName the name of the parameter * @param sqlType a value from java.sql.Types * @param typeName the fully-qualified name of an SQL user-defined type; ignored if the parameter * is not a user-defined type or SQL REF value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.4 */ @Override public void setNull(String parameterName, int sqlType, String typeName) throws SQLException { setNull(nameToIndex(parameterName), sqlType, typeName); } /** * Retrieves the value of a JDBC CHAR, VARCHAR, or LONGVARCHAR * parameter as a String in the Java programming language. * *

For the fixed-length type JDBC CHAR, the String object returned * has exactly the same value the SQL CHAR value had in the database, including any * padding added by the database. * * @param parameterName the name of the parameter * @return the parameter value. If the value is SQL NULL, the result is null * . * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #setString * @since 1.4 */ @Override public String getString(String parameterName) throws SQLException { return outputResult.getString(idxToOutIdx(nameToIndex(parameterName))); } /** * Retrieves the value of a JDBC BIT or BOOLEAN parameter as a * boolean in the Java programming language. * * @param parameterName the name of the parameter * @return the parameter value. If the value is SQL NULL, the result is false * . * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #setBoolean * @since 1.4 */ @Override public boolean getBoolean(String parameterName) throws SQLException { return outputResult.getBoolean(idxToOutIdx(nameToIndex(parameterName))); } /** * Retrieves the value of a JDBC TINYINT parameter as a byte in the Java * programming language. * * @param parameterName the name of the parameter * @return the parameter value. If the value is SQL NULL, the result is 0 * . * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #setByte * @since 1.4 */ @Override public byte getByte(String parameterName) throws SQLException { return outputResult.getByte(idxToOutIdx(nameToIndex(parameterName))); } /** * Retrieves the value of a JDBC SMALLINT parameter as a short in the * Java programming language. * * @param parameterName the name of the parameter * @return the parameter value. If the value is SQL NULL, the result is 0 * . * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #setShort * @since 1.4 */ @Override public short getShort(String parameterName) throws SQLException { return outputResult.getShort(idxToOutIdx(nameToIndex(parameterName))); } /** * Retrieves the value of a JDBC INTEGER parameter as an int in the Java * programming language. * * @param parameterName the name of the parameter * @return the parameter value. If the value is SQL NULL, the result is 0 * . * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #setInt * @since 1.4 */ @Override public int getInt(String parameterName) throws SQLException { return outputResult.getInt(idxToOutIdx(nameToIndex(parameterName))); } /** * Retrieves the value of a JDBC BIGINT parameter as a long in the Java * programming language. * * @param parameterName the name of the parameter * @return the parameter value. If the value is SQL NULL, the result is 0 * . * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #setLong * @since 1.4 */ @Override public long getLong(String parameterName) throws SQLException { return outputResult.getLong(idxToOutIdx(nameToIndex(parameterName))); } /** * Retrieves the value of a JDBC FLOAT parameter as a float in the Java * programming language. * * @param parameterName the name of the parameter * @return the parameter value. If the value is SQL NULL, the result is 0 * . * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #setFloat * @since 1.4 */ @Override public float getFloat(String parameterName) throws SQLException { return outputResult.getFloat(idxToOutIdx(nameToIndex(parameterName))); } /** * Retrieves the value of a JDBC DOUBLE parameter as a double in the * Java programming language. * * @param parameterName the name of the parameter * @return the parameter value. If the value is SQL NULL, the result is 0 * . * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #setDouble * @since 1.4 */ @Override public double getDouble(String parameterName) throws SQLException { return outputResult.getDouble(idxToOutIdx(nameToIndex(parameterName))); } /** * Retrieves the value of a JDBC BINARY or VARBINARY parameter as an * array of byte values in the Java programming language. * * @param parameterName the name of the parameter * @return the parameter value. If the value is SQL NULL, the result is null * . * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #setBytes * @since 1.4 */ @Override public byte[] getBytes(String parameterName) throws SQLException { return outputResult.getBytes(idxToOutIdx(nameToIndex(parameterName))); } /** * Retrieves the value of a JDBC DATE parameter as a java.sql.Date * object. * * @param parameterName the name of the parameter * @return the parameter value. If the value is SQL NULL, the result is null * . * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #setDate * @since 1.4 */ @Override public Date getDate(String parameterName) throws SQLException { return outputResult.getDate(idxToOutIdx(nameToIndex(parameterName))); } /** * Retrieves the value of a JDBC TIME parameter as a java.sql.Time * object. * * @param parameterName the name of the parameter * @return the parameter value. If the value is SQL NULL, the result is null * . * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #setTime * @since 1.4 */ @Override public Time getTime(String parameterName) throws SQLException { return outputResult.getTime(idxToOutIdx(nameToIndex(parameterName))); } /** * Retrieves the value of a JDBC TIMESTAMP parameter as a java.sql.Timestamp * object. * * @param parameterName the name of the parameter * @return the parameter value. If the value is SQL NULL, the result is null * . * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #setTimestamp * @since 1.4 */ @Override public Timestamp getTimestamp(String parameterName) throws SQLException { return outputResult.getTimestamp(idxToOutIdx(nameToIndex(parameterName))); } /** * Retrieves the value of a parameter as an Object in the Java programming language. * If the value is an SQL NULL, the driver returns a Java null. * *

This method returns a Java object whose type corresponds to the JDBC type that was * registered for this parameter using the method registerOutParameter. By * registering the target JDBC types as java.sql.Types.OTHER, this method can be used * to read database-specific abstract data types. * * @param parameterName the name of the parameter * @return A java.lang.Object holding the OUT parameter value. * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see Types * @see #setObject * @since 1.4 */ @Override public Object getObject(String parameterName) throws SQLException { return outputResult.getObject(idxToOutIdx(nameToIndex(parameterName))); } /** * Retrieves the value of a JDBC NUMERIC parameter as a java.math.BigDecimal * object with as many digits to the right of the decimal point as the value contains. * * @param parameterName the name of the parameter * @return the parameter value in full precision. If the value is SQL NULL, the * result is null. * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #setBigDecimal * @since 1.4 */ @Override public BigDecimal getBigDecimal(String parameterName) throws SQLException { return outputResult.getBigDecimal(idxToOutIdx(nameToIndex(parameterName))); } /** * Returns an object representing the value of OUT parameter parameterName and uses * map for the custom mapping of the parameter value. * *

This method returns a Java object whose type corresponds to the JDBC type that was * registered for this parameter using the method registerOutParameter. By * registering the target JDBC types as java.sql.Types.OTHER, this method can be used * to read database-specific abstract data types. * * @param parameterName the name of the parameter * @param map the mapping from SQL type names to Java classes * @return a java.lang.Object holding the OUT parameter value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #setObject * @since 1.4 */ @Override public Object getObject(String parameterName, Map> map) throws SQLException { return outputResult.getObject(idxToOutIdx(nameToIndex(parameterName)), map); } /** * Retrieves the value of a JDBC REF(<structured-type>) parameter as a {@link * Ref} object in the Java programming language. * * @param parameterName the name of the parameter * @return the parameter value as a Ref object in the Java programming language. If * the value was SQL NULL, the value null is returned. * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.4 */ @Override public Ref getRef(String parameterName) throws SQLException { throw exceptionFactory().notSupported("Method ResultSet.getRef not supported"); } /** * Retrieves the value of a JDBC BLOB parameter as a {@link Blob} object in the Java * programming language. * * @param parameterName the name of the parameter * @return the parameter value as a Blob object in the Java programming language. If * the value was SQL NULL, the value null is returned. * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.4 */ @Override public Blob getBlob(String parameterName) throws SQLException { return outputResult.getBlob(idxToOutIdx(nameToIndex(parameterName))); } /** * Retrieves the value of a JDBC CLOB parameter as a java.sql.Clob * object in the Java programming language. * * @param parameterName the name of the parameter * @return the parameter value as a Clob object in the Java programming language. If * the value was SQL NULL, the value null is returned. * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.4 */ @Override public Clob getClob(String parameterName) throws SQLException { return outputResult.getClob(idxToOutIdx(nameToIndex(parameterName))); } /** * Retrieves the value of a JDBC ARRAY parameter as an {@link Array} object in the * Java programming language. * * @param parameterName the name of the parameter * @return the parameter value as an Array object in Java programming language. If * the value was SQL NULL, the value null is returned. * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.4 */ @Override public Array getArray(String parameterName) throws SQLException { throw exceptionFactory().notSupported("Method ResultSet.getArray not supported"); } /** * Retrieves the value of a JDBC DATE parameter as a java.sql.Date * object, using the given Calendar object to construct the date. With a * Calendar object, the driver can calculate the date taking into account a custom timezone * and locale. If no Calendar object is specified, the driver uses the default * timezone and locale. * * @param parameterName the name of the parameter * @param cal the Calendar object the driver will use to construct the date * @return the parameter value. If the value is SQL NULL, the result is null * . * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #setDate * @since 1.4 */ @Override public Date getDate(String parameterName, Calendar cal) throws SQLException { return outputResult.getDate(idxToOutIdx(nameToIndex(parameterName)), cal); } /** * Retrieves the value of a JDBC TIME parameter as a java.sql.Time * object, using the given Calendar object to construct the time. With a * Calendar object, the driver can calculate the time taking into account a custom timezone * and locale. If no Calendar object is specified, the driver uses the default * timezone and locale. * * @param parameterName the name of the parameter * @param cal the Calendar object the driver will use to construct the time * @return the parameter value; if the value is SQL NULL, the result is null * . * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #setTime * @since 1.4 */ @Override public Time getTime(String parameterName, Calendar cal) throws SQLException { return outputResult.getTime(idxToOutIdx(nameToIndex(parameterName)), cal); } /** * Retrieves the value of a JDBC TIMESTAMP parameter as a java.sql.Timestamp * object, using the given Calendar object to construct the Timestamp * object. With a Calendar object, the driver can calculate the timestamp * taking into account a custom timezone and locale. If no Calendar object is * specified, the driver uses the default timezone and locale. * * @param parameterName the name of the parameter * @param cal the Calendar object the driver will use to construct the timestamp * @return the parameter value. If the value is SQL NULL, the result is null * . * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #setTimestamp * @since 1.4 */ @Override public Timestamp getTimestamp(String parameterName, Calendar cal) throws SQLException { return outputResult.getTimestamp(idxToOutIdx(nameToIndex(parameterName)), cal); } /** * Retrieves the value of a JDBC DATALINK parameter as a java.net.URL * object. * * @param parameterName the name of the parameter * @return the parameter value as a java.net.URL object in the Java programming * language. If the value was SQL NULL, the value null is returned. * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs, this method is called on a closed CallableStatement, or * if there is a problem with the URL * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #setURL * @since 1.4 */ @Override public URL getURL(String parameterName) throws SQLException { return outputResult.getURL(idxToOutIdx(nameToIndex(parameterName))); } /** * Retrieves the value of the designated JDBC ROWID parameter as a * java.sql.RowId object. * * @param parameterIndex the first parameter is 1, the second is 2,... * @return a RowId object that represents the JDBC ROWID value is used * as the designated parameter. If the parameter contains an SQL NULL, then a * null value is returned. * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public RowId getRowId(int parameterIndex) throws SQLException { throw exceptionFactory().notSupported("RowId are not supported"); } /** * Retrieves the value of the designated JDBC ROWID parameter as a * java.sql.RowId object. * * @param parameterName the name of the parameter * @return a RowId object that represents the JDBC ROWID value is used * as the designated parameter. If the parameter contains an SQL NULL, then a * null value is returned. * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public RowId getRowId(String parameterName) throws SQLException { throw exceptionFactory().notSupported("RowId are not supported"); } /** * Sets the designated parameter to the given java.sql.RowId object. The driver * converts this to an SQL ROWID when it sends it to the database. * * @param parameterName the name of the parameter * @param x the parameter value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public void setRowId(String parameterName, RowId x) throws SQLException { throw exceptionFactory().notSupported("RowId parameter are not supported"); } /** * Sets the designated parameter to the given String object. The driver converts this * to an SQL NCHAR or NVARCHAR or LONGNVARCHAR * * @param parameterName the name of the parameter to be set * @param value the parameter value * @throws SQLException if parameterName does not correspond to a named parameter; if the driver * does not support national character sets; if the driver can detect that a data conversion * error could occur; if a database access error occurs or this method is called on a closed * CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public void setNString(String parameterName, String value) throws SQLException { setNString(nameToIndex(parameterName), value); } /** * Sets the designated parameter to a Reader object. The Reader reads * the data till end-of-file is reached. The driver does the necessary conversion from Java * character format to the national character set in the database. * * @param parameterName the name of the parameter to be set * @param value the parameter value * @param length the number of characters in the parameter data. * @throws SQLException if parameterName does not correspond to a named parameter; if the driver * does not support national character sets; if the driver can detect that a data conversion * error could occur; if a database access error occurs or this method is called on a closed * CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public void setNCharacterStream(String parameterName, Reader value, long length) throws SQLException { setNCharacterStream(nameToIndex(parameterName), value, length); } /** * Sets the designated parameter to a java.sql.NClob object. The object implements * the java.sql.NClob interface. This NClob object maps to an SQL * NCLOB. * * @param parameterName the name of the parameter to be set * @param value the parameter value * @throws SQLException if parameterName does not correspond to a named parameter; if the driver * does not support national character sets; if the driver can detect that a data conversion * error could occur; if a database access error occurs or this method is called on a closed * CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public void setNClob(String parameterName, NClob value) throws SQLException { setNClob(nameToIndex(parameterName), value); } /** * Sets the designated parameter to a Reader object. The reader must * contain the number of characters specified by length otherwise a SQLException will * be generated when the CallableStatement is executed. This method differs from the * setCharacterStream (int, Reader, int) method because it informs the driver that * the parameter value should be sent to the server as a CLOB. When the * setCharacterStream method is used, the driver may have to do extra work to determine * whether the parameter data should be sent to the server as a LONGVARCHAR or a * CLOB * * @param parameterName the name of the parameter to be set * @param reader An object that contains the data to set the parameter value to. * @param length the number of characters in the parameter data. * @throws SQLException if parameterName does not correspond to a named parameter; if the length * specified is less than zero; a database access error occurs or this method is called on a * closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public void setClob(String parameterName, Reader reader, long length) throws SQLException { setClob(nameToIndex(parameterName), reader, length); } /** * Sets the designated parameter to an {@code InputStream} object. The Inputstream * must contain the number of characters specified by length, otherwise a SQLException * will be generated when the CallableStatement is executed. This method * differs from the setBinaryStream (int, InputStream, int) method because it informs * the driver that the parameter value should be sent to the server as a BLOB. When * the setBinaryStream method is used, the driver may have to do extra work to * determine whether the parameter data should be sent to the server as a LONGVARBINARY * or a BLOB * * @param parameterName the name of the parameter to be set the second is 2, ... * @param inputStream An object that contains the data to set the parameter value to. * @param length the number of bytes in the parameter data. * @throws SQLException if parameterName does not correspond to a named parameter; if the length * specified is less than zero; if the number of bytes in the {@code InputStream} does not * match the specified length; if a database access error occurs or this method is called on a * closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public void setBlob(String parameterName, InputStream inputStream, long length) throws SQLException { setBlob(nameToIndex(parameterName), inputStream, length); } /** * Sets the designated parameter to a Reader object. The reader must * contain the number of characters specified by length otherwise a SQLException will * be generated when the CallableStatement is executed. This method differs from the * setCharacterStream (int, Reader, int) method because it informs the driver that * the parameter value should be sent to the server as a NCLOB. When the * setCharacterStream method is used, the driver may have to do extra work to determine * whether the parameter data should be sent to the server as a LONGNVARCHAR or a * NCLOB * * @param parameterName the name of the parameter to be set * @param reader An object that contains the data to set the parameter value to. * @param length the number of characters in the parameter data. * @throws SQLException if parameterName does not correspond to a named parameter; if the length * specified is less than zero; if the driver does not support national character sets; if the * driver can detect that a data conversion error could occur; if a database access error * occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public void setNClob(String parameterName, Reader reader, long length) throws SQLException { setNClob(nameToIndex(parameterName), reader, length); } /** * Retrieves the value of the designated JDBC NCLOB parameter as a * java.sql.NClob object in the Java programming language. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @return the parameter value as a NClob object in the Java programming language. If * the value was SQL NULL, the value null is returned. * @throws SQLException if the parameterIndex is not valid; if the driver does not support * national character sets; if the driver can detect that a data conversion error could occur; * if a database access error occurs or this method is called on a closed * CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public NClob getNClob(int parameterIndex) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getNClob(idxToOutIdx(parameterIndex)); } /** * Retrieves the value of a JDBC NCLOB parameter as a java.sql.NClob * object in the Java programming language. * * @param parameterName the name of the parameter * @return the parameter value as a NClob object in the Java programming language. If * the value was SQL NULL, the value null is returned. * @throws SQLException if parameterName does not correspond to a named parameter; if the driver * does not support national character sets; if the driver can detect that a data conversion * error could occur; if a database access error occurs or this method is called on a closed * CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public NClob getNClob(String parameterName) throws SQLException { return getNClob(nameToIndex(parameterName)); } /** * Sets the designated parameter to the given java.sql.SQLXML object. The driver * converts this to an SQL XML value when it sends it to the database. * * @param parameterName the name of the parameter * @param xmlObject a SQLXML object that maps an SQL XML value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs; this method is called on a closed CallableStatement or * the java.xml.transform.Result, Writer or OutputStream * has not been closed for the SQLXML object * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public void setSQLXML(String parameterName, SQLXML xmlObject) throws SQLException { throw exceptionFactory().notSupported("SQLXML parameter are not supported"); } /** * Retrieves the value of the designated SQL XML parameter as a java.sql.SQLXML * object in the Java programming language. * * @param parameterIndex index of the first parameter is 1, the second is 2, ... * @return a SQLXML object that maps an SQL XML value * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public SQLXML getSQLXML(int parameterIndex) throws SQLException { throw exceptionFactory().notSupported("SQLXML are not supported"); } /** * Retrieves the value of the designated SQL XML parameter as a java.sql.SQLXML * object in the Java programming language. * * @param parameterName the name of the parameter * @return a SQLXML object that maps an SQL XML value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public SQLXML getSQLXML(String parameterName) throws SQLException { throw exceptionFactory().notSupported("SQLXML are not supported"); } private ExceptionFactory exceptionFactory() { return con.getExceptionFactory().of(this); } /** * Retrieves the value of the designated NCHAR, NVARCHAR or * LONGNVARCHAR parameter as a String in the Java programming language. * *

For the fixed-length type JDBC NCHAR, the String object returned * has exactly the same value the SQL NCHAR value had in the database, including any * padding added by the database. * * @param parameterIndex index of the first parameter is 1, the second is 2, ... * @return a String object that maps an NCHAR, NVARCHAR or * LONGNVARCHAR value * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #setNString * @since 1.6 */ @Override public String getNString(int parameterIndex) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getNString(idxToOutIdx(parameterIndex)); } /** * Retrieves the value of the designated NCHAR, NVARCHAR or * LONGNVARCHAR parameter as a String in the Java programming language. * *

For the fixed-length type JDBC NCHAR, the String object returned * has exactly the same value the SQL NCHAR value had in the database, including any * padding added by the database. * * @param parameterName the name of the parameter * @return a String object that maps an NCHAR, NVARCHAR or * LONGNVARCHAR value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @see #setNString * @since 1.6 */ @Override public String getNString(String parameterName) throws SQLException { return getNString(nameToIndex(parameterName)); } /** * Retrieves the value of the designated parameter as a java.io.Reader object in the * Java programming language. It is intended for use when accessing NCHAR, * NVARCHAR and LONGNVARCHAR parameters. * * @param parameterIndex the first parameter is 1, the second is 2, ... * @return a java.io.Reader object that contains the parameter value; if the value is * SQL NULL, the value returned is null in the Java programming * language. * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public Reader getNCharacterStream(int parameterIndex) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getNCharacterStream(idxToOutIdx(parameterIndex)); } /** * Retrieves the value of the designated parameter as a java.io.Reader object in the * Java programming language. It is intended for use when accessing NCHAR, * NVARCHAR and LONGNVARCHAR parameters. * * @param parameterName the name of the parameter * @return a java.io.Reader object that contains the parameter value; if the value is * SQL NULL, the value returned is null in the Java programming * language * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public Reader getNCharacterStream(String parameterName) throws SQLException { return getNCharacterStream(nameToIndex(parameterName)); } /** * Retrieves the value of the designated parameter as a java.io.Reader object in the * Java programming language. * * @param parameterIndex the first parameter is 1, the second is 2, ... * @return a java.io.Reader object that contains the parameter value; if the value is * SQL NULL, the value returned is null in the Java programming * language. * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed CallableStatement * @since 1.6 */ @Override public Reader getCharacterStream(int parameterIndex) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getCharacterStream(idxToOutIdx(parameterIndex)); } /** * Retrieves the value of the designated parameter as a java.io.Reader object in the * Java programming language. * * @param parameterName the name of the parameter * @return a java.io.Reader object that contains the parameter value; if the value is * SQL NULL, the value returned is null in the Java programming * language * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public Reader getCharacterStream(String parameterName) throws SQLException { return getNCharacterStream(nameToIndex(parameterName)); } /** * Sets the designated parameter to the given java.sql.Blob object. The driver * converts this to an SQL BLOB value when it sends it to the database. * * @param parameterName the name of the parameter * @param x a Blob object that maps an SQL BLOB value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public void setBlob(String parameterName, Blob x) throws SQLException { setBlob(nameToIndex(parameterName), x); } /** * Sets the designated parameter to the given java.sql.Clob object. The driver * converts this to an SQL CLOB value when it sends it to the database. * * @param parameterName the name of the parameter * @param x a Clob object that maps an SQL CLOB value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public void setClob(String parameterName, Clob x) throws SQLException { setClob(nameToIndex(parameterName), x); } /** * Sets the designated parameter to the given input stream, which will have the specified number * of bytes. When a very large ASCII value is input to a LONGVARCHAR parameter, it * may be more practical to send it via a java.io.InputStream. Data will be read from * the stream as needed until end-of-file is reached. The JDBC driver will do any necessary * conversion from ASCII to the database char format. * *

Note: This stream object can either be a standard Java stream object or your own * subclass that implements the standard interface. * * @param parameterName the name of the parameter * @param x the Java input stream that contains the ASCII parameter value * @param length the number of bytes in the stream * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public void setAsciiStream(String parameterName, InputStream x, long length) throws SQLException { setAsciiStream(nameToIndex(parameterName), x, length); } /** * Sets the designated parameter to the given input stream, which will have the specified number * of bytes. When a very large binary value is input to a LONGVARBINARY parameter, it * may be more practical to send it via a java.io.InputStream object. The data will * be read from the stream as needed until end-of-file is reached. * *

Note: This stream object can either be a standard Java stream object or your own * subclass that implements the standard interface. * * @param parameterName the name of the parameter * @param x the java input stream which contains the binary parameter value * @param length the number of bytes in the stream * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public void setBinaryStream(String parameterName, InputStream x, long length) throws SQLException { setBinaryStream(nameToIndex(parameterName), x, length); } /** * Sets the designated parameter to the given Reader object, which is the given * number of characters long. When a very large UNICODE value is input to a LONGVARCHAR * parameter, it may be more practical to send it via a java.io.Reader * object. The data will be read from the stream as needed until end-of-file is reached. The JDBC * driver will do any necessary conversion from UNICODE to the database char format. * *

Note: This stream object can either be a standard Java stream object or your own * subclass that implements the standard interface. * * @param parameterName the name of the parameter * @param reader the java.io.Reader object that contains the UNICODE data used as the * designated parameter * @param length the number of characters in the stream * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public void setCharacterStream(String parameterName, Reader reader, long length) throws SQLException { setCharacterStream(nameToIndex(parameterName), reader, length); } /** * Sets the designated parameter to the given input stream. When a very large ASCII value is input * to a LONGVARCHAR parameter, it may be more practical to send it via a * java.io.InputStream. Data will be read from the stream as needed until end-of-file is * reached. The JDBC driver will do any necessary conversion from ASCII to the database char * format. * *

Note: This stream object can either be a standard Java stream object or your own * subclass that implements the standard interface. * *

Note: Consult your JDBC driver documentation to determine if it might be more * efficient to use a version of setAsciiStream which takes a length parameter. * * @param parameterName the name of the parameter * @param x the Java input stream that contains the ASCII parameter value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public void setAsciiStream(String parameterName, InputStream x) throws SQLException { setAsciiStream(nameToIndex(parameterName), x); } /** * Sets the designated parameter to the given input stream. When a very large binary value is * input to a LONGVARBINARY parameter, it may be more practical to send it via a * java.io.InputStream object. The data will be read from the stream as needed until * end-of-file is reached. * *

Note: This stream object can either be a standard Java stream object or your own * subclass that implements the standard interface. * *

Note: Consult your JDBC driver documentation to determine if it might be more * efficient to use a version of setBinaryStream which takes a length parameter. * * @param parameterName the name of the parameter * @param x the java input stream which contains the binary parameter value * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public void setBinaryStream(String parameterName, InputStream x) throws SQLException { setBinaryStream(nameToIndex(parameterName), x); } /** * Sets the designated parameter to the given Reader object. When a very large * UNICODE value is input to a LONGVARCHAR parameter, it may be more practical to * send it via a java.io.Reader object. The data will be read from the stream as * needed until end-of-file is reached. The JDBC driver will do any necessary conversion from * UNICODE to the database char format. * *

Note: This stream object can either be a standard Java stream object or your own * subclass that implements the standard interface. * *

Note: Consult your JDBC driver documentation to determine if it might be more * efficient to use a version of setCharacterStream which takes a length parameter. * * @param parameterName the name of the parameter * @param reader the java.io.Reader object that contains the Unicode data * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public void setCharacterStream(String parameterName, Reader reader) throws SQLException { setCharacterStream(nameToIndex(parameterName), reader); } /** * Sets the designated parameter to a Reader object. The Reader reads * the data till end-of-file is reached. The driver does the necessary conversion from Java * character format to the national character set in the database. * *

Note: This stream object can either be a standard Java stream object or your own * subclass that implements the standard interface. * *

Note: Consult your JDBC driver documentation to determine if it might be more * efficient to use a version of setNCharacterStream which takes a length parameter. * * @param parameterName the name of the parameter * @param value the parameter value * @throws SQLException if parameterName does not correspond to a named parameter; if the driver * does not support national character sets; if the driver can detect that a data conversion * error could occur; if a database access error occurs; or this method is called on a closed * CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public void setNCharacterStream(String parameterName, Reader value) throws SQLException { setNCharacterStream(nameToIndex(parameterName), value); } /** * Sets the designated parameter to a Reader object. This method differs from the * setCharacterStream (int, Reader) method because it informs the driver that the * parameter value should be sent to the server as a CLOB. When the * setCharacterStream method is used, the driver may have to do extra work to determine * whether the parameter data should be sent to the server as a LONGVARCHAR or a * CLOB * *

Note: Consult your JDBC driver documentation to determine if it might be more * efficient to use a version of setClob which takes a length parameter. * * @param parameterName the name of the parameter * @param reader An object that contains the data to set the parameter value to. * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public void setClob(String parameterName, Reader reader) throws SQLException { setClob(nameToIndex(parameterName), reader); } /** * Sets the designated parameter to an {@code InputStream} object. This method differs from the * setBinaryStream (int, InputStream) method because it informs the driver that the * parameter value should be sent to the server as a BLOB. When the * setBinaryStream method is used, the driver may have to do extra work to determine * whether the parameter data should be sent to the server as a LONGVARBINARY or a * BLOB * *

Note: Consult your JDBC driver documentation to determine if it might be more * efficient to use a version of setBlob which takes a length parameter. * * @param parameterName the name of the parameter * @param inputStream An object that contains the data to set the parameter value to. * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public void setBlob(String parameterName, InputStream inputStream) throws SQLException { setBlob(nameToIndex(parameterName), inputStream); } /** * Sets the designated parameter to a Reader object. This method differs from the * setCharacterStream (int, Reader) method because it informs the driver that the * parameter value should be sent to the server as a NCLOB. When the * setCharacterStream method is used, the driver may have to do extra work to determine * whether the parameter data should be sent to the server as a LONGNVARCHAR or a * NCLOB * *

Note: Consult your JDBC driver documentation to determine if it might be more * efficient to use a version of setNClob which takes a length parameter. * * @param parameterName the name of the parameter * @param reader An object that contains the data to set the parameter value to. * @throws SQLException if parameterName does not correspond to a named parameter; if the driver * does not support national character sets; if the driver can detect that a data conversion * error could occur; if a database access error occurs or this method is called on a closed * CallableStatement * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.6 */ @Override public void setNClob(String parameterName, Reader reader) throws SQLException { setNClob(nameToIndex(parameterName), reader); } /** * Returns an object representing the value of OUT parameter {@code parameterIndex} and will * convert from the SQL type of the parameter to the requested Java data type, if the conversion * is supported. If the conversion is not supported or null is specified for the type, a * SQLException is thrown. * *

At a minimum, an implementation must support the conversions defined in Appendix B, Table * B-3 and conversion of appropriate user defined SQL types to a Java type which implements {@code * SQLData}, or {@code Struct}. Additional conversions may be supported and are vendor defined. * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @param type Class representing the Java data type to convert the designated parameter to. * @return an instance of {@code type} holding the OUT parameter value * @throws SQLException if conversion is not supported, type is null or another error occurs. The * getCause() method of the exception may provide a more detailed exception, for example, if a * conversion error occurs * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.7 */ @Override public T getObject(int parameterIndex, Class type) throws SQLException { checkNotClosed(); checkOutputResult(); return outputResult.getObject(idxToOutIdx(parameterIndex), type); } /** * Returns an object representing the value of OUT parameter {@code parameterName} and will * convert from the SQL type of the parameter to the requested Java data type, if the conversion * is supported. If the conversion is not supported or null is specified for the type, a * SQLException is thrown. * *

At a minimum, an implementation must support the conversions defined in Appendix B, Table * B-3 and conversion of appropriate user defined SQL types to a Java type which implements {@code * SQLData}, or {@code Struct}. Additional conversions may be supported and are vendor defined. * * @param parameterName the name of the parameter * @param type Class representing the Java data type to convert the designated parameter to. * @return an instance of {@code type} holding the OUT parameter value * @throws SQLException if conversion is not supported, type is null or another error occurs. The * getCause() method of the exception may provide a more detailed exception, for example, if a * conversion error occurs * @throws SQLFeatureNotSupportedException if the JDBC driver does not support this method * @since 1.7 */ @Override public T getObject(String parameterName, Class type) throws SQLException { return getObject(nameToIndex(parameterName), type); } /** * Sets the value of the designated parameter with the given object. * *

If the second argument is an {@code InputStream} then the stream must contain the number of * bytes specified by scaleOrLength. If the second argument is a {@code Reader} then the reader * must contain the number of characters specified by scaleOrLength. If these conditions are not * true the driver will generate a {@code SQLException} when the prepared statement is executed. * *

The given Java object will be converted to the given targetSqlType before being sent to the * database. * *

If the object has a custom mapping (is of a class implementing the interface {@code * SQLData}), the JDBC driver should call the method {@code SQLData.writeSQL} to write it to the * SQL data stream. If, on the other hand, the object is of a class implementing {@code Ref}, * {@code Blob}, {@code Clob}, {@code NClob}, {@code Struct}, {@code java.net.URL}, or {@code * Array}, the driver should pass it to the database as a value of the corresponding SQL type. * *

Note that this method may be used to pass database-specific abstract data types. * *

The default implementation will throw {@code SQLFeatureNotSupportedException} * * @param parameterName the name of the parameter * @param x the object containing the input parameter value * @param targetSqlType the SQL type to be sent to the database. The scale argument may further * qualify this type. * @param scaleOrLength for {@code java.sql.JDBCType.DECIMAL} or {@code java.sql.JDBCType.NUMERIC * types}, this is the number of digits after the decimal point. For Java Object types {@code * InputStream} and {@code Reader}, this is the length of the data in the stream or reader. * For all other types, this value will be ignored. * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed {@code CallableStatement} or if * the Java Object specified by x is an InputStream or Reader object and the value of the * scale parameter is less than zero * @throws SQLFeatureNotSupportedException if the JDBC driver does not support the specified * targetSqlType * @see JDBCType * @see SQLType * @since 1.8 */ @Override public void setObject(String parameterName, Object x, SQLType targetSqlType, int scaleOrLength) throws SQLException { setObject(nameToIndex(parameterName), x, targetSqlType, scaleOrLength); } /** * Sets the value of the designated parameter with the given object. * *

This method is similar to {@link #setObject(String parameterName, Object x, SQLType * targetSqlType, int scaleOrLength)}, except that it assumes a scale of zero. * *

The default implementation will throw {@code SQLFeatureNotSupportedException} * * @param parameterName the name of the parameter * @param x the object containing the input parameter value * @param targetSqlType the SQL type to be sent to the database * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed {@code CallableStatement} * @throws SQLFeatureNotSupportedException if the JDBC driver does not support the specified * targetSqlType * @see JDBCType * @see SQLType * @since 1.8 */ @Override public void setObject(String parameterName, Object x, SQLType targetSqlType) throws SQLException { setObject(nameToIndex(parameterName), x, targetSqlType); } /** * Registers the OUT parameter in ordinal position {@code parameterIndex} to the JDBC type {@code * sqlType}. All OUT parameters must be registered before a stored procedure is executed. * *

The JDBC type specified by {@code sqlType} for an OUT parameter determines the Java type * that must be used in the {@code get} method to read the value of that parameter. * *

If the JDBC type expected to be returned to this output parameter is specific to this * particular database, {@code sqlType} may be {@code JDBCType.OTHER} or a {@code SQLType} that is * supported by the JDBC driver. The method {@link #getObject} retrieves the value. * *

The default implementation will throw {@code SQLFeatureNotSupportedException} * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @param sqlType the JDBC type code defined by {@code SQLType} to use to register the OUT * Parameter. If the parameter is of JDBC type {@code JDBCType.NUMERIC} or {@code * JDBCType.DECIMAL}, the version of {@code registerOutParameter} that accepts a scale value * should be used. * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @throws SQLFeatureNotSupportedException if the JDBC driver does not support the specified * sqlType * @see JDBCType * @see SQLType * @since 1.8 */ @Override public void registerOutParameter(int parameterIndex, SQLType sqlType) throws SQLException { registerOutParameter(parameterIndex, 0); } /** * Registers the parameter in ordinal position {@code parameterIndex} to be of JDBC type {@code * sqlType}. All OUT parameters must be registered before a stored procedure is executed. * *

The JDBC type specified by {@code sqlType} for an OUT parameter determines the Java type * that must be used in the {@code get} method to read the value of that parameter. * *

This version of {@code registerOutParameter} should be used when the parameter is of JDBC * type {@code JDBCType.NUMERIC} or {@code JDBCType.DECIMAL}. * *

The default implementation will throw {@code SQLFeatureNotSupportedException} * * @param parameterIndex the first parameter is 1, the second is 2, and so on * @param sqlType the JDBC type code defined by {@code SQLType} to use to register the OUT * Parameter. * @param scale the desired number of digits to the right of the decimal point. It must be greater * than or equal to zero. * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @throws SQLFeatureNotSupportedException if the JDBC driver does not support the specified * sqlType * @see JDBCType * @see SQLType * @since 1.8 */ @Override public void registerOutParameter(int parameterIndex, SQLType sqlType, int scale) throws SQLException { registerOutParameter(parameterIndex, sqlType); } /** * Registers the designated output parameter. This version of the method {@code * registerOutParameter} should be used for a user-defined or {@code REF} output parameter. * Examples of user-defined types include: {@code STRUCT}, {@code DISTINCT}, {@code JAVA_OBJECT}, * and named array types. * *

All OUT parameters must be registered before a stored procedure is executed. * *

For a user-defined parameter, the fully-qualified SQL type name of the parameter should also * be given, while a {@code REF} parameter requires that the fully-qualified type name of the * referenced type be given. A JDBC driver that does not need the type code and type name * information may ignore it. To be portable, however, applications should always provide these * values for user-defined and {@code REF} parameters. * *

Although it is intended for user-defined and {@code REF} parameters, this method may be used * to register a parameter of any JDBC type. If the parameter does not have a user-defined or * {@code REF} type, the typeName parameter is ignored. * *

Note: When reading the value of an out parameter, you must use the getter method * whose Java type corresponds to the parameter's registered SQL type. * *

The default implementation will throw {@code SQLFeatureNotSupportedException} * * @param parameterIndex the first parameter is 1, the second is 2,... * @param sqlType the JDBC type code defined by {@code SQLType} to use to register the OUT * Parameter. * @param typeName the fully-qualified name of an SQL structured type * @throws SQLException if the parameterIndex is not valid; if a database access error occurs or * this method is called on a closed {@code CallableStatement} * @throws SQLFeatureNotSupportedException if the JDBC driver does not support the specified * sqlType * @see JDBCType * @see SQLType * @since 1.8 */ @Override public void registerOutParameter(int parameterIndex, SQLType sqlType, String typeName) throws SQLException { registerOutParameter(parameterIndex, sqlType); } /** * Registers the OUT parameter named parameterName to the JDBC type {@code sqlType}. * All OUT parameters must be registered before a stored procedure is executed. * *

The JDBC type specified by {@code sqlType} for an OUT parameter determines the Java type * that must be used in the {@code get} method to read the value of that parameter. * *

If the JDBC type expected to be returned to this output parameter is specific to this * particular database, {@code sqlType} should be {@code JDBCType.OTHER} or a {@code SQLType} that * is supported by the JDBC driver. The method {@link #getObject} retrieves the value. * *

The default implementation will throw {@code SQLFeatureNotSupportedException} * * @param parameterName the name of the parameter * @param sqlType the JDBC type code defined by {@code SQLType} to use to register the OUT * Parameter. If the parameter is of JDBC type {@code JDBCType.NUMERIC} or {@code * JDBCType.DECIMAL}, the version of {@code registerOutParameter} that accepts a scale value * should be used. * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed {@code CallableStatement} * @throws SQLFeatureNotSupportedException if the JDBC driver does not support the specified * sqlType or if the JDBC driver does not support this method * @see JDBCType * @see SQLType * @since 1.8 */ @Override public void registerOutParameter(String parameterName, SQLType sqlType) throws SQLException { registerOutParameter(nameToIndex(parameterName), sqlType); } /** * Registers the parameter named parameterName to be of JDBC type {@code sqlType}. * All OUT parameters must be registered before a stored procedure is executed. * *

The JDBC type specified by {@code sqlType} for an OUT parameter determines the Java type * that must be used in the {@code get} method to read the value of that parameter. * *

This version of {@code registerOutParameter} should be used when the parameter is of JDBC * type {@code JDBCType.NUMERIC} or {@code JDBCType.DECIMAL}. * *

The default implementation will throw {@code SQLFeatureNotSupportedException} * * @param parameterName the name of the parameter * @param sqlType the JDBC type code defined by {@code SQLType} to use to register the OUT * Parameter. * @param scale the desired number of digits to the right of the decimal point. It must be greater * than or equal to zero. * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed {@code CallableStatement} * @throws SQLFeatureNotSupportedException if the JDBC driver does not support the specified * sqlType or if the JDBC driver does not support this method * @see JDBCType * @see SQLType * @since 1.8 */ @Override public void registerOutParameter(String parameterName, SQLType sqlType, int scale) throws SQLException { registerOutParameter(nameToIndex(parameterName), sqlType); } /** * Registers the designated output parameter. This version of the method {@code * registerOutParameter} should be used for a user-named or REF output parameter. Examples of * user-named types include: STRUCT, DISTINCT, JAVA_OBJECT, and named array types. * *

All OUT parameters must be registered before a stored procedure is executed. For a * user-named parameter the fully-qualified SQL type name of the parameter should also be given, * while a REF parameter requires that the fully-qualified type name of the referenced type be * given. A JDBC driver that does not need the type code and type name information may ignore it. * To be portable, however, applications should always provide these values for user-named and REF * parameters. * *

Although it is intended for user-named and REF parameters, this method may be used to * register a parameter of any JDBC type. If the parameter does not have a user-named or REF type, * the typeName parameter is ignored. * *

Note: When reading the value of an out parameter, you must use the {@code getXXX} * method whose Java type XXX corresponds to the parameter's registered SQL type. * *

The default implementation will throw {@code SQLFeatureNotSupportedException} * * @param parameterName the name of the parameter * @param sqlType the JDBC type code defined by {@code SQLType} to use to register the OUT * Parameter. * @param typeName the fully-qualified name of an SQL structured type * @throws SQLException if parameterName does not correspond to a named parameter; if a database * access error occurs or this method is called on a closed {@code CallableStatement} * @throws SQLFeatureNotSupportedException if the JDBC driver does not support the specified * sqlType or if the JDBC driver does not support this method * @see JDBCType * @see SQLType * @since 1.8 */ @Override public void registerOutParameter(String parameterName, SQLType sqlType, String typeName) throws SQLException { registerOutParameter(nameToIndex(parameterName), sqlType); } @Override public CallableParameterMetaData getParameterMetaData() throws SQLException { PreparedStatement prep = new ClientPreparedStatement( "SELECT * from information_schema.PARAMETERS " + "WHERE SPECIFIC_NAME = ? " + "AND SPECIFIC_SCHEMA = ? " + "ORDER BY ORDINAL_POSITION", con, lock, false, false, Statement.NO_GENERATED_KEYS, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, 0); prep.setString(1, procedureName); prep.setString(2, databaseName); ResultSet rs = prep.executeQuery(); parameterMetaData = new CallableParameterMetaData(rs, isFunction()); return parameterMetaData; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy