1f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License.  You may obtain a copy of the License at
8f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.sql;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * An interface used to get information about the types and properties of
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * parameters in a {@code PreparedStatement}.
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
2436b3cdfbcd219d0308753d919638262c16fd34daJeremy Sharpepublic interface ParameterMetaData extends Wrapper {
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Indicates that the parameter mode is {@code IN}.
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static final int parameterModeIn = 1;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Indicates that the parameter mode is {@code INOUT}.
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static final int parameterModeInOut = 2;
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Indicates that the parameter mode is {@code OUT}.
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static final int parameterModeOut = 4;
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Indicates that the parameter mode is not known.
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static final int parameterModeUnknown = 0;
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Indicates that a parameter is not permitted to be {@code NULL}.
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static final int parameterNoNulls = 0;
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Indicates that a parameter is permitted to be {@code NULL}.
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static final int parameterNullable = 1;
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Indicates that whether a parameter is allowed to be {@code null} or not
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * is not known.
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static final int parameterNullableUnknown = 2;
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Gets the fully-qualified name of the Java class which should be passed as
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * a parameter to the method {@code PreparedStatement.setObject}.
65f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param paramIndex
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the index number of the parameter, where the first parameter
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            has index 1.
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the fully qualified Java class name of the parameter with the
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         specified index. This class name is used for custom mapping
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         between SQL types and Java objects.
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws SQLException
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if a database error happens.
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public String getParameterClassName(int paramIndex) throws SQLException;
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Gets the number of parameters in the {@code PreparedStatement} for which
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * this {@code ParameterMetaData} contains information.
80f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the number of parameters.
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws SQLException
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if a database error happens.
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int getParameterCount() throws SQLException;
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Gets the mode of the specified parameter. Can be one of:
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <ul>
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <li>ParameterMetaData.parameterModeIn</li>
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <li>ParameterMetaData.parameterModeOut</li>
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <li>ParameterMetaData.parameterModeInOut</li>
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <li>ParameterMetaData.parameterModeUnknown</li>
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * </ul>
95f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param paramIndex
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the index number of the parameter, where the first parameter
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            has index 1.
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the parameter's mode.
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws SQLException
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if a database error happens.
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int getParameterMode(int paramIndex) throws SQLException;
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Gets the SQL type of a specified parameter.
107f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param paramIndex
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the index number of the parameter, where the first parameter
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            has index 1.
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the SQL type of the parameter as defined in {@code
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         java.sql.Types}.
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws SQLException
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if a database error happens.
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int getParameterType(int paramIndex) throws SQLException;
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Gets the database-specific type name of a specified parameter.
120f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param paramIndex
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the index number of the parameter, where the first parameter
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            has index 1.
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the type name for the parameter as used by the database. A
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         fully-qualified name is returned if the parameter is a <i>User
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         Defined Type</i> (UDT).
127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws SQLException
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if a database error happens.
129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public String getParameterTypeName(int paramIndex) throws SQLException;
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Gets the number of decimal digits for a specified parameter.
134f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param paramIndex
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the index number of the parameter, where the first parameter
137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            has index 1.
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the number of decimal digits ("the precision") for the parameter.
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code 0} if the parameter is not a numeric type.
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws SQLException
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if a database error happens.
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int getPrecision(int paramIndex) throws SQLException;
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Gets the number of digits after the decimal point for a specified
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * parameter.
148f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param paramIndex
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the index number of the parameter, where the first parameter
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            has index 1.
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the number of digits after the decimal point ("the scale") for
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         the parameter. {@code 0} if the parameter is not a numeric type.
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws SQLException
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if a database error happens.
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int getScale(int paramIndex) throws SQLException;
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Gets whether {@code null} values are allowed for the specified parameter.
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The returned value is one of:
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <ul>
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <li>ParameterMetaData.parameterNoNulls</li>
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <li>ParameterMetaData.parameterNullable</li>
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <li>ParameterMetaData.parameterNullableUnknown</li>
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * </ul>
167f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param paramIndex
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the index number of the parameter, where the first parameter
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            has index 1.
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the int code indicating the nullability of the parameter.
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws SQLException
173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if a database error is encountered.
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int isNullable(int paramIndex) throws SQLException;
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Gets whether values for the specified parameter can be signed numbers.
179f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param paramIndex
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the index number of the parameter, where the first parameter
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            has index 1.
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if values can be signed numbers for this parameter,
184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code false} otherwise.
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws SQLException
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if a database error happens.
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean isSigned(int paramIndex) throws SQLException;
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
190