/*
 * Copyright 2002-2018 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.jdbc.core;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

import org.springframework.lang.Nullable;
import org.springframework.util.Assert;

Object to represent a SQL parameter definition.

Parameters may be anonymous, in which case "name" is null. However, all parameters must define a SQL type according to Types.

Author:Rod Johnson, Thomas Risberg, Juergen Hoeller
See Also:
/** * Object to represent a SQL parameter definition. * * <p>Parameters may be anonymous, in which case "name" is {@code null}. * However, all parameters must define a SQL type according to {@link java.sql.Types}. * * @author Rod Johnson * @author Thomas Risberg * @author Juergen Hoeller * @see java.sql.Types */
public class SqlParameter { // The name of the parameter, if any @Nullable private String name; // SQL type constant from {@code java.sql.Types} private final int sqlType; // Used for types that are user-named like: STRUCT, DISTINCT, JAVA_OBJECT, named array types @Nullable private String typeName; // The scale to apply in case of a NUMERIC or DECIMAL type, if any @Nullable private Integer scale;
Create a new anonymous SqlParameter, supplying the SQL type.
Params:
  • sqlType – the SQL type of the parameter according to java.sql.Types
/** * Create a new anonymous SqlParameter, supplying the SQL type. * @param sqlType the SQL type of the parameter according to {@code java.sql.Types} */
public SqlParameter(int sqlType) { this.sqlType = sqlType; }
Create a new anonymous SqlParameter, supplying the SQL type.
Params:
  • sqlType – the SQL type of the parameter according to java.sql.Types
  • typeName – the type name of the parameter (optional)
/** * Create a new anonymous SqlParameter, supplying the SQL type. * @param sqlType the SQL type of the parameter according to {@code java.sql.Types} * @param typeName the type name of the parameter (optional) */
public SqlParameter(int sqlType, @Nullable String typeName) { this.sqlType = sqlType; this.typeName = typeName; }
Create a new anonymous SqlParameter, supplying the SQL type.
Params:
  • sqlType – the SQL type of the parameter according to java.sql.Types
  • scale – the number of digits after the decimal point (for DECIMAL and NUMERIC types)
/** * Create a new anonymous SqlParameter, supplying the SQL type. * @param sqlType the SQL type of the parameter according to {@code java.sql.Types} * @param scale the number of digits after the decimal point * (for DECIMAL and NUMERIC types) */
public SqlParameter(int sqlType, int scale) { this.sqlType = sqlType; this.scale = scale; }
Create a new SqlParameter, supplying name and SQL type.
Params:
  • name – name of the parameter, as used in input and output maps
  • sqlType – the SQL type of the parameter according to java.sql.Types
/** * Create a new SqlParameter, supplying name and SQL type. * @param name name of the parameter, as used in input and output maps * @param sqlType the SQL type of the parameter according to {@code java.sql.Types} */
public SqlParameter(String name, int sqlType) { this.name = name; this.sqlType = sqlType; }
Create a new SqlParameter, supplying name and SQL type.
Params:
  • name – name of the parameter, as used in input and output maps
  • sqlType – the SQL type of the parameter according to java.sql.Types
  • typeName – the type name of the parameter (optional)
/** * Create a new SqlParameter, supplying name and SQL type. * @param name name of the parameter, as used in input and output maps * @param sqlType the SQL type of the parameter according to {@code java.sql.Types} * @param typeName the type name of the parameter (optional) */
public SqlParameter(String name, int sqlType, @Nullable String typeName) { this.name = name; this.sqlType = sqlType; this.typeName = typeName; }
Create a new SqlParameter, supplying name and SQL type.
Params:
  • name – name of the parameter, as used in input and output maps
  • sqlType – the SQL type of the parameter according to java.sql.Types
  • scale – the number of digits after the decimal point (for DECIMAL and NUMERIC types)
/** * Create a new SqlParameter, supplying name and SQL type. * @param name name of the parameter, as used in input and output maps * @param sqlType the SQL type of the parameter according to {@code java.sql.Types} * @param scale the number of digits after the decimal point * (for DECIMAL and NUMERIC types) */
public SqlParameter(String name, int sqlType, int scale) { this.name = name; this.sqlType = sqlType; this.scale = scale; }
Copy constructor.
Params:
  • otherParam – the SqlParameter object to copy from
/** * Copy constructor. * @param otherParam the SqlParameter object to copy from */
public SqlParameter(SqlParameter otherParam) { Assert.notNull(otherParam, "SqlParameter object must not be null"); this.name = otherParam.name; this.sqlType = otherParam.sqlType; this.typeName = otherParam.typeName; this.scale = otherParam.scale; }
Return the name of the parameter, or null if anonymous.
/** * Return the name of the parameter, or {@code null} if anonymous. */
@Nullable public String getName() { return this.name; }
Return the SQL type of the parameter.
/** * Return the SQL type of the parameter. */
public int getSqlType() { return this.sqlType; }
Return the type name of the parameter, if any.
/** * Return the type name of the parameter, if any. */
@Nullable public String getTypeName() { return this.typeName; }
Return the scale of the parameter, if any.
/** * Return the scale of the parameter, if any. */
@Nullable public Integer getScale() { return this.scale; }
Return whether this parameter holds input values that should be set before execution even if they are null.

This implementation always returns true.

/** * Return whether this parameter holds input values that should be set * before execution even if they are {@code null}. * <p>This implementation always returns {@code true}. */
public boolean isInputValueProvided() { return true; }
Return whether this parameter is an implicit return parameter used during the results processing of CallableStatement.getMoreResults/getUpdateCount.

This implementation always returns false.

/** * Return whether this parameter is an implicit return parameter used during the * results processing of {@code CallableStatement.getMoreResults/getUpdateCount}. * <p>This implementation always returns {@code false}. */
public boolean isResultsParameter() { return false; }
Convert a list of JDBC types, as defined in java.sql.Types, to a List of SqlParameter objects as used in this package.
/** * Convert a list of JDBC types, as defined in {@code java.sql.Types}, * to a List of SqlParameter objects as used in this package. */
public static List<SqlParameter> sqlTypesToAnonymousParameterList(@Nullable int... types) { if (types == null) { return new LinkedList<>(); } List<SqlParameter> result = new ArrayList<>(types.length); for (int type : types) { result.add(new SqlParameter(type)); } return result; } }