/
githubmirror
/
jdk17u-dev
Обзор
Документация
Войти
/
githubmirror
/
jdk17u-dev
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/java.sql/share/classes/java/sql/DatabaseMetaData.java
3 691 строка
155 KB
Vipin Sharma
8253936: Replace <code>...</code> with {@code ...} for java.sql
25 ноя 2020, 19:01
25 ноя 2020, 19:01
dee79d6
Код
Авторство
О чём код?
/* * Copyright (c) 1996, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package java.sql; /** * Comprehensive information about the database as a whole. * <P> * This interface is implemented by driver vendors to let users know the capabilities * of a Database Management System (DBMS) in combination with * the driver based on JDBC technology * ("JDBC driver") that is used with it. Different relational DBMSs often support * different features, implement features in different ways, and use different * data types. In addition, a driver may implement a feature on top of what the * DBMS offers. Information returned by methods in this interface applies * to the capabilities of a particular driver and a particular DBMS working * together. Note that as used in this documentation, the term "database" is * used generically to refer to both the driver and DBMS. * <P> * A user for this interface is commonly a tool that needs to discover how to * deal with the underlying DBMS. This is especially true for applications * that are intended to be used with more than one DBMS. For example, a tool might use the method * {@code getTypeInfo} to find out what data types can be used in a * {@code CREATE TABLE} statement. Or a user might call the method * {@code supportsCorrelatedSubqueries} to see if it is possible to use * a correlated subquery or {@code supportsBatchUpdates} to see if it is * possible to use batch updates. * <P> * Some {@code DatabaseMetaData} methods return lists of information * in the form of {@code ResultSet} objects. * Regular {@code ResultSet} methods, such as * {@code getString} and {@code getInt}, can be used * to retrieve the data from these {@code ResultSet} objects. If * a given form of metadata is not available, an empty {@code ResultSet} * will be returned. Additional columns beyond the columns defined to be * returned by the {@code ResultSet} object for a given method * can be defined by the JDBC driver vendor and must be accessed * by their <B>column label</B>. * <P> * Some {@code DatabaseMetaData} methods take arguments that are * String patterns. These arguments all have names such as fooPattern. * Within a pattern String, "%" means match any substring of 0 or more * characters, and "_" means match any one character. Only metadata * entries matching the search pattern are returned. If a search pattern * argument is set to {@code null}, that argument's criterion will * be dropped from the search. * * @since 1.1 */ public interface DatabaseMetaData extends Wrapper { //---------------------------------------------------------------------- // First, a variety of minor information about the target database. /** * Retrieves whether the current user can call all the procedures * returned by the method {@code getProcedures}. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean allProceduresAreCallable() throws SQLException; /** * Retrieves whether the current user can use all the tables returned * by the method {@code getTables} in a {@code SELECT} * statement. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean allTablesAreSelectable() throws SQLException; /** * Retrieves the URL for this DBMS. * * @return the URL for this DBMS or {@code null} if it cannot be * generated * @throws SQLException if a database access error occurs */ String getURL() throws SQLException; /** * Retrieves the user name as known to this database. * * @return the database user name * @throws SQLException if a database access error occurs */ String getUserName() throws SQLException; /** * Retrieves whether this database is in read-only mode. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean isReadOnly() throws SQLException; /** * Retrieves whether {@code NULL} values are sorted high. * Sorted high means that {@code NULL} values * sort higher than any other value in a domain. In an ascending order, * if this method returns {@code true}, {@code NULL} values * will appear at the end. By contrast, the method * {@code nullsAreSortedAtEnd} indicates whether {@code NULL} values * are sorted at the end regardless of sort order. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean nullsAreSortedHigh() throws SQLException; /** * Retrieves whether {@code NULL} values are sorted low. * Sorted low means that {@code NULL} values * sort lower than any other value in a domain. In an ascending order, * if this method returns {@code true}, {@code NULL} values * will appear at the beginning. By contrast, the method * {@code nullsAreSortedAtStart} indicates whether {@code NULL} values * are sorted at the beginning regardless of sort order. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean nullsAreSortedLow() throws SQLException; /** * Retrieves whether {@code NULL} values are sorted at the start regardless * of sort order. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean nullsAreSortedAtStart() throws SQLException; /** * Retrieves whether {@code NULL} values are sorted at the end regardless of * sort order. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean nullsAreSortedAtEnd() throws SQLException; /** * Retrieves the name of this database product. * * @return database product name * @throws SQLException if a database access error occurs */ String getDatabaseProductName() throws SQLException; /** * Retrieves the version number of this database product. * * @return database version number * @throws SQLException if a database access error occurs */ String getDatabaseProductVersion() throws SQLException; /** * Retrieves the name of this JDBC driver. * * @return JDBC driver name * @throws SQLException if a database access error occurs */ String getDriverName() throws SQLException; /** * Retrieves the version number of this JDBC driver as a {@code String}. * * @return JDBC driver version * @throws SQLException if a database access error occurs */ String getDriverVersion() throws SQLException; /** * Retrieves this JDBC driver's major version number. * * @return JDBC driver major version */ int getDriverMajorVersion(); /** * Retrieves this JDBC driver's minor version number. * * @return JDBC driver minor version number */ int getDriverMinorVersion(); /** * Retrieves whether this database stores tables in a local file. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean usesLocalFiles() throws SQLException; /** * Retrieves whether this database uses a file for each table. * * @return {@code true} if this database uses a local file for each table; * {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean usesLocalFilePerTable() throws SQLException; /** * Retrieves whether this database treats mixed case unquoted SQL identifiers as * case sensitive and as a result stores them in mixed case. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsMixedCaseIdentifiers() throws SQLException; /** * Retrieves whether this database treats mixed case unquoted SQL identifiers as * case insensitive and stores them in upper case. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean storesUpperCaseIdentifiers() throws SQLException; /** * Retrieves whether this database treats mixed case unquoted SQL identifiers as * case insensitive and stores them in lower case. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean storesLowerCaseIdentifiers() throws SQLException; /** * Retrieves whether this database treats mixed case unquoted SQL identifiers as * case insensitive and stores them in mixed case. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean storesMixedCaseIdentifiers() throws SQLException; /** * Retrieves whether this database treats mixed case quoted SQL identifiers as * case sensitive and as a result stores them in mixed case. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsMixedCaseQuotedIdentifiers() throws SQLException; /** * Retrieves whether this database treats mixed case quoted SQL identifiers as * case insensitive and stores them in upper case. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean storesUpperCaseQuotedIdentifiers() throws SQLException; /** * Retrieves whether this database treats mixed case quoted SQL identifiers as * case insensitive and stores them in lower case. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean storesLowerCaseQuotedIdentifiers() throws SQLException; /** * Retrieves whether this database treats mixed case quoted SQL identifiers as * case insensitive and stores them in mixed case. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean storesMixedCaseQuotedIdentifiers() throws SQLException; /** * Retrieves the string used to quote SQL identifiers. * This method returns a space " " if identifier quoting is not supported. * * @return the quoting string or a space if quoting is not supported * @throws SQLException if a database access error occurs */ String getIdentifierQuoteString() throws SQLException; /** * Retrieves a comma-separated list of all of this database's SQL keywords * that are NOT also SQL:2003 keywords. * * @return the list of this database's keywords that are not also * SQL:2003 keywords * @throws SQLException if a database access error occurs */ String getSQLKeywords() throws SQLException; /** * Retrieves a comma-separated list of math functions available with * this database. These are the Open /Open CLI math function names used in * the JDBC function escape clause. * * @return the list of math functions supported by this database * @throws SQLException if a database access error occurs */ String getNumericFunctions() throws SQLException; /** * Retrieves a comma-separated list of string functions available with * this database. These are the Open Group CLI string function names used * in the JDBC function escape clause. * * @return the list of string functions supported by this database * @throws SQLException if a database access error occurs */ String getStringFunctions() throws SQLException; /** * Retrieves a comma-separated list of system functions available with * this database. These are the Open Group CLI system function names used * in the JDBC function escape clause. * * @return a list of system functions supported by this database * @throws SQLException if a database access error occurs */ String getSystemFunctions() throws SQLException; /** * Retrieves a comma-separated list of the time and date functions available * with this database. * * @return the list of time and date functions supported by this database * @throws SQLException if a database access error occurs */ String getTimeDateFunctions() throws SQLException; /** * Retrieves the string that can be used to escape wildcard characters. * This is the string that can be used to escape '_' or '%' in * the catalog search parameters that are a pattern (and therefore use one * of the wildcard characters). * * <P>The '_' character represents any single character; * the '%' character represents any sequence of zero or * more characters. * * @return the string used to escape wildcard characters * @throws SQLException if a database access error occurs */ String getSearchStringEscape() throws SQLException; /** * Retrieves all the "extra" characters that can be used in unquoted * identifier names (those beyond a-z, A-Z, 0-9 and _). * * @return the string containing the extra characters * @throws SQLException if a database access error occurs */ String getExtraNameCharacters() throws SQLException; //-------------------------------------------------------------------- // Functions describing which features are supported. /** * Retrieves whether this database supports {@code ALTER TABLE} * with add column. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsAlterTableWithAddColumn() throws SQLException; /** * Retrieves whether this database supports {@code ALTER TABLE} * with drop column. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsAlterTableWithDropColumn() throws SQLException; /** * Retrieves whether this database supports column aliasing. * * <P>If so, the SQL AS clause can be used to provide names for * computed columns or to provide alias names for columns as * required. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsColumnAliasing() throws SQLException; /** * Retrieves whether this database supports concatenations between * {@code NULL} and non-{@code NULL} values being * {@code NULL}. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean nullPlusNonNullIsNull() throws SQLException; /** * Retrieves whether this database supports the JDBC scalar function * {@code CONVERT} for the conversion of one JDBC type to another. * The JDBC types are the generic SQL data types defined * in {@code java.sql.Types}. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsConvert() throws SQLException; /** * Retrieves whether this database supports the JDBC scalar function * {@code CONVERT} for conversions between the JDBC types <i>fromType</i> * and <i>toType</i>. The JDBC types are the generic SQL data types defined * in {@code java.sql.Types}. * * @param fromType the type to convert from; one of the type codes from * the class {@code java.sql.Types} * @param toType the type to convert to; one of the type codes from * the class {@code java.sql.Types} * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs * @see Types */ boolean supportsConvert(int fromType, int toType) throws SQLException; /** * Retrieves whether this database supports table correlation names. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsTableCorrelationNames() throws SQLException; /** * Retrieves whether, when table correlation names are supported, they * are restricted to being different from the names of the tables. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsDifferentTableCorrelationNames() throws SQLException; /** * Retrieves whether this database supports expressions in * {@code ORDER BY} lists. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsExpressionsInOrderBy() throws SQLException; /** * Retrieves whether this database supports using a column that is * not in the {@code SELECT} statement in an * {@code ORDER BY} clause. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsOrderByUnrelated() throws SQLException; /** * Retrieves whether this database supports some form of * {@code GROUP BY} clause. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsGroupBy() throws SQLException; /** * Retrieves whether this database supports using a column that is * not in the {@code SELECT} statement in a * {@code GROUP BY} clause. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsGroupByUnrelated() throws SQLException; /** * Retrieves whether this database supports using columns not included in * the {@code SELECT} statement in a {@code GROUP BY} clause * provided that all of the columns in the {@code SELECT} statement * are included in the {@code GROUP BY} clause. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsGroupByBeyondSelect() throws SQLException; /** * Retrieves whether this database supports specifying a * {@code LIKE} escape clause. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsLikeEscapeClause() throws SQLException; /** * Retrieves whether this database supports getting multiple * {@code ResultSet} objects from a single call to the * method {@code execute}. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsMultipleResultSets() throws SQLException; /** * Retrieves whether this database allows having multiple * transactions open at once (on different connections). * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsMultipleTransactions() throws SQLException; /** * Retrieves whether columns in this database may be defined as non-nullable. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsNonNullableColumns() throws SQLException; /** * Retrieves whether this database supports the ODBC Minimum SQL grammar. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsMinimumSQLGrammar() throws SQLException; /** * Retrieves whether this database supports the ODBC Core SQL grammar. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsCoreSQLGrammar() throws SQLException; /** * Retrieves whether this database supports the ODBC Extended SQL grammar. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsExtendedSQLGrammar() throws SQLException; /** * Retrieves whether this database supports the ANSI92 entry level SQL * grammar. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsANSI92EntryLevelSQL() throws SQLException; /** * Retrieves whether this database supports the ANSI92 intermediate SQL grammar supported. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsANSI92IntermediateSQL() throws SQLException; /** * Retrieves whether this database supports the ANSI92 full SQL grammar supported. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsANSI92FullSQL() throws SQLException; /** * Retrieves whether this database supports the SQL Integrity * Enhancement Facility. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsIntegrityEnhancementFacility() throws SQLException; /** * Retrieves whether this database supports some form of outer join. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsOuterJoins() throws SQLException; /** * Retrieves whether this database supports full nested outer joins. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsFullOuterJoins() throws SQLException; /** * Retrieves whether this database provides limited support for outer * joins. (This will be {@code true} if the method * {@code supportsFullOuterJoins} returns {@code true}). * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsLimitedOuterJoins() throws SQLException; /** * Retrieves the database vendor's preferred term for "schema". * * @return the vendor term for "schema" * @throws SQLException if a database access error occurs */ String getSchemaTerm() throws SQLException; /** * Retrieves the database vendor's preferred term for "procedure". * * @return the vendor term for "procedure" * @throws SQLException if a database access error occurs */ String getProcedureTerm() throws SQLException; /** * Retrieves the database vendor's preferred term for "catalog". * * @return the vendor term for "catalog" * @throws SQLException if a database access error occurs */ String getCatalogTerm() throws SQLException; /** * Retrieves whether a catalog appears at the start of a fully qualified * table name. If not, the catalog appears at the end. * * @return {@code true} if the catalog name appears at the beginning * of a fully qualified table name; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean isCatalogAtStart() throws SQLException; /** * Retrieves the {@code String} that this database uses as the * separator between a catalog and table name. * * @return the separator string * @throws SQLException if a database access error occurs */ String getCatalogSeparator() throws SQLException; /** * Retrieves whether a schema name can be used in a data manipulation statement. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsSchemasInDataManipulation() throws SQLException; /** * Retrieves whether a schema name can be used in a procedure call statement. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsSchemasInProcedureCalls() throws SQLException; /** * Retrieves whether a schema name can be used in a table definition statement. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsSchemasInTableDefinitions() throws SQLException; /** * Retrieves whether a schema name can be used in an index definition statement. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsSchemasInIndexDefinitions() throws SQLException; /** * Retrieves whether a schema name can be used in a privilege definition statement. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsSchemasInPrivilegeDefinitions() throws SQLException; /** * Retrieves whether a catalog name can be used in a data manipulation statement. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsCatalogsInDataManipulation() throws SQLException; /** * Retrieves whether a catalog name can be used in a procedure call statement. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsCatalogsInProcedureCalls() throws SQLException; /** * Retrieves whether a catalog name can be used in a table definition statement. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsCatalogsInTableDefinitions() throws SQLException; /** * Retrieves whether a catalog name can be used in an index definition statement. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsCatalogsInIndexDefinitions() throws SQLException; /** * Retrieves whether a catalog name can be used in a privilege definition statement. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsCatalogsInPrivilegeDefinitions() throws SQLException; /** * Retrieves whether this database supports positioned {@code DELETE} * statements. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsPositionedDelete() throws SQLException; /** * Retrieves whether this database supports positioned {@code UPDATE} * statements. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsPositionedUpdate() throws SQLException; /** * Retrieves whether this database supports {@code SELECT FOR UPDATE} * statements. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsSelectForUpdate() throws SQLException; /** * Retrieves whether this database supports stored procedure calls * that use the stored procedure escape syntax. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsStoredProcedures() throws SQLException; /** * Retrieves whether this database supports subqueries in comparison * expressions. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsSubqueriesInComparisons() throws SQLException; /** * Retrieves whether this database supports subqueries in * {@code EXISTS} expressions. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsSubqueriesInExists() throws SQLException; /** * Retrieves whether this database supports subqueries in * {@code IN} expressions. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsSubqueriesInIns() throws SQLException; /** * Retrieves whether this database supports subqueries in quantified * expressions. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsSubqueriesInQuantifieds() throws SQLException; /** * Retrieves whether this database supports correlated subqueries. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsCorrelatedSubqueries() throws SQLException; /** * Retrieves whether this database supports SQL {@code UNION}. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsUnion() throws SQLException; /** * Retrieves whether this database supports SQL {@code UNION ALL}. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsUnionAll() throws SQLException; /** * Retrieves whether this database supports keeping cursors open * across commits. * * @return {@code true} if cursors always remain open; * {@code false} if they might not remain open * @throws SQLException if a database access error occurs */ boolean supportsOpenCursorsAcrossCommit() throws SQLException; /** * Retrieves whether this database supports keeping cursors open * across rollbacks. * * @return {@code true} if cursors always remain open; * {@code false} if they might not remain open * @throws SQLException if a database access error occurs */ boolean supportsOpenCursorsAcrossRollback() throws SQLException; /** * Retrieves whether this database supports keeping statements open * across commits. * * @return {@code true} if statements always remain open; * {@code false} if they might not remain open * @throws SQLException if a database access error occurs */ boolean supportsOpenStatementsAcrossCommit() throws SQLException; /** * Retrieves whether this database supports keeping statements open * across rollbacks. * * @return {@code true} if statements always remain open; * {@code false} if they might not remain open * @throws SQLException if a database access error occurs */ boolean supportsOpenStatementsAcrossRollback() throws SQLException; //---------------------------------------------------------------------- // The following group of methods exposes various limitations // based on the target database with the current driver. // Unless otherwise specified, a result of zero means there is no // limit, or the limit is not known. /** * Retrieves the maximum number of hex characters this database allows in an * inline binary literal. * * @return max the maximum length (in hex characters) for a binary literal; * a result of zero means that there is no limit or the limit * is not known * @throws SQLException if a database access error occurs */ int getMaxBinaryLiteralLength() throws SQLException; /** * Retrieves the maximum number of characters this database allows * for a character literal. * * @return the maximum number of characters allowed for a character literal; * a result of zero means that there is no limit or the limit is * not known * @throws SQLException if a database access error occurs */ int getMaxCharLiteralLength() throws SQLException; /** * Retrieves the maximum number of characters this database allows * for a column name. * * @return the maximum number of characters allowed for a column name; * a result of zero means that there is no limit or the limit * is not known * @throws SQLException if a database access error occurs */ int getMaxColumnNameLength() throws SQLException; /** * Retrieves the maximum number of columns this database allows in a * {@code GROUP BY} clause. * * @return the maximum number of columns allowed; * a result of zero means that there is no limit or the limit * is not known * @throws SQLException if a database access error occurs */ int getMaxColumnsInGroupBy() throws SQLException; /** * Retrieves the maximum number of columns this database allows in an index. * * @return the maximum number of columns allowed; * a result of zero means that there is no limit or the limit * is not known * @throws SQLException if a database access error occurs */ int getMaxColumnsInIndex() throws SQLException; /** * Retrieves the maximum number of columns this database allows in an * {@code ORDER BY} clause. * * @return the maximum number of columns allowed; * a result of zero means that there is no limit or the limit * is not known * @throws SQLException if a database access error occurs */ int getMaxColumnsInOrderBy() throws SQLException; /** * Retrieves the maximum number of columns this database allows in a * {@code SELECT} list. * * @return the maximum number of columns allowed; * a result of zero means that there is no limit or the limit * is not known * @throws SQLException if a database access error occurs */ int getMaxColumnsInSelect() throws SQLException; /** * Retrieves the maximum number of columns this database allows in a table. * * @return the maximum number of columns allowed; * a result of zero means that there is no limit or the limit * is not known * @throws SQLException if a database access error occurs */ int getMaxColumnsInTable() throws SQLException; /** * Retrieves the maximum number of concurrent connections to this * database that are possible. * * @return the maximum number of active connections possible at one time; * a result of zero means that there is no limit or the limit * is not known * @throws SQLException if a database access error occurs */ int getMaxConnections() throws SQLException; /** * Retrieves the maximum number of characters that this database allows in a * cursor name. * * @return the maximum number of characters allowed in a cursor name; * a result of zero means that there is no limit or the limit * is not known * @throws SQLException if a database access error occurs */ int getMaxCursorNameLength() throws SQLException; /** * Retrieves the maximum number of bytes this database allows for an * index, including all of the parts of the index. * * @return the maximum number of bytes allowed; this limit includes the * composite of all the constituent parts of the index; * a result of zero means that there is no limit or the limit * is not known * @throws SQLException if a database access error occurs */ int getMaxIndexLength() throws SQLException; /** * Retrieves the maximum number of characters that this database allows in a * schema name. * * @return the maximum number of characters allowed in a schema name; * a result of zero means that there is no limit or the limit * is not known * @throws SQLException if a database access error occurs */ int getMaxSchemaNameLength() throws SQLException; /** * Retrieves the maximum number of characters that this database allows in a * procedure name. * * @return the maximum number of characters allowed in a procedure name; * a result of zero means that there is no limit or the limit * is not known * @throws SQLException if a database access error occurs */ int getMaxProcedureNameLength() throws SQLException; /** * Retrieves the maximum number of characters that this database allows in a * catalog name. * * @return the maximum number of characters allowed in a catalog name; * a result of zero means that there is no limit or the limit * is not known * @throws SQLException if a database access error occurs */ int getMaxCatalogNameLength() throws SQLException; /** * Retrieves the maximum number of bytes this database allows in * a single row. * * @return the maximum number of bytes allowed for a row; a result of * zero means that there is no limit or the limit is not known * @throws SQLException if a database access error occurs */ int getMaxRowSize() throws SQLException; /** * Retrieves whether the return value for the method * {@code getMaxRowSize} includes the SQL data types * {@code LONGVARCHAR} and {@code LONGVARBINARY}. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean doesMaxRowSizeIncludeBlobs() throws SQLException; /** * Retrieves the maximum number of characters this database allows in * an SQL statement. * * @return the maximum number of characters allowed for an SQL statement; * a result of zero means that there is no limit or the limit * is not known * @throws SQLException if a database access error occurs */ int getMaxStatementLength() throws SQLException; /** * Retrieves the maximum number of active statements to this database * that can be open at the same time. * * @return the maximum number of statements that can be open at one time; * a result of zero means that there is no limit or the limit * is not known * @throws SQLException if a database access error occurs */ int getMaxStatements() throws SQLException; /** * Retrieves the maximum number of characters this database allows in * a table name. * * @return the maximum number of characters allowed for a table name; * a result of zero means that there is no limit or the limit * is not known * @throws SQLException if a database access error occurs */ int getMaxTableNameLength() throws SQLException; /** * Retrieves the maximum number of tables this database allows in a * {@code SELECT} statement. * * @return the maximum number of tables allowed in a {@code SELECT} * statement; a result of zero means that there is no limit or * the limit is not known * @throws SQLException if a database access error occurs */ int getMaxTablesInSelect() throws SQLException; /** * Retrieves the maximum number of characters this database allows in * a user name. * * @return the maximum number of characters allowed for a user name; * a result of zero means that there is no limit or the limit * is not known * @throws SQLException if a database access error occurs */ int getMaxUserNameLength() throws SQLException; //---------------------------------------------------------------------- /** * Retrieves this database's default transaction isolation level. The * possible values are defined in {@code java.sql.Connection}. * * @return the default isolation level * @throws SQLException if a database access error occurs * @see Connection */ int getDefaultTransactionIsolation() throws SQLException; /** * Retrieves whether this database supports transactions. If not, invoking the * method {@code commit} is a noop, and the isolation level is * {@code TRANSACTION_NONE}. * * @return {@code true} if transactions are supported; * {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsTransactions() throws SQLException; /** * Retrieves whether this database supports the given transaction isolation level. * * @param level one of the transaction isolation levels defined in * {@code java.sql.Connection} * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs * @see Connection */ boolean supportsTransactionIsolationLevel(int level) throws SQLException; /** * Retrieves whether this database supports both data definition and * data manipulation statements within a transaction. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsDataDefinitionAndDataManipulationTransactions() throws SQLException; /** * Retrieves whether this database supports only data manipulation * statements within a transaction. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean supportsDataManipulationTransactionsOnly() throws SQLException; /** * Retrieves whether a data definition statement within a transaction forces * the transaction to commit. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean dataDefinitionCausesTransactionCommit() throws SQLException; /** * Retrieves whether this database ignores a data definition statement * within a transaction. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs */ boolean dataDefinitionIgnoredInTransactions() throws SQLException; /** * Retrieves a description of the stored procedures available in the given * catalog. * <P> * Only procedure descriptions matching the schema and * procedure name criteria are returned. They are ordered by * {@code PROCEDURE_CAT}, {@code PROCEDURE_SCHEM}, * {@code PROCEDURE_NAME} and {@code SPECIFIC_ NAME}. * * <P>Each procedure description has the following columns: * <OL> * <LI><B>PROCEDURE_CAT</B> String {@code =>} procedure catalog (may be {@code null}) * <LI><B>PROCEDURE_SCHEM</B> String {@code =>} procedure schema (may be {@code null}) * <LI><B>PROCEDURE_NAME</B> String {@code =>} procedure name * <LI> reserved for future use * <LI> reserved for future use * <LI> reserved for future use * <LI><B>REMARKS</B> String {@code =>} explanatory comment on the procedure * <LI><B>PROCEDURE_TYPE</B> short {@code =>} kind of procedure: * <UL> * <LI> procedureResultUnknown - Cannot determine if a return value * will be returned * <LI> procedureNoResult - Does not return a return value * <LI> procedureReturnsResult - Returns a return value * </UL> * <LI><B>SPECIFIC_NAME</B> String {@code =>} The name which uniquely identifies this * procedure within its schema. * </OL> * <p> * A user may not have permissions to execute any of the procedures that are * returned by {@code getProcedures} * * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * {@code null} means that the catalog name should not be used to narrow * the search * @param schemaPattern a schema name pattern; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * {@code null} means that the schema name should not be used to narrow * the search * @param procedureNamePattern a procedure name pattern; must match the * procedure name as it is stored in the database * @return {@code ResultSet} - each row is a procedure description * @throws SQLException if a database access error occurs * @see #getSearchStringEscape */ ResultSet getProcedures(String catalog, String schemaPattern, String procedureNamePattern) throws SQLException; /** * Indicates that it is not known whether the procedure returns * a result. * <P> * A possible value for column {@code PROCEDURE_TYPE} in the * {@code ResultSet} object returned by the method * {@code getProcedures}. */ int procedureResultUnknown = 0; /** * Indicates that the procedure does not return a result. * <P> * A possible value for column {@code PROCEDURE_TYPE} in the * {@code ResultSet} object returned by the method * {@code getProcedures}. */ int procedureNoResult = 1; /** * Indicates that the procedure returns a result. * <P> * A possible value for column {@code PROCEDURE_TYPE} in the * {@code ResultSet} object returned by the method * {@code getProcedures}. */ int procedureReturnsResult = 2; /** * Retrieves a description of the given catalog's stored procedure parameter * and result columns. * * <P>Only descriptions matching the schema, procedure and * parameter name criteria are returned. They are ordered by * PROCEDURE_CAT, PROCEDURE_SCHEM, PROCEDURE_NAME and SPECIFIC_NAME. Within this, the return value, * if any, is first. Next are the parameter descriptions in call * order. The column descriptions follow in column number order. * * <P>Each row in the {@code ResultSet} is a parameter description or * column description with the following fields: * <OL> * <LI><B>PROCEDURE_CAT</B> String {@code =>} procedure catalog (may be {@code null}) * <LI><B>PROCEDURE_SCHEM</B> String {@code =>} procedure schema (may be {@code null}) * <LI><B>PROCEDURE_NAME</B> String {@code =>} procedure name * <LI><B>COLUMN_NAME</B> String {@code =>} column/parameter name * <LI><B>COLUMN_TYPE</B> Short {@code =>} kind of column/parameter: * <UL> * <LI> procedureColumnUnknown - nobody knows * <LI> procedureColumnIn - IN parameter * <LI> procedureColumnInOut - INOUT parameter * <LI> procedureColumnOut - OUT parameter * <LI> procedureColumnReturn - procedure return value * <LI> procedureColumnResult - result column in {@code ResultSet} * </UL> * <LI><B>DATA_TYPE</B> int {@code =>} SQL type from java.sql.Types * <LI><B>TYPE_NAME</B> String {@code =>} SQL type name, for a UDT type the * type name is fully qualified * <LI><B>PRECISION</B> int {@code =>} precision * <LI><B>LENGTH</B> int {@code =>} length in bytes of data * <LI><B>SCALE</B> short {@code =>} scale - null is returned for data types where * SCALE is not applicable. * <LI><B>RADIX</B> short {@code =>} radix * <LI><B>NULLABLE</B> short {@code =>} can it contain NULL. * <UL> * <LI> procedureNoNulls - does not allow NULL values * <LI> procedureNullable - allows NULL values * <LI> procedureNullableUnknown - nullability unknown * </UL> * <LI><B>REMARKS</B> String {@code =>} comment describing parameter/column * <LI><B>COLUMN_DEF</B> String {@code =>} default value for the column, which should be interpreted as a string when the value is enclosed in single quotes (may be {@code null}) * <UL> * <LI> The string NULL (not enclosed in quotes) - if NULL was specified as the default value * <LI> TRUNCATE (not enclosed in quotes) - if the specified default value cannot be represented without truncation * <LI> NULL - if a default value was not specified * </UL> * <LI><B>SQL_DATA_TYPE</B> int {@code =>} reserved for future use * <LI><B>SQL_DATETIME_SUB</B> int {@code =>} reserved for future use * <LI><B>CHAR_OCTET_LENGTH</B> int {@code =>} the maximum length of binary and character based columns. For any other datatype the returned value is a * NULL * <LI><B>ORDINAL_POSITION</B> int {@code =>} the ordinal position, starting from 1, for the input and output parameters for a procedure. A value of 0 *is returned if this row describes the procedure's return value. For result set columns, it is the *ordinal position of the column in the result set starting from 1. If there are *multiple result sets, the column ordinal positions are implementation * defined. * <LI><B>IS_NULLABLE</B> String {@code =>} ISO rules are used to determine the nullability for a column. * <UL> * <LI> YES --- if the column can include NULLs * <LI> NO --- if the column cannot include NULLs * <LI> empty string --- if the nullability for the * column is unknown * </UL> * <LI><B>SPECIFIC_NAME</B> String {@code =>} the name which uniquely identifies this procedure within its schema. * </OL> * * <P><B>Note:</B> Some databases may not return the column * descriptions for a procedure. * * <p>The PRECISION column represents the specified column size for the given column. * For numeric data, this is the maximum precision. For character data, this is the length in characters. * For datetime datatypes, this is the length in characters of the String representation (assuming the * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype, * this is the length in bytes. Null is returned for data types where the * column size is not applicable. * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * {@code null} means that the catalog name should not be used to narrow * the search * @param schemaPattern a schema name pattern; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * {@code null} means that the schema name should not be used to narrow * the search * @param procedureNamePattern a procedure name pattern; must match the * procedure name as it is stored in the database * @param columnNamePattern a column name pattern; must match the column name * as it is stored in the database * @return {@code ResultSet} - each row describes a stored procedure parameter or * column * @throws SQLException if a database access error occurs * @see #getSearchStringEscape */ ResultSet getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern, String columnNamePattern) throws SQLException; /** * Indicates that type of the column is unknown. * <P> * A possible value for the column * {@code COLUMN_TYPE} * in the {@code ResultSet} * returned by the method {@code getProcedureColumns}. */ int procedureColumnUnknown = 0; /** * Indicates that the column stores IN parameters. * <P> * A possible value for the column * {@code COLUMN_TYPE} * in the {@code ResultSet} * returned by the method {@code getProcedureColumns}. */ int procedureColumnIn = 1; /** * Indicates that the column stores INOUT parameters. * <P> * A possible value for the column * {@code COLUMN_TYPE} * in the {@code ResultSet} * returned by the method {@code getProcedureColumns}. */ int procedureColumnInOut = 2; /** * Indicates that the column stores OUT parameters. * <P> * A possible value for the column * {@code COLUMN_TYPE} * in the {@code ResultSet} * returned by the method {@code getProcedureColumns}. */ int procedureColumnOut = 4; /** * Indicates that the column stores return values. * <P> * A possible value for the column * {@code COLUMN_TYPE} * in the {@code ResultSet} * returned by the method {@code getProcedureColumns}. */ int procedureColumnReturn = 5; /** * Indicates that the column stores results. * <P> * A possible value for the column * {@code COLUMN_TYPE} * in the {@code ResultSet} * returned by the method {@code getProcedureColumns}. */ int procedureColumnResult = 3; /** * Indicates that {@code NULL} values are not allowed. * <P> * A possible value for the column * {@code NULLABLE} * in the {@code ResultSet} object * returned by the method {@code getProcedureColumns}. */ int procedureNoNulls = 0; /** * Indicates that {@code NULL} values are allowed. * <P> * A possible value for the column * {@code NULLABLE} * in the {@code ResultSet} object * returned by the method {@code getProcedureColumns}. */ int procedureNullable = 1; /** * Indicates that whether {@code NULL} values are allowed * is unknown. * <P> * A possible value for the column * {@code NULLABLE} * in the {@code ResultSet} object * returned by the method {@code getProcedureColumns}. */ int procedureNullableUnknown = 2; /** * Retrieves a description of the tables available in the given catalog. * Only table descriptions matching the catalog, schema, table * name and type criteria are returned. They are ordered by * {@code TABLE_TYPE}, {@code TABLE_CAT}, * {@code TABLE_SCHEM} and {@code TABLE_NAME}. * <P> * Each table description has the following columns: * <OL> * <LI><B>TABLE_CAT</B> String {@code =>} table catalog (may be {@code null}) * <LI><B>TABLE_SCHEM</B> String {@code =>} table schema (may be {@code null}) * <LI><B>TABLE_NAME</B> String {@code =>} table name * <LI><B>TABLE_TYPE</B> String {@code =>} table type. Typical types are "TABLE", * "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", * "LOCAL TEMPORARY", "ALIAS", "SYNONYM". * <LI><B>REMARKS</B> String {@code =>} explanatory comment on the table (may be {@code null}) * <LI><B>TYPE_CAT</B> String {@code =>} the types catalog (may be {@code null}) * <LI><B>TYPE_SCHEM</B> String {@code =>} the types schema (may be {@code null}) * <LI><B>TYPE_NAME</B> String {@code =>} type name (may be {@code null}) * <LI><B>SELF_REFERENCING_COL_NAME</B> String {@code =>} name of the designated * "identifier" column of a typed table (may be {@code null}) * <LI><B>REF_GENERATION</B> String {@code =>} specifies how values in * SELF_REFERENCING_COL_NAME are created. Values are * "SYSTEM", "USER", "DERIVED". (may be {@code null}) * </OL> * * <P><B>Note:</B> Some databases may not return information for * all tables. * * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * {@code null} means that the catalog name should not be used to narrow * the search * @param schemaPattern a schema name pattern; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * {@code null} means that the schema name should not be used to narrow * the search * @param tableNamePattern a table name pattern; must match the * table name as it is stored in the database * @param types a list of table types, which must be from the list of table types * returned from {@link #getTableTypes},to include; {@code null} returns * all types * @return {@code ResultSet} - each row is a table description * @throws SQLException if a database access error occurs * @see #getSearchStringEscape */ ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String types[]) throws SQLException; /** * Retrieves the schema names available in this database. The results * are ordered by {@code TABLE_CATALOG} and * {@code TABLE_SCHEM}. * * <P>The schema columns are: * <OL> * <LI><B>TABLE_SCHEM</B> String {@code =>} schema name * <LI><B>TABLE_CATALOG</B> String {@code =>} catalog name (may be {@code null}) * </OL> * * @return a {@code ResultSet} object in which each row is a * schema description * @throws SQLException if a database access error occurs * */ ResultSet getSchemas() throws SQLException; /** * Retrieves the catalog names available in this database. The results * are ordered by catalog name. * * <P>The catalog column is: * <OL> * <LI><B>TABLE_CAT</B> String {@code =>} catalog name * </OL> * * @return a {@code ResultSet} object in which each row has a * single {@code String} column that is a catalog name * @throws SQLException if a database access error occurs */ ResultSet getCatalogs() throws SQLException; /** * Retrieves the table types available in this database. The results * are ordered by table type. * * <P>The table type is: * <OL> * <LI><B>TABLE_TYPE</B> String {@code =>} table type. Typical types are "TABLE", * "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", * "LOCAL TEMPORARY", "ALIAS", "SYNONYM". * </OL> * * @return a {@code ResultSet} object in which each row has a * single {@code String} column that is a table type * @throws SQLException if a database access error occurs */ ResultSet getTableTypes() throws SQLException; /** * Retrieves a description of table columns available in * the specified catalog. * * <P>Only column descriptions matching the catalog, schema, table * and column name criteria are returned. They are ordered by * {@code TABLE_CAT},{@code TABLE_SCHEM}, * {@code TABLE_NAME}, and {@code ORDINAL_POSITION}. * * <P>Each column description has the following columns: * <OL> * <LI><B>TABLE_CAT</B> String {@code =>} table catalog (may be {@code null}) * <LI><B>TABLE_SCHEM</B> String {@code =>} table schema (may be {@code null}) * <LI><B>TABLE_NAME</B> String {@code =>} table name * <LI><B>COLUMN_NAME</B> String {@code =>} column name * <LI><B>DATA_TYPE</B> int {@code =>} SQL type from java.sql.Types * <LI><B>TYPE_NAME</B> String {@code =>} Data source dependent type name, * for a UDT the type name is fully qualified * <LI><B>COLUMN_SIZE</B> int {@code =>} column size. * <LI><B>BUFFER_LENGTH</B> is not used. * <LI><B>DECIMAL_DIGITS</B> int {@code =>} the number of fractional digits. Null is returned for data types where * DECIMAL_DIGITS is not applicable. * <LI><B>NUM_PREC_RADIX</B> int {@code =>} Radix (typically either 10 or 2) * <LI><B>NULLABLE</B> int {@code =>} is NULL allowed. * <UL> * <LI> columnNoNulls - might not allow {@code NULL} values * <LI> columnNullable - definitely allows {@code NULL} values * <LI> columnNullableUnknown - nullability unknown * </UL> * <LI><B>REMARKS</B> String {@code =>} comment describing column (may be {@code null}) * <LI><B>COLUMN_DEF</B> String {@code =>} default value for the column, which should be interpreted as a string when the value is enclosed in single quotes (may be {@code null}) * <LI><B>SQL_DATA_TYPE</B> int {@code =>} unused * <LI><B>SQL_DATETIME_SUB</B> int {@code =>} unused * <LI><B>CHAR_OCTET_LENGTH</B> int {@code =>} for char types the * maximum number of bytes in the column * <LI><B>ORDINAL_POSITION</B> int {@code =>} index of column in table * (starting at 1) * <LI><B>IS_NULLABLE</B> String {@code =>} ISO rules are used to determine the nullability for a column. * <UL> * <LI> YES --- if the column can include NULLs * <LI> NO --- if the column cannot include NULLs * <LI> empty string --- if the nullability for the * column is unknown * </UL> * <LI><B>SCOPE_CATALOG</B> String {@code =>} catalog of table that is the scope * of a reference attribute ({@code null} if DATA_TYPE isn't REF) * <LI><B>SCOPE_SCHEMA</B> String {@code =>} schema of table that is the scope * of a reference attribute ({@code null} if the DATA_TYPE isn't REF) * <LI><B>SCOPE_TABLE</B> String {@code =>} table name that this the scope * of a reference attribute ({@code null} if the DATA_TYPE isn't REF) * <LI><B>SOURCE_DATA_TYPE</B> short {@code =>} source type of a distinct type or user-generated * Ref type, SQL type from java.sql.Types ({@code null} if DATA_TYPE * isn't DISTINCT or user-generated REF) * <LI><B>IS_AUTOINCREMENT</B> String {@code =>} Indicates whether this column is auto incremented * <UL> * <LI> YES --- if the column is auto incremented * <LI> NO --- if the column is not auto incremented * <LI> empty string --- if it cannot be determined whether the column is auto incremented * </UL> * <LI><B>IS_GENERATEDCOLUMN</B> String {@code =>} Indicates whether this is a generated column * <UL> * <LI> YES --- if this a generated column * <LI> NO --- if this not a generated column * <LI> empty string --- if it cannot be determined whether this is a generated column * </UL> * </OL> * * <p>The COLUMN_SIZE column specifies the column size for the given column. * For numeric data, this is the maximum precision. For character data, this is the length in characters. * For datetime datatypes, this is the length in characters of the String representation (assuming the * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype, * this is the length in bytes. Null is returned for data types where the * column size is not applicable. * * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * {@code null} means that the catalog name should not be used to narrow * the search * @param schemaPattern a schema name pattern; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * {@code null} means that the schema name should not be used to narrow * the search * @param tableNamePattern a table name pattern; must match the * table name as it is stored in the database * @param columnNamePattern a column name pattern; must match the column * name as it is stored in the database * @return {@code ResultSet} - each row is a column description * @throws SQLException if a database access error occurs * @see #getSearchStringEscape */ ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) throws SQLException; /** * Indicates that the column might not allow {@code NULL} values. * <P> * A possible value for the column * {@code NULLABLE} * in the {@code ResultSet} returned by the method * {@code getColumns}. */ int columnNoNulls = 0; /** * Indicates that the column definitely allows {@code NULL} values. * <P> * A possible value for the column * {@code NULLABLE} * in the {@code ResultSet} returned by the method * {@code getColumns}. */ int columnNullable = 1; /** * Indicates that the nullability of columns is unknown. * <P> * A possible value for the column * {@code NULLABLE} * in the {@code ResultSet} returned by the method * {@code getColumns}. */ int columnNullableUnknown = 2; /** * Retrieves a description of the access rights for a table's columns. * * <P>Only privileges matching the column name criteria are * returned. They are ordered by COLUMN_NAME and PRIVILEGE. * * <P>Each privilege description has the following columns: * <OL> * <LI><B>TABLE_CAT</B> String {@code =>} table catalog (may be {@code null}) * <LI><B>TABLE_SCHEM</B> String {@code =>} table schema (may be {@code null}) * <LI><B>TABLE_NAME</B> String {@code =>} table name * <LI><B>COLUMN_NAME</B> String {@code =>} column name * <LI><B>GRANTOR</B> String {@code =>} grantor of access (may be {@code null}) * <LI><B>GRANTEE</B> String {@code =>} grantee of access * <LI><B>PRIVILEGE</B> String {@code =>} name of access (SELECT, * INSERT, UPDATE, REFERENCES, ...) * <LI><B>IS_GRANTABLE</B> String {@code =>} "YES" if grantee is permitted * to grant to others; "NO" if not; {@code null} if unknown * </OL> * * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * {@code null} means that the catalog name should not be used to narrow * the search * @param schema a schema name; must match the schema name as it is * stored in the database; "" retrieves those without a schema; * {@code null} means that the schema name should not be used to narrow * the search * @param table a table name; must match the table name as it is * stored in the database * @param columnNamePattern a column name pattern; must match the column * name as it is stored in the database * @return {@code ResultSet} - each row is a column privilege description * @throws SQLException if a database access error occurs * @see #getSearchStringEscape */ ResultSet getColumnPrivileges(String catalog, String schema, String table, String columnNamePattern) throws SQLException; /** * Retrieves a description of the access rights for each table available * in a catalog. Note that a table privilege applies to one or * more columns in the table. It would be wrong to assume that * this privilege applies to all columns (this may be true for * some systems but is not true for all.) * * <P>Only privileges matching the schema and table name * criteria are returned. They are ordered by * {@code TABLE_CAT}, * {@code TABLE_SCHEM}, {@code TABLE_NAME}, * and {@code PRIVILEGE}. * * <P>Each privilege description has the following columns: * <OL> * <LI><B>TABLE_CAT</B> String {@code =>} table catalog (may be {@code null}) * <LI><B>TABLE_SCHEM</B> String {@code =>} table schema (may be {@code null}) * <LI><B>TABLE_NAME</B> String {@code =>} table name * <LI><B>GRANTOR</B> String {@code =>} grantor of access (may be {@code null}) * <LI><B>GRANTEE</B> String {@code =>} grantee of access * <LI><B>PRIVILEGE</B> String {@code =>} name of access (SELECT, * INSERT, UPDATE, REFERENCES, ...) * <LI><B>IS_GRANTABLE</B> String {@code =>} "YES" if grantee is permitted * to grant to others; "NO" if not; {@code null} if unknown * </OL> * * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * {@code null} means that the catalog name should not be used to narrow * the search * @param schemaPattern a schema name pattern; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * {@code null} means that the schema name should not be used to narrow * the search * @param tableNamePattern a table name pattern; must match the * table name as it is stored in the database * @return {@code ResultSet} - each row is a table privilege description * @throws SQLException if a database access error occurs * @see #getSearchStringEscape */ ResultSet getTablePrivileges(String catalog, String schemaPattern, String tableNamePattern) throws SQLException; /** * Retrieves a description of a table's optimal set of columns that * uniquely identifies a row. They are ordered by SCOPE. * * <P>Each column description has the following columns: * <OL> * <LI><B>SCOPE</B> short {@code =>} actual scope of result * <UL> * <LI> bestRowTemporary - very temporary, while using row * <LI> bestRowTransaction - valid for remainder of current transaction * <LI> bestRowSession - valid for remainder of current session * </UL> * <LI><B>COLUMN_NAME</B> String {@code =>} column name * <LI><B>DATA_TYPE</B> int {@code =>} SQL data type from java.sql.Types * <LI><B>TYPE_NAME</B> String {@code =>} Data source dependent type name, * for a UDT the type name is fully qualified * <LI><B>COLUMN_SIZE</B> int {@code =>} precision * <LI><B>BUFFER_LENGTH</B> int {@code =>} not used * <LI><B>DECIMAL_DIGITS</B> short {@code =>} scale - Null is returned for data types where * DECIMAL_DIGITS is not applicable. * <LI><B>PSEUDO_COLUMN</B> short {@code =>} is this a pseudo column * like an Oracle ROWID * <UL> * <LI> bestRowUnknown - may or may not be pseudo column * <LI> bestRowNotPseudo - is NOT a pseudo column * <LI> bestRowPseudo - is a pseudo column * </UL> * </OL> * * <p>The COLUMN_SIZE column represents the specified column size for the given column. * For numeric data, this is the maximum precision. For character data, this is the length in characters. * For datetime datatypes, this is the length in characters of the String representation (assuming the * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype, * this is the length in bytes. Null is returned for data types where the * column size is not applicable. * * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * {@code null} means that the catalog name should not be used to narrow * the search * @param schema a schema name; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * {@code null} means that the schema name should not be used to narrow * the search * @param table a table name; must match the table name as it is stored * in the database * @param scope the scope of interest; use same values as SCOPE * @param nullable include columns that are nullable. * @return {@code ResultSet} - each row is a column description * @throws SQLException if a database access error occurs */ ResultSet getBestRowIdentifier(String catalog, String schema, String table, int scope, boolean nullable) throws SQLException; /** * Indicates that the scope of the best row identifier is * very temporary, lasting only while the * row is being used. * <P> * A possible value for the column * {@code SCOPE} * in the {@code ResultSet} object * returned by the method {@code getBestRowIdentifier}. */ int bestRowTemporary = 0; /** * Indicates that the scope of the best row identifier is * the remainder of the current transaction. * <P> * A possible value for the column * {@code SCOPE} * in the {@code ResultSet} object * returned by the method {@code getBestRowIdentifier}. */ int bestRowTransaction = 1; /** * Indicates that the scope of the best row identifier is * the remainder of the current session. * <P> * A possible value for the column * {@code SCOPE} * in the {@code ResultSet} object * returned by the method {@code getBestRowIdentifier}. */ int bestRowSession = 2; /** * Indicates that the best row identifier may or may not be a pseudo column. * <P> * A possible value for the column * {@code PSEUDO_COLUMN} * in the {@code ResultSet} object * returned by the method {@code getBestRowIdentifier}. */ int bestRowUnknown = 0; /** * Indicates that the best row identifier is NOT a pseudo column. * <P> * A possible value for the column * {@code PSEUDO_COLUMN} * in the {@code ResultSet} object * returned by the method {@code getBestRowIdentifier}. */ int bestRowNotPseudo = 1; /** * Indicates that the best row identifier is a pseudo column. * <P> * A possible value for the column * {@code PSEUDO_COLUMN} * in the {@code ResultSet} object * returned by the method {@code getBestRowIdentifier}. */ int bestRowPseudo = 2; /** * Retrieves a description of a table's columns that are automatically * updated when any value in a row is updated. They are * unordered. * * <P>Each column description has the following columns: * <OL> * <LI><B>SCOPE</B> short {@code =>} is not used * <LI><B>COLUMN_NAME</B> String {@code =>} column name * <LI><B>DATA_TYPE</B> int {@code =>} SQL data type from {@code java.sql.Types} * <LI><B>TYPE_NAME</B> String {@code =>} Data source-dependent type name * <LI><B>COLUMN_SIZE</B> int {@code =>} precision * <LI><B>BUFFER_LENGTH</B> int {@code =>} length of column value in bytes * <LI><B>DECIMAL_DIGITS</B> short {@code =>} scale - Null is returned for data types where * DECIMAL_DIGITS is not applicable. * <LI><B>PSEUDO_COLUMN</B> short {@code =>} whether this is pseudo column * like an Oracle ROWID * <UL> * <LI> versionColumnUnknown - may or may not be pseudo column * <LI> versionColumnNotPseudo - is NOT a pseudo column * <LI> versionColumnPseudo - is a pseudo column * </UL> * </OL> * * <p>The COLUMN_SIZE column represents the specified column size for the given column. * For numeric data, this is the maximum precision. For character data, this is the length in characters. * For datetime datatypes, this is the length in characters of the String representation (assuming the * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype, * this is the length in bytes. Null is returned for data types where the * column size is not applicable. * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * {@code null} means that the catalog name should not be used to narrow * the search * @param schema a schema name; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * {@code null} means that the schema name should not be used to narrow * the search * @param table a table name; must match the table name as it is stored * in the database * @return a {@code ResultSet} object in which each row is a * column description * @throws SQLException if a database access error occurs */ ResultSet getVersionColumns(String catalog, String schema, String table) throws SQLException; /** * Indicates that this version column may or may not be a pseudo column. * <P> * A possible value for the column * {@code PSEUDO_COLUMN} * in the {@code ResultSet} object * returned by the method {@code getVersionColumns}. */ int versionColumnUnknown = 0; /** * Indicates that this version column is NOT a pseudo column. * <P> * A possible value for the column * {@code PSEUDO_COLUMN} * in the {@code ResultSet} object * returned by the method {@code getVersionColumns}. */ int versionColumnNotPseudo = 1; /** * Indicates that this version column is a pseudo column. * <P> * A possible value for the column * {@code PSEUDO_COLUMN} * in the {@code ResultSet} object * returned by the method {@code getVersionColumns}. */ int versionColumnPseudo = 2; /** * Retrieves a description of the given table's primary key columns. They * are ordered by COLUMN_NAME. * * <P>Each primary key column description has the following columns: * <OL> * <LI><B>TABLE_CAT</B> String {@code =>} table catalog (may be {@code null}) * <LI><B>TABLE_SCHEM</B> String {@code =>} table schema (may be {@code null}) * <LI><B>TABLE_NAME</B> String {@code =>} table name * <LI><B>COLUMN_NAME</B> String {@code =>} column name * <LI><B>KEY_SEQ</B> short {@code =>} sequence number within primary key( a value * of 1 represents the first column of the primary key, a value of 2 would * represent the second column within the primary key). * <LI><B>PK_NAME</B> String {@code =>} primary key name (may be {@code null}) * </OL> * * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * {@code null} means that the catalog name should not be used to narrow * the search * @param schema a schema name; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * {@code null} means that the schema name should not be used to narrow * the search * @param table a table name; must match the table name as it is stored * in the database * @return {@code ResultSet} - each row is a primary key column description * @throws SQLException if a database access error occurs */ ResultSet getPrimaryKeys(String catalog, String schema, String table) throws SQLException; /** * Retrieves a description of the primary key columns that are * referenced by the given table's foreign key columns (the primary keys * imported by a table). They are ordered by PKTABLE_CAT, * PKTABLE_SCHEM, PKTABLE_NAME, and KEY_SEQ. * * <P>Each primary key column description has the following columns: * <OL> * <LI><B>PKTABLE_CAT</B> String {@code =>} primary key table catalog * being imported (may be {@code null}) * <LI><B>PKTABLE_SCHEM</B> String {@code =>} primary key table schema * being imported (may be {@code null}) * <LI><B>PKTABLE_NAME</B> String {@code =>} primary key table name * being imported * <LI><B>PKCOLUMN_NAME</B> String {@code =>} primary key column name * being imported * <LI><B>FKTABLE_CAT</B> String {@code =>} foreign key table catalog (may be {@code null}) * <LI><B>FKTABLE_SCHEM</B> String {@code =>} foreign key table schema (may be {@code null}) * <LI><B>FKTABLE_NAME</B> String {@code =>} foreign key table name * <LI><B>FKCOLUMN_NAME</B> String {@code =>} foreign key column name * <LI><B>KEY_SEQ</B> short {@code =>} sequence number within a foreign key( a value * of 1 represents the first column of the foreign key, a value of 2 would * represent the second column within the foreign key). * <LI><B>UPDATE_RULE</B> short {@code =>} What happens to a * foreign key when the primary key is updated: * <UL> * <LI> importedNoAction - do not allow update of primary * key if it has been imported * <LI> importedKeyCascade - change imported key to agree * with primary key update * <LI> importedKeySetNull - change imported key to {@code NULL} * if its primary key has been updated * <LI> importedKeySetDefault - change imported key to default values * if its primary key has been updated * <LI> importedKeyRestrict - same as importedKeyNoAction * (for ODBC 2.x compatibility) * </UL> * <LI><B>DELETE_RULE</B> short {@code =>} What happens to * the foreign key when primary is deleted. * <UL> * <LI> importedKeyNoAction - do not allow delete of primary * key if it has been imported * <LI> importedKeyCascade - delete rows that import a deleted key * <LI> importedKeySetNull - change imported key to NULL if * its primary key has been deleted * <LI> importedKeyRestrict - same as importedKeyNoAction * (for ODBC 2.x compatibility) * <LI> importedKeySetDefault - change imported key to default if * its primary key has been deleted * </UL> * <LI><B>FK_NAME</B> String {@code =>} foreign key name (may be {@code null}) * <LI><B>PK_NAME</B> String {@code =>} primary key name (may be {@code null}) * <LI><B>DEFERRABILITY</B> short {@code =>} can the evaluation of foreign key * constraints be deferred until commit * <UL> * <LI> importedKeyInitiallyDeferred - see SQL92 for definition * <LI> importedKeyInitiallyImmediate - see SQL92 for definition * <LI> importedKeyNotDeferrable - see SQL92 for definition * </UL> * </OL> * * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * {@code null} means that the catalog name should not be used to narrow * the search * @param schema a schema name; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * {@code null} means that the schema name should not be used to narrow * the search * @param table a table name; must match the table name as it is stored * in the database * @return {@code ResultSet} - each row is a primary key column description * @throws SQLException if a database access error occurs * @see #getExportedKeys */ ResultSet getImportedKeys(String catalog, String schema, String table) throws SQLException; /** * For the column {@code UPDATE_RULE}, * indicates that * when the primary key is updated, the foreign key (imported key) * is changed to agree with it. * For the column {@code DELETE_RULE}, * it indicates that * when the primary key is deleted, rows that imported that key * are deleted. * <P> * A possible value for the columns {@code UPDATE_RULE} * and {@code DELETE_RULE} in the * {@code ResultSet} objects returned by the methods * {@code getImportedKeys}, {@code getExportedKeys}, * and {@code getCrossReference}. */ int importedKeyCascade = 0; /** * For the column {@code UPDATE_RULE}, indicates that * a primary key may not be updated if it has been imported by * another table as a foreign key. * For the column {@code DELETE_RULE}, indicates that * a primary key may not be deleted if it has been imported by * another table as a foreign key. * <P> * A possible value for the columns {@code UPDATE_RULE} * and {@code DELETE_RULE} in the * {@code ResultSet} objects returned by the methods * {@code getImportedKeys}, {@code getExportedKeys}, * and {@code getCrossReference}. */ int importedKeyRestrict = 1; /** * For the columns {@code UPDATE_RULE} * and {@code DELETE_RULE}, indicates that * when the primary key is updated or deleted, the foreign key (imported key) * is changed to {@code NULL}. * <P> * A possible value for the columns {@code UPDATE_RULE} * and {@code DELETE_RULE} in the * {@code ResultSet} objects returned by the methods * {@code getImportedKeys}, {@code getExportedKeys}, * and {@code getCrossReference}. */ int importedKeySetNull = 2; /** * For the columns {@code UPDATE_RULE} * and {@code DELETE_RULE}, indicates that * if the primary key has been imported, it cannot be updated or deleted. * <P> * A possible value for the columns {@code UPDATE_RULE} * and {@code DELETE_RULE} in the * {@code ResultSet} objects returned by the methods * {@code getImportedKeys}, {@code getExportedKeys}, * and {@code getCrossReference}. */ int importedKeyNoAction = 3; /** * For the columns {@code UPDATE_RULE} * and {@code DELETE_RULE}, indicates that * if the primary key is updated or deleted, the foreign key (imported key) * is set to the default value. * <P> * A possible value for the columns {@code UPDATE_RULE} * and {@code DELETE_RULE} in the * {@code ResultSet} objects returned by the methods * {@code getImportedKeys}, {@code getExportedKeys}, * and {@code getCrossReference}. */ int importedKeySetDefault = 4; /** * Indicates deferrability. See SQL-92 for a definition. * <P> * A possible value for the column {@code DEFERRABILITY} * in the {@code ResultSet} objects returned by the methods * {@code getImportedKeys}, {@code getExportedKeys}, * and {@code getCrossReference}. */ int importedKeyInitiallyDeferred = 5; /** * Indicates deferrability. See SQL-92 for a definition. * <P> * A possible value for the column {@code DEFERRABILITY} * in the {@code ResultSet} objects returned by the methods * {@code getImportedKeys}, {@code getExportedKeys}, * and {@code getCrossReference}. */ int importedKeyInitiallyImmediate = 6; /** * Indicates deferrability. See SQL-92 for a definition. * <P> * A possible value for the column {@code DEFERRABILITY} * in the {@code ResultSet} objects returned by the methods * {@code getImportedKeys}, {@code getExportedKeys}, * and {@code getCrossReference}. */ int importedKeyNotDeferrable = 7; /** * Retrieves a description of the foreign key columns that reference the * given table's primary key columns (the foreign keys exported by a * table). They are ordered by FKTABLE_CAT, FKTABLE_SCHEM, * FKTABLE_NAME, and KEY_SEQ. * * <P>Each foreign key column description has the following columns: * <OL> * <LI><B>PKTABLE_CAT</B> String {@code =>} primary key table catalog (may be {@code null}) * <LI><B>PKTABLE_SCHEM</B> String {@code =>} primary key table schema (may be {@code null}) * <LI><B>PKTABLE_NAME</B> String {@code =>} primary key table name * <LI><B>PKCOLUMN_NAME</B> String {@code =>} primary key column name * <LI><B>FKTABLE_CAT</B> String {@code =>} foreign key table catalog (may be {@code null}) * being exported (may be {@code null}) * <LI><B>FKTABLE_SCHEM</B> String {@code =>} foreign key table schema (may be {@code null}) * being exported (may be {@code null}) * <LI><B>FKTABLE_NAME</B> String {@code =>} foreign key table name * being exported * <LI><B>FKCOLUMN_NAME</B> String {@code =>} foreign key column name * being exported * <LI><B>KEY_SEQ</B> short {@code =>} sequence number within foreign key( a value * of 1 represents the first column of the foreign key, a value of 2 would * represent the second column within the foreign key). * <LI><B>UPDATE_RULE</B> short {@code =>} What happens to * foreign key when primary is updated: * <UL> * <LI> importedNoAction - do not allow update of primary * key if it has been imported * <LI> importedKeyCascade - change imported key to agree * with primary key update * <LI> importedKeySetNull - change imported key to {@code NULL} if * its primary key has been updated * <LI> importedKeySetDefault - change imported key to default values * if its primary key has been updated * <LI> importedKeyRestrict - same as importedKeyNoAction * (for ODBC 2.x compatibility) * </UL> * <LI><B>DELETE_RULE</B> short {@code =>} What happens to * the foreign key when primary is deleted. * <UL> * <LI> importedKeyNoAction - do not allow delete of primary * key if it has been imported * <LI> importedKeyCascade - delete rows that import a deleted key * <LI> importedKeySetNull - change imported key to {@code NULL} if * its primary key has been deleted * <LI> importedKeyRestrict - same as importedKeyNoAction * (for ODBC 2.x compatibility) * <LI> importedKeySetDefault - change imported key to default if * its primary key has been deleted * </UL> * <LI><B>FK_NAME</B> String {@code =>} foreign key name (may be {@code null}) * <LI><B>PK_NAME</B> String {@code =>} primary key name (may be {@code null}) * <LI><B>DEFERRABILITY</B> short {@code =>} can the evaluation of foreign key * constraints be deferred until commit * <UL> * <LI> importedKeyInitiallyDeferred - see SQL92 for definition * <LI> importedKeyInitiallyImmediate - see SQL92 for definition * <LI> importedKeyNotDeferrable - see SQL92 for definition * </UL> * </OL> * * @param catalog a catalog name; must match the catalog name as it * is stored in this database; "" retrieves those without a catalog; * {@code null} means that the catalog name should not be used to narrow * the search * @param schema a schema name; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * {@code null} means that the schema name should not be used to narrow * the search * @param table a table name; must match the table name as it is stored * in this database * @return a {@code ResultSet} object in which each row is a * foreign key column description * @throws SQLException if a database access error occurs * @see #getImportedKeys */ ResultSet getExportedKeys(String catalog, String schema, String table) throws SQLException; /** * Retrieves a description of the foreign key columns in the given foreign key * table that reference the primary key or the columns representing a unique constraint of the parent table (could be the same or a different table). * The number of columns returned from the parent table must match the number of * columns that make up the foreign key. They * are ordered by FKTABLE_CAT, FKTABLE_SCHEM, FKTABLE_NAME, and * KEY_SEQ. * * <P>Each foreign key column description has the following columns: * <OL> * <LI><B>PKTABLE_CAT</B> String {@code =>} parent key table catalog (may be {@code null}) * <LI><B>PKTABLE_SCHEM</B> String {@code =>} parent key table schema (may be {@code null}) * <LI><B>PKTABLE_NAME</B> String {@code =>} parent key table name * <LI><B>PKCOLUMN_NAME</B> String {@code =>} parent key column name * <LI><B>FKTABLE_CAT</B> String {@code =>} foreign key table catalog (may be {@code null}) * being exported (may be {@code null}) * <LI><B>FKTABLE_SCHEM</B> String {@code =>} foreign key table schema (may be {@code null}) * being exported (may be {@code null}) * <LI><B>FKTABLE_NAME</B> String {@code =>} foreign key table name * being exported * <LI><B>FKCOLUMN_NAME</B> String {@code =>} foreign key column name * being exported * <LI><B>KEY_SEQ</B> short {@code =>} sequence number within foreign key( a value * of 1 represents the first column of the foreign key, a value of 2 would * represent the second column within the foreign key). * <LI><B>UPDATE_RULE</B> short {@code =>} What happens to * foreign key when parent key is updated: * <UL> * <LI> importedNoAction - do not allow update of parent * key if it has been imported * <LI> importedKeyCascade - change imported key to agree * with parent key update * <LI> importedKeySetNull - change imported key to {@code NULL} if * its parent key has been updated * <LI> importedKeySetDefault - change imported key to default values * if its parent key has been updated * <LI> importedKeyRestrict - same as importedKeyNoAction * (for ODBC 2.x compatibility) * </UL> * <LI><B>DELETE_RULE</B> short {@code =>} What happens to * the foreign key when parent key is deleted. * <UL> * <LI> importedKeyNoAction - do not allow delete of parent * key if it has been imported * <LI> importedKeyCascade - delete rows that import a deleted key * <LI> importedKeySetNull - change imported key to {@code NULL} if * its primary key has been deleted * <LI> importedKeyRestrict - same as importedKeyNoAction * (for ODBC 2.x compatibility) * <LI> importedKeySetDefault - change imported key to default if * its parent key has been deleted * </UL> * <LI><B>FK_NAME</B> String {@code =>} foreign key name (may be {@code null}) * <LI><B>PK_NAME</B> String {@code =>} parent key name (may be {@code null}) * <LI><B>DEFERRABILITY</B> short {@code =>} can the evaluation of foreign key * constraints be deferred until commit * <UL> * <LI> importedKeyInitiallyDeferred - see SQL92 for definition * <LI> importedKeyInitiallyImmediate - see SQL92 for definition * <LI> importedKeyNotDeferrable - see SQL92 for definition * </UL> * </OL> * * @param parentCatalog a catalog name; must match the catalog name * as it is stored in the database; "" retrieves those without a * catalog; {@code null} means drop catalog name from the selection criteria * @param parentSchema a schema name; must match the schema name as * it is stored in the database; "" retrieves those without a schema; * {@code null} means drop schema name from the selection criteria * @param parentTable the name of the table that exports the key; must match * the table name as it is stored in the database * @param foreignCatalog a catalog name; must match the catalog name as * it is stored in the database; "" retrieves those without a * catalog; {@code null} means drop catalog name from the selection criteria * @param foreignSchema a schema name; must match the schema name as it * is stored in the database; "" retrieves those without a schema; * {@code null} means drop schema name from the selection criteria * @param foreignTable the name of the table that imports the key; must match * the table name as it is stored in the database * @return {@code ResultSet} - each row is a foreign key column description * @throws SQLException if a database access error occurs * @see #getImportedKeys */ ResultSet getCrossReference( String parentCatalog, String parentSchema, String parentTable, String foreignCatalog, String foreignSchema, String foreignTable ) throws SQLException; /** * Retrieves a description of all the data types supported by * this database. They are ordered by DATA_TYPE and then by how * closely the data type maps to the corresponding JDBC SQL type. * * <P>If the database supports SQL distinct types, then getTypeInfo() will return * a single row with a TYPE_NAME of DISTINCT and a DATA_TYPE of Types.DISTINCT. * If the database supports SQL structured types, then getTypeInfo() will return * a single row with a TYPE_NAME of STRUCT and a DATA_TYPE of Types.STRUCT. * * <P>If SQL distinct or structured types are supported, then information on the * individual types may be obtained from the getUDTs() method. * * * <P>Each type description has the following columns: * <OL> * <LI><B>TYPE_NAME</B> String {@code =>} Type name * <LI><B>DATA_TYPE</B> int {@code =>} SQL data type from java.sql.Types * <LI><B>PRECISION</B> int {@code =>} maximum precision * <LI><B>LITERAL_PREFIX</B> String {@code =>} prefix used to quote a literal * (may be {@code null}) * <LI><B>LITERAL_SUFFIX</B> String {@code =>} suffix used to quote a literal * (may be {@code null}) * <LI><B>CREATE_PARAMS</B> String {@code =>} parameters used in creating * the type (may be {@code null}) * <LI><B>NULLABLE</B> short {@code =>} can you use NULL for this type. * <UL> * <LI> typeNoNulls - does not allow NULL values * <LI> typeNullable - allows NULL values * <LI> typeNullableUnknown - nullability unknown * </UL> * <LI><B>CASE_SENSITIVE</B> boolean{@code =>} is it case sensitive. * <LI><B>SEARCHABLE</B> short {@code =>} can you use "WHERE" based on this type: * <UL> * <LI> typePredNone - No support * <LI> typePredChar - Only supported with WHERE .. LIKE * <LI> typePredBasic - Supported except for WHERE .. LIKE * <LI> typeSearchable - Supported for all WHERE .. * </UL> * <LI><B>UNSIGNED_ATTRIBUTE</B> boolean {@code =>} is it unsigned. * <LI><B>FIXED_PREC_SCALE</B> boolean {@code =>} can it be a money value. * <LI><B>AUTO_INCREMENT</B> boolean {@code =>} can it be used for an * auto-increment value. * <LI><B>LOCAL_TYPE_NAME</B> String {@code =>} localized version of type name * (may be {@code null}) * <LI><B>MINIMUM_SCALE</B> short {@code =>} minimum scale supported * <LI><B>MAXIMUM_SCALE</B> short {@code =>} maximum scale supported * <LI><B>SQL_DATA_TYPE</B> int {@code =>} unused * <LI><B>SQL_DATETIME_SUB</B> int {@code =>} unused * <LI><B>NUM_PREC_RADIX</B> int {@code =>} usually 2 or 10 * </OL> * * <p>The PRECISION column represents the maximum column size that the server supports for the given datatype. * For numeric data, this is the maximum precision. For character data, this is the length in characters. * For datetime datatypes, this is the length in characters of the String representation (assuming the * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype, * this is the length in bytes. Null is returned for data types where the * column size is not applicable. * * @return a {@code ResultSet} object in which each row is an SQL * type description * @throws SQLException if a database access error occurs */ ResultSet getTypeInfo() throws SQLException; /** * Indicates that a {@code NULL} value is NOT allowed for this * data type. * <P> * A possible value for column {@code NULLABLE} in the * {@code ResultSet} object returned by the method * {@code getTypeInfo}. */ int typeNoNulls = 0; /** * Indicates that a {@code NULL} value is allowed for this * data type. * <P> * A possible value for column {@code NULLABLE} in the * {@code ResultSet} object returned by the method * {@code getTypeInfo}. */ int typeNullable = 1; /** * Indicates that it is not known whether a {@code NULL} value * is allowed for this data type. * <P> * A possible value for column {@code NULLABLE} in the * {@code ResultSet} object returned by the method * {@code getTypeInfo}. */ int typeNullableUnknown = 2; /** * Indicates that {@code WHERE} search clauses are not supported * for this type. * <P> * A possible value for column {@code SEARCHABLE} in the * {@code ResultSet} object returned by the method * {@code getTypeInfo}. */ int typePredNone = 0; /** * Indicates that the data type * can be only be used in {@code WHERE} search clauses * that use {@code LIKE} predicates. * <P> * A possible value for column {@code SEARCHABLE} in the * {@code ResultSet} object returned by the method * {@code getTypeInfo}. */ int typePredChar = 1; /** * Indicates that the data type can be only be used in {@code WHERE} * search clauses * that do not use {@code LIKE} predicates. * <P> * A possible value for column {@code SEARCHABLE} in the * {@code ResultSet} object returned by the method * {@code getTypeInfo}. */ int typePredBasic = 2; /** * Indicates that all {@code WHERE} search clauses can be * based on this type. * <P> * A possible value for column {@code SEARCHABLE} in the * {@code ResultSet} object returned by the method * {@code getTypeInfo}. */ int typeSearchable = 3; /** * Retrieves a description of the given table's indices and statistics. They are * ordered by NON_UNIQUE, TYPE, INDEX_NAME, and ORDINAL_POSITION. * * <P>Each index column description has the following columns: * <OL> * <LI><B>TABLE_CAT</B> String {@code =>} table catalog (may be {@code null}) * <LI><B>TABLE_SCHEM</B> String {@code =>} table schema (may be {@code null}) * <LI><B>TABLE_NAME</B> String {@code =>} table name * <LI><B>NON_UNIQUE</B> boolean {@code =>} Can index values be non-unique. * false when TYPE is tableIndexStatistic * <LI><B>INDEX_QUALIFIER</B> String {@code =>} index catalog (may be {@code null}); * {@code null} when TYPE is tableIndexStatistic * <LI><B>INDEX_NAME</B> String {@code =>} index name; {@code null} when TYPE is * tableIndexStatistic * <LI><B>TYPE</B> short {@code =>} index type: * <UL> * <LI> tableIndexStatistic - this identifies table statistics that are * returned in conjunction with a table's index descriptions * <LI> tableIndexClustered - this is a clustered index * <LI> tableIndexHashed - this is a hashed index * <LI> tableIndexOther - this is some other style of index * </UL> * <LI><B>ORDINAL_POSITION</B> short {@code =>} column sequence number * within index; zero when TYPE is tableIndexStatistic * <LI><B>COLUMN_NAME</B> String {@code =>} column name; {@code null} when TYPE is * tableIndexStatistic * <LI><B>ASC_OR_DESC</B> String {@code =>} column sort sequence, "A" {@code =>} ascending, * "D" {@code =>} descending, may be {@code null} if sort sequence is not supported; * {@code null} when TYPE is tableIndexStatistic * <LI><B>CARDINALITY</B> long {@code =>} When TYPE is tableIndexStatistic, then * this is the number of rows in the table; otherwise, it is the * number of unique values in the index. * <LI><B>PAGES</B> long {@code =>} When TYPE is tableIndexStatistic then * this is the number of pages used for the table, otherwise it * is the number of pages used for the current index. * <LI><B>FILTER_CONDITION</B> String {@code =>} Filter condition, if any. * (may be {@code null}) * </OL> * * @param catalog a catalog name; must match the catalog name as it * is stored in this database; "" retrieves those without a catalog; * {@code null} means that the catalog name should not be used to narrow * the search * @param schema a schema name; must match the schema name * as it is stored in this database; "" retrieves those without a schema; * {@code null} means that the schema name should not be used to narrow * the search * @param table a table name; must match the table name as it is stored * in this database * @param unique when true, return only indices for unique values; * when false, return indices regardless of whether unique or not * @param approximate when true, result is allowed to reflect approximate * or out of data values; when false, results are requested to be * accurate * @return {@code ResultSet} - each row is an index column description * @throws SQLException if a database access error occurs */ ResultSet getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate) throws SQLException; /** * Indicates that this column contains table statistics that * are returned in conjunction with a table's index descriptions. * <P> * A possible value for column {@code TYPE} in the * {@code ResultSet} object returned by the method * {@code getIndexInfo}. */ short tableIndexStatistic = 0; /** * Indicates that this table index is a clustered index. * <P> * A possible value for column {@code TYPE} in the * {@code ResultSet} object returned by the method * {@code getIndexInfo}. */ short tableIndexClustered = 1; /** * Indicates that this table index is a hashed index. * <P> * A possible value for column {@code TYPE} in the * {@code ResultSet} object returned by the method * {@code getIndexInfo}. */ short tableIndexHashed = 2; /** * Indicates that this table index is not a clustered * index, a hashed index, or table statistics; * it is something other than these. * <P> * A possible value for column {@code TYPE} in the * {@code ResultSet} object returned by the method * {@code getIndexInfo}. */ short tableIndexOther = 3; //--------------------------JDBC 2.0----------------------------- /** * Retrieves whether this database supports the given result set type. * * @param type defined in {@code java.sql.ResultSet} * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs * @see Connection * @since 1.2 */ boolean supportsResultSetType(int type) throws SQLException; /** * Retrieves whether this database supports the given concurrency type * in combination with the given result set type. * * @param type defined in {@code java.sql.ResultSet} * @param concurrency type defined in {@code java.sql.ResultSet} * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs * @see Connection * @since 1.2 */ boolean supportsResultSetConcurrency(int type, int concurrency) throws SQLException; /** * * Retrieves whether for the given type of {@code ResultSet} object, * the result set's own updates are visible. * * @param type the {@code ResultSet} type; one of * {@code ResultSet.TYPE_FORWARD_ONLY}, * {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or * {@code ResultSet.TYPE_SCROLL_SENSITIVE} * @return {@code true} if updates are visible for the given result set type; * {@code false} otherwise * @throws SQLException if a database access error occurs * @since 1.2 */ boolean ownUpdatesAreVisible(int type) throws SQLException; /** * Retrieves whether a result set's own deletes are visible. * * @param type the {@code ResultSet} type; one of * {@code ResultSet.TYPE_FORWARD_ONLY}, * {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or * {@code ResultSet.TYPE_SCROLL_SENSITIVE} * @return {@code true} if deletes are visible for the given result set type; * {@code false} otherwise * @throws SQLException if a database access error occurs * @since 1.2 */ boolean ownDeletesAreVisible(int type) throws SQLException; /** * Retrieves whether a result set's own inserts are visible. * * @param type the {@code ResultSet} type; one of * {@code ResultSet.TYPE_FORWARD_ONLY}, * {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or * {@code ResultSet.TYPE_SCROLL_SENSITIVE} * @return {@code true} if inserts are visible for the given result set type; * {@code false} otherwise * @throws SQLException if a database access error occurs * @since 1.2 */ boolean ownInsertsAreVisible(int type) throws SQLException; /** * Retrieves whether updates made by others are visible. * * @param type the {@code ResultSet} type; one of * {@code ResultSet.TYPE_FORWARD_ONLY}, * {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or * {@code ResultSet.TYPE_SCROLL_SENSITIVE} * @return {@code true} if updates made by others * are visible for the given result set type; * {@code false} otherwise * @throws SQLException if a database access error occurs * @since 1.2 */ boolean othersUpdatesAreVisible(int type) throws SQLException; /** * Retrieves whether deletes made by others are visible. * * @param type the {@code ResultSet} type; one of * {@code ResultSet.TYPE_FORWARD_ONLY}, * {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or * {@code ResultSet.TYPE_SCROLL_SENSITIVE} * @return {@code true} if deletes made by others * are visible for the given result set type; * {@code false} otherwise * @throws SQLException if a database access error occurs * @since 1.2 */ boolean othersDeletesAreVisible(int type) throws SQLException; /** * Retrieves whether inserts made by others are visible. * * @param type the {@code ResultSet} type; one of * {@code ResultSet.TYPE_FORWARD_ONLY}, * {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or * {@code ResultSet.TYPE_SCROLL_SENSITIVE} * @return {@code true} if inserts made by others * are visible for the given result set type; * {@code false} otherwise * @throws SQLException if a database access error occurs * @since 1.2 */ boolean othersInsertsAreVisible(int type) throws SQLException; /** * Retrieves whether or not a visible row update can be detected by * calling the method {@code ResultSet.rowUpdated}. * * @param type the {@code ResultSet} type; one of * {@code ResultSet.TYPE_FORWARD_ONLY}, * {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or * {@code ResultSet.TYPE_SCROLL_SENSITIVE} * @return {@code true} if changes are detected by the result set type; * {@code false} otherwise * @throws SQLException if a database access error occurs * @since 1.2 */ boolean updatesAreDetected(int type) throws SQLException; /** * Retrieves whether or not a visible row delete can be detected by * calling the method {@code ResultSet.rowDeleted}. If the method * {@code deletesAreDetected} returns {@code false}, it means that * deleted rows are removed from the result set. * * @param type the {@code ResultSet} type; one of * {@code ResultSet.TYPE_FORWARD_ONLY}, * {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or * {@code ResultSet.TYPE_SCROLL_SENSITIVE} * @return {@code true} if deletes are detected by the given result set type; * {@code false} otherwise * @throws SQLException if a database access error occurs * @since 1.2 */ boolean deletesAreDetected(int type) throws SQLException; /** * Retrieves whether or not a visible row insert can be detected * by calling the method {@code ResultSet.rowInserted}. * * @param type the {@code ResultSet} type; one of * {@code ResultSet.TYPE_FORWARD_ONLY}, * {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or * {@code ResultSet.TYPE_SCROLL_SENSITIVE} * @return {@code true} if changes are detected by the specified result * set type; {@code false} otherwise * @throws SQLException if a database access error occurs * @since 1.2 */ boolean insertsAreDetected(int type) throws SQLException; /** * Retrieves whether this database supports batch updates. * * @return {@code true} if this database supports batch updates; * {@code false} otherwise * @throws SQLException if a database access error occurs * @since 1.2 */ boolean supportsBatchUpdates() throws SQLException; /** * Retrieves a description of the user-defined types (UDTs) defined * in a particular schema. Schema-specific UDTs may have type * {@code JAVA_OBJECT}, {@code STRUCT}, * or {@code DISTINCT}. * * <P>Only types matching the catalog, schema, type name and type * criteria are returned. They are ordered by {@code DATA_TYPE}, * {@code TYPE_CAT}, {@code TYPE_SCHEM} and * {@code TYPE_NAME}. The type name parameter may be a fully-qualified * name. In this case, the catalog and schemaPattern parameters are * ignored. * * <P>Each type description has the following columns: * <OL> * <LI><B>TYPE_CAT</B> String {@code =>} the type's catalog (may be {@code null}) * <LI><B>TYPE_SCHEM</B> String {@code =>} type's schema (may be {@code null}) * <LI><B>TYPE_NAME</B> String {@code =>} type name * <LI><B>CLASS_NAME</B> String {@code =>} Java class name * <LI><B>DATA_TYPE</B> int {@code =>} type value defined in java.sql.Types. * One of JAVA_OBJECT, STRUCT, or DISTINCT * <LI><B>REMARKS</B> String {@code =>} explanatory comment on the type * <LI><B>BASE_TYPE</B> short {@code =>} type code of the source type of a * DISTINCT type or the type that implements the user-generated * reference type of the SELF_REFERENCING_COLUMN of a structured * type as defined in java.sql.Types ({@code null} if DATA_TYPE is not * DISTINCT or not STRUCT with REFERENCE_GENERATION = USER_DEFINED) * </OL> * * <P><B>Note:</B> If the driver does not support UDTs, an empty * result set is returned. * * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * {@code null} means that the catalog name should not be used to narrow * the search * @param schemaPattern a schema pattern name; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * {@code null} means that the schema name should not be used to narrow * the search * @param typeNamePattern a type name pattern; must match the type name * as it is stored in the database; may be a fully qualified name * @param types a list of user-defined types (JAVA_OBJECT, * STRUCT, or DISTINCT) to include; {@code null} returns all types * @return {@code ResultSet} object in which each row describes a UDT * @throws SQLException if a database access error occurs * @see #getSearchStringEscape * @since 1.2 */ ResultSet getUDTs(String catalog, String schemaPattern, String typeNamePattern, int[] types) throws SQLException; /** * Retrieves the connection that produced this metadata object. * * @return the connection that produced this metadata object * @throws SQLException if a database access error occurs * @since 1.2 */ Connection getConnection() throws SQLException; // ------------------- JDBC 3.0 ------------------------- /** * Retrieves whether this database supports savepoints. * * @return {@code true} if savepoints are supported; * {@code false} otherwise * @throws SQLException if a database access error occurs * @since 1.4 */ boolean supportsSavepoints() throws SQLException; /** * Retrieves whether this database supports named parameters to callable * statements. * * @return {@code true} if named parameters are supported; * {@code false} otherwise * @throws SQLException if a database access error occurs * @since 1.4 */ boolean supportsNamedParameters() throws SQLException; /** * Retrieves whether it is possible to have multiple {@code ResultSet} objects * returned from a {@code CallableStatement} object * simultaneously. * * @return {@code true} if a {@code CallableStatement} object * can return multiple {@code ResultSet} objects * simultaneously; {@code false} otherwise * @throws SQLException if a database access error occurs * @since 1.4 */ boolean supportsMultipleOpenResults() throws SQLException; /** * Retrieves whether auto-generated keys can be retrieved after * a statement has been executed * * @return {@code true} if auto-generated keys can be retrieved * after a statement has executed; {@code false} otherwise * <p>If {@code true} is returned, the JDBC driver must support the * returning of auto-generated keys for at least SQL INSERT statements * * @throws SQLException if a database access error occurs * @since 1.4 */ boolean supportsGetGeneratedKeys() throws SQLException; /** * Retrieves a description of the user-defined type (UDT) hierarchies defined in a * particular schema in this database. Only the immediate super type/ * sub type relationship is modeled. * <P> * Only supertype information for UDTs matching the catalog, * schema, and type name is returned. The type name parameter * may be a fully-qualified name. When the UDT name supplied is a * fully-qualified name, the catalog and schemaPattern parameters are * ignored. * <P> * If a UDT does not have a direct super type, it is not listed here. * A row of the {@code ResultSet} object returned by this method * describes the designated UDT and a direct supertype. A row has the following * columns: * <OL> * <LI><B>TYPE_CAT</B> String {@code =>} the UDT's catalog (may be {@code null}) * <LI><B>TYPE_SCHEM</B> String {@code =>} UDT's schema (may be {@code null}) * <LI><B>TYPE_NAME</B> String {@code =>} type name of the UDT * <LI><B>SUPERTYPE_CAT</B> String {@code =>} the direct super type's catalog * (may be {@code null}) * <LI><B>SUPERTYPE_SCHEM</B> String {@code =>} the direct super type's schema * (may be {@code null}) * <LI><B>SUPERTYPE_NAME</B> String {@code =>} the direct super type's name * </OL> * * <P><B>Note:</B> If the driver does not support type hierarchies, an * empty result set is returned. * * @param catalog a catalog name; "" retrieves those without a catalog; * {@code null} means drop catalog name from the selection criteria * @param schemaPattern a schema name pattern; "" retrieves those * without a schema * @param typeNamePattern a UDT name pattern; may be a fully-qualified * name * @return a {@code ResultSet} object in which a row gives information * about the designated UDT * @throws SQLException if a database access error occurs * @see #getSearchStringEscape * @since 1.4 */ ResultSet getSuperTypes(String catalog, String schemaPattern, String typeNamePattern) throws SQLException; /** * Retrieves a description of the table hierarchies defined in a particular * schema in this database. * * <P>Only supertable information for tables matching the catalog, schema * and table name are returned. The table name parameter may be a fully- * qualified name, in which case, the catalog and schemaPattern parameters * are ignored. If a table does not have a super table, it is not listed here. * Supertables have to be defined in the same catalog and schema as the * sub tables. Therefore, the type description does not need to include * this information for the supertable. * * <P>Each type description has the following columns: * <OL> * <LI><B>TABLE_CAT</B> String {@code =>} the type's catalog (may be {@code null}) * <LI><B>TABLE_SCHEM</B> String {@code =>} type's schema (may be {@code null}) * <LI><B>TABLE_NAME</B> String {@code =>} type name * <LI><B>SUPERTABLE_NAME</B> String {@code =>} the direct super type's name * </OL> * * <P><B>Note:</B> If the driver does not support type hierarchies, an * empty result set is returned. * * @param catalog a catalog name; "" retrieves those without a catalog; * {@code null} means drop catalog name from the selection criteria * @param schemaPattern a schema name pattern; "" retrieves those * without a schema * @param tableNamePattern a table name pattern; may be a fully-qualified * name * @return a {@code ResultSet} object in which each row is a type description * @throws SQLException if a database access error occurs * @see #getSearchStringEscape * @since 1.4 */ ResultSet getSuperTables(String catalog, String schemaPattern, String tableNamePattern) throws SQLException; /** * Indicates that {@code NULL} values might not be allowed. * <P> * A possible value for the column * {@code NULLABLE} in the {@code ResultSet} object * returned by the method {@code getAttributes}. */ short attributeNoNulls = 0; /** * Indicates that {@code NULL} values are definitely allowed. * <P> * A possible value for the column {@code NULLABLE} * in the {@code ResultSet} object * returned by the method {@code getAttributes}. */ short attributeNullable = 1; /** * Indicates that whether {@code NULL} values are allowed is not * known. * <P> * A possible value for the column {@code NULLABLE} * in the {@code ResultSet} object * returned by the method {@code getAttributes}. */ short attributeNullableUnknown = 2; /** * Retrieves a description of the given attribute of the given type * for a user-defined type (UDT) that is available in the given schema * and catalog. * <P> * Descriptions are returned only for attributes of UDTs matching the * catalog, schema, type, and attribute name criteria. They are ordered by * {@code TYPE_CAT}, {@code TYPE_SCHEM}, * {@code TYPE_NAME} and {@code ORDINAL_POSITION}. This description * does not contain inherited attributes. * <P> * The {@code ResultSet} object that is returned has the following * columns: * <OL> * <LI><B>TYPE_CAT</B> String {@code =>} type catalog (may be {@code null}) * <LI><B>TYPE_SCHEM</B> String {@code =>} type schema (may be {@code null}) * <LI><B>TYPE_NAME</B> String {@code =>} type name * <LI><B>ATTR_NAME</B> String {@code =>} attribute name * <LI><B>DATA_TYPE</B> int {@code =>} attribute type SQL type from java.sql.Types * <LI><B>ATTR_TYPE_NAME</B> String {@code =>} Data source dependent type name. * For a UDT, the type name is fully qualified. For a REF, the type name is * fully qualified and represents the target type of the reference type. * <LI><B>ATTR_SIZE</B> int {@code =>} column size. For char or date * types this is the maximum number of characters; for numeric or * decimal types this is precision. * <LI><B>DECIMAL_DIGITS</B> int {@code =>} the number of fractional digits. Null is returned for data types where * DECIMAL_DIGITS is not applicable. * <LI><B>NUM_PREC_RADIX</B> int {@code =>} Radix (typically either 10 or 2) * <LI><B>NULLABLE</B> int {@code =>} whether NULL is allowed * <UL> * <LI> attributeNoNulls - might not allow NULL values * <LI> attributeNullable - definitely allows NULL values * <LI> attributeNullableUnknown - nullability unknown * </UL> * <LI><B>REMARKS</B> String {@code =>} comment describing column (may be {@code null}) * <LI><B>ATTR_DEF</B> String {@code =>} default value (may be {@code null}) * <LI><B>SQL_DATA_TYPE</B> int {@code =>} unused * <LI><B>SQL_DATETIME_SUB</B> int {@code =>} unused * <LI><B>CHAR_OCTET_LENGTH</B> int {@code =>} for char types the * maximum number of bytes in the column * <LI><B>ORDINAL_POSITION</B> int {@code =>} index of the attribute in the UDT * (starting at 1) * <LI><B>IS_NULLABLE</B> String {@code =>} ISO rules are used to determine * the nullability for a attribute. * <UL> * <LI> YES --- if the attribute can include NULLs * <LI> NO --- if the attribute cannot include NULLs * <LI> empty string --- if the nullability for the * attribute is unknown * </UL> * <LI><B>SCOPE_CATALOG</B> String {@code =>} catalog of table that is the * scope of a reference attribute ({@code null} if DATA_TYPE isn't REF) * <LI><B>SCOPE_SCHEMA</B> String {@code =>} schema of table that is the * scope of a reference attribute ({@code null} if DATA_TYPE isn't REF) * <LI><B>SCOPE_TABLE</B> String {@code =>} table name that is the scope of a * reference attribute ({@code null} if the DATA_TYPE isn't REF) * <LI><B>SOURCE_DATA_TYPE</B> short {@code =>} source type of a distinct type or user-generated * Ref type,SQL type from java.sql.Types ({@code null} if DATA_TYPE * isn't DISTINCT or user-generated REF) * </OL> * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * {@code null} means that the catalog name should not be used to narrow * the search * @param schemaPattern a schema name pattern; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * {@code null} means that the schema name should not be used to narrow * the search * @param typeNamePattern a type name pattern; must match the * type name as it is stored in the database * @param attributeNamePattern an attribute name pattern; must match the attribute * name as it is declared in the database * @return a {@code ResultSet} object in which each row is an * attribute description * @throws SQLException if a database access error occurs * @see #getSearchStringEscape * @since 1.4 */ ResultSet getAttributes(String catalog, String schemaPattern, String typeNamePattern, String attributeNamePattern) throws SQLException; /** * Retrieves whether this database supports the given result set holdability. * * @param holdability one of the following constants: * {@code ResultSet.HOLD_CURSORS_OVER_COMMIT} or * {@code ResultSet.CLOSE_CURSORS_AT_COMMIT} * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs * @see Connection * @since 1.4 */ boolean supportsResultSetHoldability(int holdability) throws SQLException; /** * Retrieves this database's default holdability for {@code ResultSet} * objects. * * @return the default holdability; either * {@code ResultSet.HOLD_CURSORS_OVER_COMMIT} or * {@code ResultSet.CLOSE_CURSORS_AT_COMMIT} * @throws SQLException if a database access error occurs * @since 1.4 */ int getResultSetHoldability() throws SQLException; /** * Retrieves the major version number of the underlying database. * * @return the underlying database's major version * @throws SQLException if a database access error occurs * @since 1.4 */ int getDatabaseMajorVersion() throws SQLException; /** * Retrieves the minor version number of the underlying database. * * @return underlying database's minor version * @throws SQLException if a database access error occurs * @since 1.4 */ int getDatabaseMinorVersion() throws SQLException; /** * Retrieves the major JDBC version number for this * driver. * * @return JDBC version major number * @throws SQLException if a database access error occurs * @since 1.4 */ int getJDBCMajorVersion() throws SQLException; /** * Retrieves the minor JDBC version number for this * driver. * * @return JDBC version minor number * @throws SQLException if a database access error occurs * @since 1.4 */ int getJDBCMinorVersion() throws SQLException; /** * A possible return value for the method * {@code DatabaseMetaData.getSQLStateType} which is used to indicate * whether the value returned by the method * {@code SQLException.getSQLState} is an * X/Open (now know as Open Group) SQL CLI SQLSTATE value. * * @since 1.4 */ int sqlStateXOpen = 1; /** * A possible return value for the method * {@code DatabaseMetaData.getSQLStateType} which is used to indicate * whether the value returned by the method * {@code SQLException.getSQLState} is an SQLSTATE value. * * @since 1.6 */ int sqlStateSQL = 2; /** * A possible return value for the method * {@code DatabaseMetaData.getSQLStateType} which is used to indicate * whether the value returned by the method * {@code SQLException.getSQLState} is an SQL99 SQLSTATE value. * <P> * <b>Note:</b>This constant remains only for compatibility reasons. Developers * should use the constant {@code sqlStateSQL} instead. * * @since 1.4 */ int sqlStateSQL99 = sqlStateSQL; /** * Indicates whether the SQLSTATE returned by {@code SQLException.getSQLState} * is X/Open (now known as Open Group) SQL CLI or SQL:2003. * @return the type of SQLSTATE; one of: * sqlStateXOpen or * sqlStateSQL * @throws SQLException if a database access error occurs * @since 1.4 */ int getSQLStateType() throws SQLException; /** * Indicates whether updates made to a LOB are made on a copy or directly * to the LOB. * @return {@code true} if updates are made to a copy of the LOB; * {@code false} if updates are made directly to the LOB * @throws SQLException if a database access error occurs * @since 1.4 */ boolean locatorsUpdateCopy() throws SQLException; /** * Retrieves whether this database supports statement pooling. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs * @since 1.4 */ boolean supportsStatementPooling() throws SQLException; //------------------------- JDBC 4.0 ----------------------------------- /** * Indicates whether this data source supports the SQL {@code ROWID} type, * and the lifetime for which a {@link RowId} object remains valid. * * @return the status indicating the lifetime of a {@code RowId} * @throws SQLException if a database access error occurs * @since 1.6 */ RowIdLifetime getRowIdLifetime() throws SQLException; /** * Retrieves the schema names available in this database. The results * are ordered by {@code TABLE_CATALOG} and * {@code TABLE_SCHEM}. * * <P>The schema columns are: * <OL> * <LI><B>TABLE_SCHEM</B> String {@code =>} schema name * <LI><B>TABLE_CATALOG</B> String {@code =>} catalog name (may be {@code null}) * </OL> * * * @param catalog a catalog name; must match the catalog name as it is stored * in the database;"" retrieves those without a catalog; null means catalog * name should not be used to narrow down the search. * @param schemaPattern a schema name; must match the schema name as it is * stored in the database; null means * schema name should not be used to narrow down the search. * @return a {@code ResultSet} object in which each row is a * schema description * @throws SQLException if a database access error occurs * @see #getSearchStringEscape * @since 1.6 */ ResultSet getSchemas(String catalog, String schemaPattern) throws SQLException; /** * Retrieves whether this database supports invoking user-defined or vendor functions * using the stored procedure escape syntax. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs * @since 1.6 */ boolean supportsStoredFunctionsUsingCallSyntax() throws SQLException; /** * Retrieves whether a {@code SQLException} while autoCommit is {@code true} indicates * that all open ResultSets are closed, even ones that are holdable. When a {@code SQLException} occurs while * autocommit is {@code true}, it is vendor specific whether the JDBC driver responds with a commit operation, a * rollback operation, or by doing neither a commit nor a rollback. A potential result of this difference * is in whether or not holdable ResultSets are closed. * * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs * @since 1.6 */ boolean autoCommitFailureClosesAllResultSets() throws SQLException; /** * Retrieves a list of the client info properties * that the driver supports. The result set contains the following columns * * <ol> * <li><b>NAME</b> String{@code =>} The name of the client info property<br> * <li><b>MAX_LEN</b> int{@code =>} The maximum length of the value for the property<br> * <li><b>DEFAULT_VALUE</b> String{@code =>} The default value of the property<br> * <li><b>DESCRIPTION</b> String{@code =>} A description of the property. This will typically * contain information as to where this property is * stored in the database. * </ol> * <p> * The {@code ResultSet} is sorted by the NAME column * * @return A {@code ResultSet} object; each row is a supported client info * property * * @throws SQLException if a database access error occurs * * @since 1.6 */ ResultSet getClientInfoProperties() throws SQLException; /** * Retrieves a description of the system and user functions available * in the given catalog. * <P> * Only system and user function descriptions matching the schema and * function name criteria are returned. They are ordered by * {@code FUNCTION_CAT}, {@code FUNCTION_SCHEM}, * {@code FUNCTION_NAME} and * {@code SPECIFIC_ NAME}. * * <P>Each function description has the following columns: * <OL> * <LI><B>FUNCTION_CAT</B> String {@code =>} function catalog (may be {@code null}) * <LI><B>FUNCTION_SCHEM</B> String {@code =>} function schema (may be {@code null}) * <LI><B>FUNCTION_NAME</B> String {@code =>} function name. This is the name * used to invoke the function * <LI><B>REMARKS</B> String {@code =>} explanatory comment on the function * <LI><B>FUNCTION_TYPE</B> short {@code =>} kind of function: * <UL> * <LI>functionResultUnknown - Cannot determine if a return value * or table will be returned * <LI> functionNoTable- Does not return a table * <LI> functionReturnsTable - Returns a table * </UL> * <LI><B>SPECIFIC_NAME</B> String {@code =>} the name which uniquely identifies * this function within its schema. This is a user specified, or DBMS * generated, name that may be different then the {@code FUNCTION_NAME} * for example with overload functions * </OL> * <p> * A user may not have permission to execute any of the functions that are * returned by {@code getFunctions} * * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * {@code null} means that the catalog name should not be used to narrow * the search * @param schemaPattern a schema name pattern; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * {@code null} means that the schema name should not be used to narrow * the search * @param functionNamePattern a function name pattern; must match the * function name as it is stored in the database * @return {@code ResultSet} - each row is a function description * @throws SQLException if a database access error occurs * @see #getSearchStringEscape * @since 1.6 */ ResultSet getFunctions(String catalog, String schemaPattern, String functionNamePattern) throws SQLException; /** * Retrieves a description of the given catalog's system or user * function parameters and return type. * * <P>Only descriptions matching the schema, function and * parameter name criteria are returned. They are ordered by * {@code FUNCTION_CAT}, {@code FUNCTION_SCHEM}, * {@code FUNCTION_NAME} and * {@code SPECIFIC_ NAME}. Within this, the return value, * if any, is first. Next are the parameter descriptions in call * order. The column descriptions follow in column number order. * * <P>Each row in the {@code ResultSet} * is a parameter description, column description or * return type description with the following fields: * <OL> * <LI><B>FUNCTION_CAT</B> String {@code =>} function catalog (may be {@code null}) * <LI><B>FUNCTION_SCHEM</B> String {@code =>} function schema (may be {@code null}) * <LI><B>FUNCTION_NAME</B> String {@code =>} function name. This is the name * used to invoke the function * <LI><B>COLUMN_NAME</B> String {@code =>} column/parameter name * <LI><B>COLUMN_TYPE</B> Short {@code =>} kind of column/parameter: * <UL> * <LI> functionColumnUnknown - nobody knows * <LI> functionColumnIn - IN parameter * <LI> functionColumnInOut - INOUT parameter * <LI> functionColumnOut - OUT parameter * <LI> functionColumnReturn - function return value * <LI> functionColumnResult - Indicates that the parameter or column * is a column in the {@code ResultSet} * </UL> * <LI><B>DATA_TYPE</B> int {@code =>} SQL type from java.sql.Types * <LI><B>TYPE_NAME</B> String {@code =>} SQL type name, for a UDT type the * type name is fully qualified * <LI><B>PRECISION</B> int {@code =>} precision * <LI><B>LENGTH</B> int {@code =>} length in bytes of data * <LI><B>SCALE</B> short {@code =>} scale - null is returned for data types where * SCALE is not applicable. * <LI><B>RADIX</B> short {@code =>} radix * <LI><B>NULLABLE</B> short {@code =>} can it contain NULL. * <UL> * <LI> functionNoNulls - does not allow NULL values * <LI> functionNullable - allows NULL values * <LI> functionNullableUnknown - nullability unknown * </UL> * <LI><B>REMARKS</B> String {@code =>} comment describing column/parameter * <LI><B>CHAR_OCTET_LENGTH</B> int {@code =>} the maximum length of binary * and character based parameters or columns. For any other datatype the returned value * is a NULL * <LI><B>ORDINAL_POSITION</B> int {@code =>} the ordinal position, starting * from 1, for the input and output parameters. A value of 0 * is returned if this row describes the function's return value. * For result set columns, it is the * ordinal position of the column in the result set starting from 1. * <LI><B>IS_NULLABLE</B> String {@code =>} ISO rules are used to determine * the nullability for a parameter or column. * <UL> * <LI> YES --- if the parameter or column can include NULLs * <LI> NO --- if the parameter or column cannot include NULLs * <LI> empty string --- if the nullability for the * parameter or column is unknown * </UL> * <LI><B>SPECIFIC_NAME</B> String {@code =>} the name which uniquely identifies * this function within its schema. This is a user specified, or DBMS * generated, name that may be different then the {@code FUNCTION_NAME} * for example with overload functions * </OL> * * <p>The PRECISION column represents the specified column size for the given * parameter or column. * For numeric data, this is the maximum precision. For character data, this is the length in characters. * For datetime datatypes, this is the length in characters of the String representation (assuming the * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype, * this is the length in bytes. Null is returned for data types where the * column size is not applicable. * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * {@code null} means that the catalog name should not be used to narrow * the search * @param schemaPattern a schema name pattern; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * {@code null} means that the schema name should not be used to narrow * the search * @param functionNamePattern a procedure name pattern; must match the * function name as it is stored in the database * @param columnNamePattern a parameter name pattern; must match the * parameter or column name as it is stored in the database * @return {@code ResultSet} - each row describes a * user function parameter, column or return type * * @throws SQLException if a database access error occurs * @see #getSearchStringEscape * @since 1.6 */ ResultSet getFunctionColumns(String catalog, String schemaPattern, String functionNamePattern, String columnNamePattern) throws SQLException; /** * Indicates that type of the parameter or column is unknown. * <P> * A possible value for the column * {@code COLUMN_TYPE} * in the {@code ResultSet} * returned by the method {@code getFunctionColumns}. */ int functionColumnUnknown = 0; /** * Indicates that the parameter or column is an IN parameter. * <P> * A possible value for the column * {@code COLUMN_TYPE} * in the {@code ResultSet} * returned by the method {@code getFunctionColumns}. * @since 1.6 */ int functionColumnIn = 1; /** * Indicates that the parameter or column is an INOUT parameter. * <P> * A possible value for the column * {@code COLUMN_TYPE} * in the {@code ResultSet} * returned by the method {@code getFunctionColumns}. * @since 1.6 */ int functionColumnInOut = 2; /** * Indicates that the parameter or column is an OUT parameter. * <P> * A possible value for the column * {@code COLUMN_TYPE} * in the {@code ResultSet} * returned by the method {@code getFunctionColumns}. * @since 1.6 */ int functionColumnOut = 3; /** * Indicates that the parameter or column is a return value. * <P> * A possible value for the column * {@code COLUMN_TYPE} * in the {@code ResultSet} * returned by the method {@code getFunctionColumns}. * @since 1.6 */ int functionReturn = 4; /** * Indicates that the parameter or column is a column in a result set. * <P> * A possible value for the column * {@code COLUMN_TYPE} * in the {@code ResultSet} * returned by the method {@code getFunctionColumns}. * @since 1.6 */ int functionColumnResult = 5; /** * Indicates that {@code NULL} values are not allowed. * <P> * A possible value for the column * {@code NULLABLE} * in the {@code ResultSet} object * returned by the method {@code getFunctionColumns}. * @since 1.6 */ int functionNoNulls = 0; /** * Indicates that {@code NULL} values are allowed. * <P> * A possible value for the column * {@code NULLABLE} * in the {@code ResultSet} object * returned by the method {@code getFunctionColumns}. * @since 1.6 */ int functionNullable = 1; /** * Indicates that whether {@code NULL} values are allowed * is unknown. * <P> * A possible value for the column * {@code NULLABLE} * in the {@code ResultSet} object * returned by the method {@code getFunctionColumns}. * @since 1.6 */ int functionNullableUnknown = 2; /** * Indicates that it is not known whether the function returns * a result or a table. * <P> * A possible value for column {@code FUNCTION_TYPE} in the * {@code ResultSet} object returned by the method * {@code getFunctions}. * @since 1.6 */ int functionResultUnknown = 0; /** * Indicates that the function does not return a table. * <P> * A possible value for column {@code FUNCTION_TYPE} in the * {@code ResultSet} object returned by the method * {@code getFunctions}. * @since 1.6 */ int functionNoTable = 1; /** * Indicates that the function returns a table. * <P> * A possible value for column {@code FUNCTION_TYPE} in the * {@code ResultSet} object returned by the method * {@code getFunctions}. * @since 1.6 */ int functionReturnsTable = 2; //--------------------------JDBC 4.1 ----------------------------- /** * Retrieves a description of the pseudo or hidden columns available * in a given table within the specified catalog and schema. * Pseudo or hidden columns may not always be stored within * a table and are not visible in a ResultSet unless they are * specified in the query's outermost SELECT list. Pseudo or hidden * columns may not necessarily be able to be modified. If there are * no pseudo or hidden columns, an empty ResultSet is returned. * * <P>Only column descriptions matching the catalog, schema, table * and column name criteria are returned. They are ordered by * {@code TABLE_CAT},{@code TABLE_SCHEM}, {@code TABLE_NAME} * and {@code COLUMN_NAME}. * * <P>Each column description has the following columns: * <OL> * <LI><B>TABLE_CAT</B> String {@code =>} table catalog (may be {@code null}) * <LI><B>TABLE_SCHEM</B> String {@code =>} table schema (may be {@code null}) * <LI><B>TABLE_NAME</B> String {@code =>} table name * <LI><B>COLUMN_NAME</B> String {@code =>} column name * <LI><B>DATA_TYPE</B> int {@code =>} SQL type from java.sql.Types * <LI><B>COLUMN_SIZE</B> int {@code =>} column size. * <LI><B>DECIMAL_DIGITS</B> int {@code =>} the number of fractional digits. Null is returned for data types where * DECIMAL_DIGITS is not applicable. * <LI><B>NUM_PREC_RADIX</B> int {@code =>} Radix (typically either 10 or 2) * <LI><B>COLUMN_USAGE</B> String {@code =>} The allowed usage for the column. The * value returned will correspond to the enum name returned by {@link PseudoColumnUsage#name PseudoColumnUsage.name()} * <LI><B>REMARKS</B> String {@code =>} comment describing column (may be {@code null}) * <LI><B>CHAR_OCTET_LENGTH</B> int {@code =>} for char types the * maximum number of bytes in the column * <LI><B>IS_NULLABLE</B> String {@code =>} ISO rules are used to determine the nullability for a column. * <UL> * <LI> YES --- if the column can include NULLs * <LI> NO --- if the column cannot include NULLs * <LI> empty string --- if the nullability for the column is unknown * </UL> * </OL> * * <p>The COLUMN_SIZE column specifies the column size for the given column. * For numeric data, this is the maximum precision. For character data, this is the length in characters. * For datetime datatypes, this is the length in characters of the String representation (assuming the * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype, * this is the length in bytes. Null is returned for data types where the * column size is not applicable. * * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * {@code null} means that the catalog name should not be used to narrow * the search * @param schemaPattern a schema name pattern; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * {@code null} means that the schema name should not be used to narrow * the search * @param tableNamePattern a table name pattern; must match the * table name as it is stored in the database * @param columnNamePattern a column name pattern; must match the column * name as it is stored in the database * @return {@code ResultSet} - each row is a column description * @throws SQLException if a database access error occurs * @see PseudoColumnUsage * @since 1.7 */ ResultSet getPseudoColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) throws SQLException; /** * Retrieves whether a generated key will always be returned if the column * name(s) or index(es) specified for the auto generated key column(s) * are valid and the statement succeeds. The key that is returned may or * may not be based on the column(s) for the auto generated key. * Consult your JDBC driver documentation for additional details. * @return {@code true} if so; {@code false} otherwise * @throws SQLException if a database access error occurs * @since 1.7 */ boolean generatedKeyAlwaysReturned() throws SQLException; //--------------------------JDBC 4.2 ----------------------------- /** * * Retrieves the maximum number of bytes this database allows for * the logical size for a {@code LOB}. *<p> * The default implementation will return {@code 0} * * @return the maximum number of bytes allowed; a result of zero * means that there is no limit or the limit is not known * @throws SQLException if a database access error occurs * @since 1.8 */ default long getMaxLogicalLobSize() throws SQLException { return 0; } /** * Retrieves whether this database supports REF CURSOR. *<p> * The default implementation will return {@code false} * * @return {@code true} if this database supports REF CURSOR; * {@code false} otherwise * @throws SQLException if a database access error occurs * @since 1.8 */ default boolean supportsRefCursors() throws SQLException{ return false; } // JDBC 4.3 /** * Retrieves whether this database supports sharding. * @implSpec * The default implementation will return {@code false} * * @return {@code true} if this database supports sharding; * {@code false} otherwise * @throws SQLException if a database access error occurs * @since 9 */ default boolean supportsSharding() throws SQLException { return false; } }