Save This Page
Home » openjdk-7 » java » sql » [javadoc | source]
    1   /*
    2    * Copyright 1996-2006 Sun Microsystems, Inc.  All Rights Reserved.
    3    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    4    *
    5    * This code is free software; you can redistribute it and/or modify it
    6    * under the terms of the GNU General Public License version 2 only, as
    7    * published by the Free Software Foundation.  Sun designates this
    8    * particular file as subject to the "Classpath" exception as provided
    9    * by Sun in the LICENSE file that accompanied this code.
   10    *
   11    * This code is distributed in the hope that it will be useful, but WITHOUT
   12    * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   13    * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   14    * version 2 for more details (a copy is included in the LICENSE file that
   15    * accompanied this code).
   16    *
   17    * You should have received a copy of the GNU General Public License version
   18    * 2 along with this work; if not, write to the Free Software Foundation,
   19    * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   20    *
   21    * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
   22    * CA 95054 USA or visit www.sun.com if you need additional information or
   23    * have any questions.
   24    */
   25   
   26   
   27   package java.sql;
   28   
   29   /**
   30    * Comprehensive information about the database as a whole.
   31    * <P>
   32    * This interface is implemented by driver vendors to let users know the capabilities
   33    * of a Database Management System (DBMS) in combination with
   34    * the driver based on JDBC<sup><font size=-2>TM</font></sup> technology
   35    * ("JDBC driver") that is used with it.  Different relational DBMSs often support
   36    * different features, implement features in different ways, and use different
   37    * data types.  In addition, a driver may implement a feature on top of what the
   38    * DBMS offers.  Information returned by methods in this interface applies
   39    * to the capabilities of a particular driver and a particular DBMS working
   40    * together. Note that as used in this documentation, the term "database" is
   41    * used generically to refer to both the driver and DBMS.
   42    * <P>
   43    * A user for this interface is commonly a tool that needs to discover how to
   44    * deal with the underlying DBMS.  This is especially true for applications
   45    * that are intended to be used with more than one DBMS. For example, a tool might use the method
   46    * <code>getTypeInfo</code> to find out what data types can be used in a
   47    * <code>CREATE TABLE</code> statement.  Or a user might call the method
   48    * <code>supportsCorrelatedSubqueries</code> to see if it is possible to use
   49    * a correlated subquery or <code>supportsBatchUpdates</code> to see if it is
   50    * possible to use batch updates.
   51    * <P>
   52    * Some <code>DatabaseMetaData</code> methods return lists of information
   53    * in the form of <code>ResultSet</code> objects.
   54    * Regular <code>ResultSet</code> methods, such as
   55    * <code>getString</code> and <code>getInt</code>, can be used
   56    * to retrieve the data from these <code>ResultSet</code> objects.  If
   57    * a given form of metadata is not available, an empty <code>ResultSet</code>
   58    * will be returned. Additional columns beyond the columns defined to be
   59    * returned by the <code>ResultSet</code> object for a given method
   60    * can be defined by the JDBC driver vendor and must be accessed
   61    * by their <B>column label</B>.
   62    * <P>
   63    * Some <code>DatabaseMetaData</code> methods take arguments that are
   64    * String patterns.  These arguments all have names such as fooPattern.
   65    * Within a pattern String, "%" means match any substring of 0 or more
   66    * characters, and "_" means match any one character. Only metadata
   67    * entries matching the search pattern are returned. If a search pattern
   68    * argument is set to <code>null</code>, that argument's criterion will
   69    * be dropped from the search.
   70    * <P>
   71    */
   72   public interface DatabaseMetaData extends Wrapper {
   73   
   74       //----------------------------------------------------------------------
   75       // First, a variety of minor information about the target database.
   76   
   77       /**
   78        * Retrieves whether the current user can call all the procedures
   79        * returned by the method <code>getProcedures</code>.
   80        *
   81        * @return <code>true</code> if so; <code>false</code> otherwise
   82        * @exception SQLException if a database access error occurs
   83        */
   84       boolean allProceduresAreCallable() throws SQLException;
   85   
   86       /**
   87        * Retrieves whether the current user can use all the tables returned
   88        * by the method <code>getTables</code> in a <code>SELECT</code>
   89        * statement.
   90        *
   91        * @return <code>true</code> if so; <code>false</code> otherwise
   92        * @exception SQLException if a database access error occurs
   93        */
   94       boolean allTablesAreSelectable() throws SQLException;
   95   
   96       /**
   97        * Retrieves the URL for this DBMS.
   98        *
   99        * @return the URL for this DBMS or <code>null</code> if it cannot be
  100        *          generated
  101        * @exception SQLException if a database access error occurs
  102        */
  103       String getURL() throws SQLException;
  104   
  105       /**
  106        * Retrieves the user name as known to this database.
  107        *
  108        * @return the database user name
  109        * @exception SQLException if a database access error occurs
  110        */
  111       String getUserName() throws SQLException;
  112   
  113       /**
  114        * Retrieves whether this database is in read-only mode.
  115        *
  116        * @return <code>true</code> if so; <code>false</code> otherwise
  117        * @exception SQLException if a database access error occurs
  118        */
  119       boolean isReadOnly() throws SQLException;
  120   
  121       /**
  122        * Retrieves whether <code>NULL</code> values are sorted high.
  123        * Sorted high means that <code>NULL</code> values
  124        * sort higher than any other value in a domain.  In an ascending order,
  125        * if this method returns <code>true</code>,  <code>NULL</code> values
  126        * will appear at the end. By contrast, the method
  127        * <code>nullsAreSortedAtEnd</code> indicates whether <code>NULL</code> values
  128        * are sorted at the end regardless of sort order.
  129        *
  130        * @return <code>true</code> if so; <code>false</code> otherwise
  131        * @exception SQLException if a database access error occurs
  132        */
  133       boolean nullsAreSortedHigh() throws SQLException;
  134   
  135       /**
  136        * Retrieves whether <code>NULL</code> values are sorted low.
  137        * Sorted low means that <code>NULL</code> values
  138        * sort lower than any other value in a domain.  In an ascending order,
  139        * if this method returns <code>true</code>,  <code>NULL</code> values
  140        * will appear at the beginning. By contrast, the method
  141        * <code>nullsAreSortedAtStart</code> indicates whether <code>NULL</code> values
  142        * are sorted at the beginning regardless of sort order.
  143        *
  144        * @return <code>true</code> if so; <code>false</code> otherwise
  145        * @exception SQLException if a database access error occurs
  146        */
  147       boolean nullsAreSortedLow() throws SQLException;
  148   
  149       /**
  150        * Retrieves whether <code>NULL</code> values are sorted at the start regardless
  151        * of sort order.
  152        *
  153        * @return <code>true</code> if so; <code>false</code> otherwise
  154        * @exception SQLException if a database access error occurs
  155        */
  156       boolean nullsAreSortedAtStart() throws SQLException;
  157   
  158       /**
  159        * Retrieves whether <code>NULL</code> values are sorted at the end regardless of
  160        * sort order.
  161        *
  162        * @return <code>true</code> if so; <code>false</code> otherwise
  163        * @exception SQLException if a database access error occurs
  164        */
  165       boolean nullsAreSortedAtEnd() throws SQLException;
  166   
  167       /**
  168        * Retrieves the name of this database product.
  169        *
  170        * @return database product name
  171        * @exception SQLException if a database access error occurs
  172        */
  173       String getDatabaseProductName() throws SQLException;
  174   
  175       /**
  176        * Retrieves the version number of this database product.
  177        *
  178        * @return database version number
  179        * @exception SQLException if a database access error occurs
  180        */
  181       String getDatabaseProductVersion() throws SQLException;
  182   
  183       /**
  184        * Retrieves the name of this JDBC driver.
  185        *
  186        * @return JDBC driver name
  187        * @exception SQLException if a database access error occurs
  188        */
  189       String getDriverName() throws SQLException;
  190   
  191       /**
  192        * Retrieves the version number of this JDBC driver as a <code>String</code>.
  193        *
  194        * @return JDBC driver version
  195        * @exception SQLException if a database access error occurs
  196        */
  197       String getDriverVersion() throws SQLException;
  198   
  199       /**
  200        * Retrieves this JDBC driver's major version number.
  201        *
  202        * @return JDBC driver major version
  203        */
  204       int getDriverMajorVersion();
  205   
  206       /**
  207        * Retrieves this JDBC driver's minor version number.
  208        *
  209        * @return JDBC driver minor version number
  210        */
  211       int getDriverMinorVersion();
  212   
  213       /**
  214        * Retrieves whether this database stores tables in a local file.
  215        *
  216        * @return <code>true</code> if so; <code>false</code> otherwise
  217        * @exception SQLException if a database access error occurs
  218        */
  219       boolean usesLocalFiles() throws SQLException;
  220   
  221       /**
  222        * Retrieves whether this database uses a file for each table.
  223        *
  224        * @return <code>true</code> if this database uses a local file for each table;
  225        *         <code>false</code> otherwise
  226        * @exception SQLException if a database access error occurs
  227        */
  228       boolean usesLocalFilePerTable() throws SQLException;
  229   
  230       /**
  231        * Retrieves whether this database treats mixed case unquoted SQL identifiers as
  232        * case sensitive and as a result stores them in mixed case.
  233        *
  234        * @return <code>true</code> if so; <code>false</code> otherwise
  235        * @exception SQLException if a database access error occurs
  236        */
  237       boolean supportsMixedCaseIdentifiers() throws SQLException;
  238   
  239       /**
  240        * Retrieves whether this database treats mixed case unquoted SQL identifiers as
  241        * case insensitive and stores them in upper case.
  242        *
  243        * @return <code>true</code> if so; <code>false</code> otherwise
  244        * @exception SQLException if a database access error occurs
  245        */
  246       boolean storesUpperCaseIdentifiers() throws SQLException;
  247   
  248       /**
  249        * Retrieves whether this database treats mixed case unquoted SQL identifiers as
  250        * case insensitive and stores them in lower case.
  251        *
  252        * @return <code>true</code> if so; <code>false</code> otherwise
  253        * @exception SQLException if a database access error occurs
  254        */
  255       boolean storesLowerCaseIdentifiers() throws SQLException;
  256   
  257       /**
  258        * Retrieves whether this database treats mixed case unquoted SQL identifiers as
  259        * case insensitive and stores them in mixed case.
  260        *
  261        * @return <code>true</code> if so; <code>false</code> otherwise
  262        * @exception SQLException if a database access error occurs
  263        */
  264       boolean storesMixedCaseIdentifiers() throws SQLException;
  265   
  266       /**
  267        * Retrieves whether this database treats mixed case quoted SQL identifiers as
  268        * case sensitive and as a result stores them in mixed case.
  269        *
  270        * @return <code>true</code> if so; <code>false</code> otherwise
  271        * @exception SQLException if a database access error occurs
  272        */
  273       boolean supportsMixedCaseQuotedIdentifiers() throws SQLException;
  274   
  275       /**
  276        * Retrieves whether this database treats mixed case quoted SQL identifiers as
  277        * case insensitive and stores them in upper case.
  278        *
  279        * @return <code>true</code> if so; <code>false</code> otherwise
  280        * @exception SQLException if a database access error occurs
  281        */
  282       boolean storesUpperCaseQuotedIdentifiers() throws SQLException;
  283   
  284       /**
  285        * Retrieves whether this database treats mixed case quoted SQL identifiers as
  286        * case insensitive and stores them in lower case.
  287        *
  288        * @return <code>true</code> if so; <code>false</code> otherwise
  289        * @exception SQLException if a database access error occurs
  290        */
  291       boolean storesLowerCaseQuotedIdentifiers() throws SQLException;
  292   
  293       /**
  294        * Retrieves whether this database treats mixed case quoted SQL identifiers as
  295        * case insensitive and stores them in mixed case.
  296        *
  297        * @return <code>true</code> if so; <code>false</code> otherwise
  298        * @exception SQLException if a database access error occurs
  299        */
  300       boolean storesMixedCaseQuotedIdentifiers() throws SQLException;
  301   
  302       /**
  303        * Retrieves the string used to quote SQL identifiers.
  304        * This method returns a space " " if identifier quoting is not supported.
  305        *
  306        * @return the quoting string or a space if quoting is not supported
  307        * @exception SQLException if a database access error occurs
  308        */
  309       String getIdentifierQuoteString() throws SQLException;
  310   
  311       /**
  312        * Retrieves a comma-separated list of all of this database's SQL keywords
  313        * that are NOT also SQL:2003 keywords.
  314        *
  315        * @return the list of this database's keywords that are not also
  316        *         SQL:2003 keywords
  317        * @exception SQLException if a database access error occurs
  318        */
  319       String getSQLKeywords() throws SQLException;
  320   
  321       /**
  322        * Retrieves a comma-separated list of math functions available with
  323        * this database.  These are the Open /Open CLI math function names used in
  324        * the JDBC function escape clause.
  325        *
  326        * @return the list of math functions supported by this database
  327        * @exception SQLException if a database access error occurs
  328        */
  329       String getNumericFunctions() throws SQLException;
  330   
  331       /**
  332        * Retrieves a comma-separated list of string functions available with
  333        * this database.  These are the  Open Group CLI string function names used
  334        * in the JDBC function escape clause.
  335        *
  336        * @return the list of string functions supported by this database
  337        * @exception SQLException if a database access error occurs
  338        */
  339       String getStringFunctions() throws SQLException;
  340   
  341       /**
  342        * Retrieves a comma-separated list of system functions available with
  343        * this database.  These are the  Open Group CLI system function names used
  344        * in the JDBC function escape clause.
  345        *
  346        * @return a list of system functions supported by this database
  347        * @exception SQLException if a database access error occurs
  348        */
  349       String getSystemFunctions() throws SQLException;
  350   
  351       /**
  352        * Retrieves a comma-separated list of the time and date functions available
  353        * with this database.
  354        *
  355        * @return the list of time and date functions supported by this database
  356        * @exception SQLException if a database access error occurs
  357        */
  358       String getTimeDateFunctions() throws SQLException;
  359   
  360       /**
  361        * Retrieves the string that can be used to escape wildcard characters.
  362        * This is the string that can be used to escape '_' or '%' in
  363        * the catalog search parameters that are a pattern (and therefore use one
  364        * of the wildcard characters).
  365        *
  366        * <P>The '_' character represents any single character;
  367        * the '%' character represents any sequence of zero or
  368        * more characters.
  369        *
  370        * @return the string used to escape wildcard characters
  371        * @exception SQLException if a database access error occurs
  372        */
  373       String getSearchStringEscape() throws SQLException;
  374   
  375       /**
  376        * Retrieves all the "extra" characters that can be used in unquoted
  377        * identifier names (those beyond a-z, A-Z, 0-9 and _).
  378        *
  379        * @return the string containing the extra characters
  380        * @exception SQLException if a database access error occurs
  381        */
  382       String getExtraNameCharacters() throws SQLException;
  383   
  384       //--------------------------------------------------------------------
  385       // Functions describing which features are supported.
  386   
  387       /**
  388        * Retrieves whether this database supports <code>ALTER TABLE</code>
  389        * with add column.
  390        *
  391        * @return <code>true</code> if so; <code>false</code> otherwise
  392        * @exception SQLException if a database access error occurs
  393        */
  394       boolean supportsAlterTableWithAddColumn() throws SQLException;
  395   
  396       /**
  397        * Retrieves whether this database supports <code>ALTER TABLE</code>
  398        * with drop column.
  399        *
  400        * @return <code>true</code> if so; <code>false</code> otherwise
  401        * @exception SQLException if a database access error occurs
  402        */
  403       boolean supportsAlterTableWithDropColumn() throws SQLException;
  404   
  405       /**
  406        * Retrieves whether this database supports column aliasing.
  407        *
  408        * <P>If so, the SQL AS clause can be used to provide names for
  409        * computed columns or to provide alias names for columns as
  410        * required.
  411        *
  412        * @return <code>true</code> if so; <code>false</code> otherwise
  413        * @exception SQLException if a database access error occurs
  414        */
  415       boolean supportsColumnAliasing() throws SQLException;
  416   
  417       /**
  418        * Retrieves whether this database supports concatenations between
  419        * <code>NULL</code> and non-<code>NULL</code> values being
  420        * <code>NULL</code>.
  421        *
  422        * @return <code>true</code> if so; <code>false</code> otherwise
  423        * @exception SQLException if a database access error occurs
  424        */
  425       boolean nullPlusNonNullIsNull() throws SQLException;
  426   
  427       /**
  428        * Retrieves whether this database supports the JDBC scalar function
  429        * <code>CONVERT</code> for the conversion of one JDBC type to another.
  430        * The JDBC types are the generic SQL data types defined
  431        * in <code>java.sql.Types</code>.
  432        *
  433        * @return <code>true</code> if so; <code>false</code> otherwise
  434        * @exception SQLException if a database access error occurs
  435        */
  436       boolean supportsConvert() throws SQLException;
  437   
  438       /**
  439        * Retrieves whether this database supports the JDBC scalar function
  440        * <code>CONVERT</code> for conversions between the JDBC types <i>fromType</i>
  441        * and <i>toType</i>.  The JDBC types are the generic SQL data types defined
  442        * in <code>java.sql.Types</code>.
  443        *
  444        * @param fromType the type to convert from; one of the type codes from
  445        *        the class <code>java.sql.Types</code>
  446        * @param toType the type to convert to; one of the type codes from
  447        *        the class <code>java.sql.Types</code>
  448        * @return <code>true</code> if so; <code>false</code> otherwise
  449        * @exception SQLException if a database access error occurs
  450        * @see Types
  451        */
  452       boolean supportsConvert(int fromType, int toType) throws SQLException;
  453   
  454       /**
  455        * Retrieves whether this database supports table correlation names.
  456        *
  457        * @return <code>true</code> if so; <code>false</code> otherwise
  458        * @exception SQLException if a database access error occurs
  459        */
  460       boolean supportsTableCorrelationNames() throws SQLException;
  461   
  462       /**
  463        * Retrieves whether, when table correlation names are supported, they
  464        * are restricted to being different from the names of the tables.
  465        *
  466        * @return <code>true</code> if so; <code>false</code> otherwise
  467        * @exception SQLException if a database access error occurs
  468        */
  469       boolean supportsDifferentTableCorrelationNames() throws SQLException;
  470   
  471       /**
  472        * Retrieves whether this database supports expressions in
  473        * <code>ORDER BY</code> lists.
  474        *
  475        * @return <code>true</code> if so; <code>false</code> otherwise
  476        * @exception SQLException if a database access error occurs
  477        */
  478       boolean supportsExpressionsInOrderBy() throws SQLException;
  479   
  480       /**
  481        * Retrieves whether this database supports using a column that is
  482        * not in the <code>SELECT</code> statement in an
  483        * <code>ORDER BY</code> clause.
  484        *
  485        * @return <code>true</code> if so; <code>false</code> otherwise
  486        * @exception SQLException if a database access error occurs
  487        */
  488       boolean supportsOrderByUnrelated() throws SQLException;
  489   
  490       /**
  491        * Retrieves whether this database supports some form of
  492        * <code>GROUP BY</code> clause.
  493        *
  494        * @return <code>true</code> if so; <code>false</code> otherwise
  495        * @exception SQLException if a database access error occurs
  496        */
  497       boolean supportsGroupBy() throws SQLException;
  498   
  499       /**
  500        * Retrieves whether this database supports using a column that is
  501        * not in the <code>SELECT</code> statement in a
  502        * <code>GROUP BY</code> clause.
  503        *
  504        * @return <code>true</code> if so; <code>false</code> otherwise
  505        * @exception SQLException if a database access error occurs
  506        */
  507       boolean supportsGroupByUnrelated() throws SQLException;
  508   
  509       /**
  510        * Retrieves whether this database supports using columns not included in
  511        * the <code>SELECT</code> statement in a <code>GROUP BY</code> clause
  512        * provided that all of the columns in the <code>SELECT</code> statement
  513        * are included in the <code>GROUP BY</code> clause.
  514        *
  515        * @return <code>true</code> if so; <code>false</code> otherwise
  516        * @exception SQLException if a database access error occurs
  517        */
  518       boolean supportsGroupByBeyondSelect() throws SQLException;
  519   
  520       /**
  521        * Retrieves whether this database supports specifying a
  522        * <code>LIKE</code> escape clause.
  523        *
  524        * @return <code>true</code> if so; <code>false</code> otherwise
  525        * @exception SQLException if a database access error occurs
  526        */
  527       boolean supportsLikeEscapeClause() throws SQLException;
  528   
  529       /**
  530        * Retrieves whether this database supports getting multiple
  531        * <code>ResultSet</code> objects from a single call to the
  532        * method <code>execute</code>.
  533        *
  534        * @return <code>true</code> if so; <code>false</code> otherwise
  535        * @exception SQLException if a database access error occurs
  536        */
  537       boolean supportsMultipleResultSets() throws SQLException;
  538   
  539       /**
  540        * Retrieves whether this database allows having multiple
  541        * transactions open at once (on different connections).
  542        *
  543        * @return <code>true</code> if so; <code>false</code> otherwise
  544        * @exception SQLException if a database access error occurs
  545        */
  546       boolean supportsMultipleTransactions() throws SQLException;
  547   
  548       /**
  549        * Retrieves whether columns in this database may be defined as non-nullable.
  550        *
  551        * @return <code>true</code> if so; <code>false</code> otherwise
  552        * @exception SQLException if a database access error occurs
  553        */
  554       boolean supportsNonNullableColumns() throws SQLException;
  555   
  556       /**
  557        * Retrieves whether this database supports the ODBC Minimum SQL grammar.
  558        *
  559        * @return <code>true</code> if so; <code>false</code> otherwise
  560        * @exception SQLException if a database access error occurs
  561        */
  562       boolean supportsMinimumSQLGrammar() throws SQLException;
  563   
  564       /**
  565        * Retrieves whether this database supports the ODBC Core SQL grammar.
  566        *
  567        * @return <code>true</code> if so; <code>false</code> otherwise
  568        * @exception SQLException if a database access error occurs
  569        */
  570       boolean supportsCoreSQLGrammar() throws SQLException;
  571   
  572       /**
  573        * Retrieves whether this database supports the ODBC Extended SQL grammar.
  574        *
  575        * @return <code>true</code> if so; <code>false</code> otherwise
  576        * @exception SQLException if a database access error occurs
  577        */
  578       boolean supportsExtendedSQLGrammar() throws SQLException;
  579   
  580       /**
  581        * Retrieves whether this database supports the ANSI92 entry level SQL
  582        * grammar.
  583        *
  584        * @return <code>true</code> if so; <code>false</code> otherwise
  585        * @exception SQLException if a database access error occurs
  586        */
  587       boolean supportsANSI92EntryLevelSQL() throws SQLException;
  588   
  589       /**
  590        * Retrieves whether this database supports the ANSI92 intermediate SQL grammar supported.
  591        *
  592        * @return <code>true</code> if so; <code>false</code> otherwise
  593        * @exception SQLException if a database access error occurs
  594        */
  595       boolean supportsANSI92IntermediateSQL() throws SQLException;
  596   
  597       /**
  598        * Retrieves whether this database supports the ANSI92 full SQL grammar supported.
  599        *
  600        * @return <code>true</code> if so; <code>false</code> otherwise
  601        * @exception SQLException if a database access error occurs
  602        */
  603       boolean supportsANSI92FullSQL() throws SQLException;
  604   
  605       /**
  606        * Retrieves whether this database supports the SQL Integrity
  607        * Enhancement Facility.
  608        *
  609        * @return <code>true</code> if so; <code>false</code> otherwise
  610        * @exception SQLException if a database access error occurs
  611        */
  612       boolean supportsIntegrityEnhancementFacility() throws SQLException;
  613   
  614       /**
  615        * Retrieves whether this database supports some form of outer join.
  616        *
  617        * @return <code>true</code> if so; <code>false</code> otherwise
  618        * @exception SQLException if a database access error occurs
  619        */
  620       boolean supportsOuterJoins() throws SQLException;
  621   
  622       /**
  623        * Retrieves whether this database supports full nested outer joins.
  624        *
  625        * @return <code>true</code> if so; <code>false</code> otherwise
  626        * @exception SQLException if a database access error occurs
  627        */
  628       boolean supportsFullOuterJoins() throws SQLException;
  629   
  630       /**
  631        * Retrieves whether this database provides limited support for outer
  632        * joins.  (This will be <code>true</code> if the method
  633        * <code>supportsFullOuterJoins</code> returns <code>true</code>).
  634        *
  635        * @return <code>true</code> if so; <code>false</code> otherwise
  636        * @exception SQLException if a database access error occurs
  637        */
  638       boolean supportsLimitedOuterJoins() throws SQLException;
  639   
  640       /**
  641        * Retrieves the database vendor's preferred term for "schema".
  642        *
  643        * @return the vendor term for "schema"
  644        * @exception SQLException if a database access error occurs
  645        */
  646       String getSchemaTerm() throws SQLException;
  647   
  648       /**
  649        * Retrieves the database vendor's preferred term for "procedure".
  650        *
  651        * @return the vendor term for "procedure"
  652        * @exception SQLException if a database access error occurs
  653        */
  654       String getProcedureTerm() throws SQLException;
  655   
  656       /**
  657        * Retrieves the database vendor's preferred term for "catalog".
  658        *
  659        * @return the vendor term for "catalog"
  660        * @exception SQLException if a database access error occurs
  661        */
  662       String getCatalogTerm() throws SQLException;
  663   
  664       /**
  665        * Retrieves whether a catalog appears at the start of a fully qualified
  666        * table name.  If not, the catalog appears at the end.
  667        *
  668        * @return <code>true</code> if the catalog name appears at the beginning
  669        *         of a fully qualified table name; <code>false</code> otherwise
  670        * @exception SQLException if a database access error occurs
  671        */
  672       boolean isCatalogAtStart() throws SQLException;
  673   
  674       /**
  675        * Retrieves the <code>String</code> that this database uses as the
  676        * separator between a catalog and table name.
  677        *
  678        * @return the separator string
  679        * @exception SQLException if a database access error occurs
  680        */
  681       String getCatalogSeparator() throws SQLException;
  682   
  683       /**
  684        * Retrieves whether a schema name can be used in a data manipulation statement.
  685        *
  686        * @return <code>true</code> if so; <code>false</code> otherwise
  687        * @exception SQLException if a database access error occurs
  688        */
  689       boolean supportsSchemasInDataManipulation() throws SQLException;
  690   
  691       /**
  692        * Retrieves whether a schema name can be used in a procedure call statement.
  693        *
  694        * @return <code>true</code> if so; <code>false</code> otherwise
  695        * @exception SQLException if a database access error occurs
  696        */
  697       boolean supportsSchemasInProcedureCalls() throws SQLException;
  698   
  699       /**
  700        * Retrieves whether a schema name can be used in a table definition statement.
  701        *
  702        * @return <code>true</code> if so; <code>false</code> otherwise
  703        * @exception SQLException if a database access error occurs
  704        */
  705       boolean supportsSchemasInTableDefinitions() throws SQLException;
  706   
  707       /**
  708        * Retrieves whether a schema name can be used in an index definition statement.
  709        *
  710        * @return <code>true</code> if so; <code>false</code> otherwise
  711        * @exception SQLException if a database access error occurs
  712        */
  713       boolean supportsSchemasInIndexDefinitions() throws SQLException;
  714   
  715       /**
  716        * Retrieves whether a schema name can be used in a privilege definition statement.
  717        *
  718        * @return <code>true</code> if so; <code>false</code> otherwise
  719        * @exception SQLException if a database access error occurs
  720        */
  721       boolean supportsSchemasInPrivilegeDefinitions() throws SQLException;
  722   
  723       /**
  724        * Retrieves whether a catalog name can be used in a data manipulation statement.
  725        *
  726        * @return <code>true</code> if so; <code>false</code> otherwise
  727        * @exception SQLException if a database access error occurs
  728        */
  729       boolean supportsCatalogsInDataManipulation() throws SQLException;
  730   
  731       /**
  732        * Retrieves whether a catalog name can be used in a procedure call statement.
  733        *
  734        * @return <code>true</code> if so; <code>false</code> otherwise
  735        * @exception SQLException if a database access error occurs
  736        */
  737       boolean supportsCatalogsInProcedureCalls() throws SQLException;
  738   
  739       /**
  740        * Retrieves whether a catalog name can be used in a table definition statement.
  741        *
  742        * @return <code>true</code> if so; <code>false</code> otherwise
  743        * @exception SQLException if a database access error occurs
  744        */
  745       boolean supportsCatalogsInTableDefinitions() throws SQLException;
  746   
  747       /**
  748        * Retrieves whether a catalog name can be used in an index definition statement.
  749        *
  750        * @return <code>true</code> if so; <code>false</code> otherwise
  751        * @exception SQLException if a database access error occurs
  752        */
  753       boolean supportsCatalogsInIndexDefinitions() throws SQLException;
  754   
  755       /**
  756        * Retrieves whether a catalog name can be used in a privilege definition statement.
  757        *
  758        * @return <code>true</code> if so; <code>false</code> otherwise
  759        * @exception SQLException if a database access error occurs
  760        */
  761       boolean supportsCatalogsInPrivilegeDefinitions() throws SQLException;
  762   
  763   
  764       /**
  765        * Retrieves whether this database supports positioned <code>DELETE</code>
  766        * statements.
  767        *
  768        * @return <code>true</code> if so; <code>false</code> otherwise
  769        * @exception SQLException if a database access error occurs
  770        */
  771       boolean supportsPositionedDelete() throws SQLException;
  772   
  773       /**
  774        * Retrieves whether this database supports positioned <code>UPDATE</code>
  775        * statements.
  776        *
  777        * @return <code>true</code> if so; <code>false</code> otherwise
  778        * @exception SQLException if a database access error occurs
  779        */
  780       boolean supportsPositionedUpdate() throws SQLException;
  781   
  782       /**
  783        * Retrieves whether this database supports <code>SELECT FOR UPDATE</code>
  784        * statements.
  785        *
  786        * @return <code>true</code> if so; <code>false</code> otherwise
  787        * @exception SQLException if a database access error occurs
  788        */
  789       boolean supportsSelectForUpdate() throws SQLException;
  790   
  791       /**
  792        * Retrieves whether this database supports stored procedure calls
  793        * that use the stored procedure escape syntax.
  794        *
  795        * @return <code>true</code> if so; <code>false</code> otherwise
  796        * @exception SQLException if a database access error occurs
  797        */
  798       boolean supportsStoredProcedures() throws SQLException;
  799   
  800       /**
  801        * Retrieves whether this database supports subqueries in comparison
  802        * expressions.
  803        *
  804        * @return <code>true</code> if so; <code>false</code> otherwise
  805        * @exception SQLException if a database access error occurs
  806        */
  807       boolean supportsSubqueriesInComparisons() throws SQLException;
  808   
  809       /**
  810        * Retrieves whether this database supports subqueries in
  811        * <code>EXISTS</code> expressions.
  812        *
  813        * @return <code>true</code> if so; <code>false</code> otherwise
  814        * @exception SQLException if a database access error occurs
  815        */
  816       boolean supportsSubqueriesInExists() throws SQLException;
  817   
  818       /**
  819        * Retrieves whether this database supports subqueries in
  820        * <code>IN</code> expressions.
  821        *
  822        * @return <code>true</code> if so; <code>false</code> otherwise
  823        * @exception SQLException if a database access error occurs
  824        */
  825       boolean supportsSubqueriesInIns() throws SQLException;
  826   
  827       /**
  828        * Retrieves whether this database supports subqueries in quantified
  829        * expressions.
  830        *
  831        * @return <code>true</code> if so; <code>false</code> otherwise
  832        * @exception SQLException if a database access error occurs
  833        */
  834       boolean supportsSubqueriesInQuantifieds() throws SQLException;
  835   
  836       /**
  837        * Retrieves whether this database supports correlated subqueries.
  838        *
  839        * @return <code>true</code> if so; <code>false</code> otherwise
  840        * @exception SQLException if a database access error occurs
  841        */
  842       boolean supportsCorrelatedSubqueries() throws SQLException;
  843   
  844       /**
  845        * Retrieves whether this database supports SQL <code>UNION</code>.
  846        *
  847        * @return <code>true</code> if so; <code>false</code> otherwise
  848        * @exception SQLException if a database access error occurs
  849        */
  850       boolean supportsUnion() throws SQLException;
  851   
  852       /**
  853        * Retrieves whether this database supports SQL <code>UNION ALL</code>.
  854        *
  855        * @return <code>true</code> if so; <code>false</code> otherwise
  856        * @exception SQLException if a database access error occurs
  857        */
  858       boolean supportsUnionAll() throws SQLException;
  859   
  860       /**
  861        * Retrieves whether this database supports keeping cursors open
  862        * across commits.
  863        *
  864        * @return <code>true</code> if cursors always remain open;
  865        *       <code>false</code> if they might not remain open
  866        * @exception SQLException if a database access error occurs
  867        */
  868       boolean supportsOpenCursorsAcrossCommit() throws SQLException;
  869   
  870       /**
  871        * Retrieves whether this database supports keeping cursors open
  872        * across rollbacks.
  873        *
  874        * @return <code>true</code> if cursors always remain open;
  875        *       <code>false</code> if they might not remain open
  876        * @exception SQLException if a database access error occurs
  877        */
  878       boolean supportsOpenCursorsAcrossRollback() throws SQLException;
  879   
  880       /**
  881        * Retrieves whether this database supports keeping statements open
  882        * across commits.
  883        *
  884        * @return <code>true</code> if statements always remain open;
  885        *       <code>false</code> if they might not remain open
  886        * @exception SQLException if a database access error occurs
  887        */
  888       boolean supportsOpenStatementsAcrossCommit() throws SQLException;
  889   
  890       /**
  891        * Retrieves whether this database supports keeping statements open
  892        * across rollbacks.
  893        *
  894        * @return <code>true</code> if statements always remain open;
  895        *       <code>false</code> if they might not remain open
  896        * @exception SQLException if a database access error occurs
  897        */
  898       boolean supportsOpenStatementsAcrossRollback() throws SQLException;
  899   
  900   
  901   
  902       //----------------------------------------------------------------------
  903       // The following group of methods exposes various limitations
  904       // based on the target database with the current driver.
  905       // Unless otherwise specified, a result of zero means there is no
  906       // limit, or the limit is not known.
  907   
  908       /**
  909        * Retrieves the maximum number of hex characters this database allows in an
  910        * inline binary literal.
  911        *
  912        * @return max the maximum length (in hex characters) for a binary literal;
  913        *      a result of zero means that there is no limit or the limit
  914        *      is not known
  915        * @exception SQLException if a database access error occurs
  916        */
  917       int getMaxBinaryLiteralLength() throws SQLException;
  918   
  919       /**
  920        * Retrieves the maximum number of characters this database allows
  921        * for a character literal.
  922        *
  923        * @return the maximum number of characters allowed for a character literal;
  924        *      a result of zero means that there is no limit or the limit is
  925        *      not known
  926        * @exception SQLException if a database access error occurs
  927        */
  928       int getMaxCharLiteralLength() throws SQLException;
  929   
  930       /**
  931        * Retrieves the maximum number of characters this database allows
  932        * for a column name.
  933        *
  934        * @return the maximum number of characters allowed for a column name;
  935        *      a result of zero means that there is no limit or the limit
  936        *      is not known
  937        * @exception SQLException if a database access error occurs
  938        */
  939       int getMaxColumnNameLength() throws SQLException;
  940   
  941       /**
  942        * Retrieves the maximum number of columns this database allows in a
  943        * <code>GROUP BY</code> clause.
  944        *
  945        * @return the maximum number of columns allowed;
  946        *      a result of zero means that there is no limit or the limit
  947        *      is not known
  948        * @exception SQLException if a database access error occurs
  949        */
  950       int getMaxColumnsInGroupBy() throws SQLException;
  951   
  952       /**
  953        * Retrieves the maximum number of columns this database allows in an index.
  954        *
  955        * @return the maximum number of columns allowed;
  956        *      a result of zero means that there is no limit or the limit
  957        *      is not known
  958        * @exception SQLException if a database access error occurs
  959        */
  960       int getMaxColumnsInIndex() throws SQLException;
  961   
  962       /**
  963        * Retrieves the maximum number of columns this database allows in an
  964        * <code>ORDER BY</code> clause.
  965        *
  966        * @return the maximum number of columns allowed;
  967        *      a result of zero means that there is no limit or the limit
  968        *      is not known
  969        * @exception SQLException if a database access error occurs
  970        */
  971       int getMaxColumnsInOrderBy() throws SQLException;
  972   
  973       /**
  974        * Retrieves the maximum number of columns this database allows in a
  975        * <code>SELECT</code> list.
  976        *
  977        * @return the maximum number of columns allowed;
  978        *      a result of zero means that there is no limit or the limit
  979        *      is not known
  980        * @exception SQLException if a database access error occurs
  981        */
  982       int getMaxColumnsInSelect() throws SQLException;
  983   
  984       /**
  985        * Retrieves the maximum number of columns this database allows in a table.
  986        *
  987        * @return the maximum number of columns allowed;
  988        *      a result of zero means that there is no limit or the limit
  989        *      is not known
  990        * @exception SQLException if a database access error occurs
  991        */
  992       int getMaxColumnsInTable() throws SQLException;
  993   
  994       /**
  995        * Retrieves the maximum number of concurrent connections to this
  996        * database that are possible.
  997        *
  998        * @return the maximum number of active connections possible at one time;
  999        *      a result of zero means that there is no limit or the limit
 1000        *      is not known
 1001        * @exception SQLException if a database access error occurs
 1002        */
 1003       int getMaxConnections() throws SQLException;
 1004   
 1005       /**
 1006        * Retrieves the maximum number of characters that this database allows in a
 1007        * cursor name.
 1008        *
 1009        * @return the maximum number of characters allowed in a cursor name;
 1010        *      a result of zero means that there is no limit or the limit
 1011        *      is not known
 1012        * @exception SQLException if a database access error occurs
 1013        */
 1014       int getMaxCursorNameLength() throws SQLException;
 1015   
 1016       /**
 1017        * Retrieves the maximum number of bytes this database allows for an
 1018        * index, including all of the parts of the index.
 1019        *
 1020        * @return the maximum number of bytes allowed; this limit includes the
 1021        *      composite of all the constituent parts of the index;
 1022        *      a result of zero means that there is no limit or the limit
 1023        *      is not known
 1024        * @exception SQLException if a database access error occurs
 1025        */
 1026       int getMaxIndexLength() throws SQLException;
 1027   
 1028       /**
 1029        * Retrieves the maximum number of characters that this database allows in a
 1030        * schema name.
 1031        *
 1032        * @return the maximum number of characters allowed in a schema name;
 1033        *      a result of zero means that there is no limit or the limit
 1034        *      is not known
 1035        * @exception SQLException if a database access error occurs
 1036        */
 1037       int getMaxSchemaNameLength() throws SQLException;
 1038   
 1039       /**
 1040        * Retrieves the maximum number of characters that this database allows in a
 1041        * procedure name.
 1042        *
 1043        * @return the maximum number of characters allowed in a procedure name;
 1044        *      a result of zero means that there is no limit or the limit
 1045        *      is not known
 1046        * @exception SQLException if a database access error occurs
 1047        */
 1048       int getMaxProcedureNameLength() throws SQLException;
 1049   
 1050       /**
 1051        * Retrieves the maximum number of characters that this database allows in a
 1052        * catalog name.
 1053        *
 1054        * @return the maximum number of characters allowed in a catalog name;
 1055        *      a result of zero means that there is no limit or the limit
 1056        *      is not known
 1057        * @exception SQLException if a database access error occurs
 1058        */
 1059       int getMaxCatalogNameLength() throws SQLException;
 1060   
 1061       /**
 1062        * Retrieves the maximum number of bytes this database allows in
 1063        * a single row.
 1064        *
 1065        * @return the maximum number of bytes allowed for a row; a result of
 1066        *         zero means that there is no limit or the limit is not known
 1067        * @exception SQLException if a database access error occurs
 1068        */
 1069       int getMaxRowSize() throws SQLException;
 1070   
 1071       /**
 1072        * Retrieves whether the return value for the method
 1073        * <code>getMaxRowSize</code> includes the SQL data types
 1074        * <code>LONGVARCHAR</code> and <code>LONGVARBINARY</code>.
 1075        *
 1076        * @return <code>true</code> if so; <code>false</code> otherwise
 1077        * @exception SQLException if a database access error occurs
 1078        */
 1079       boolean doesMaxRowSizeIncludeBlobs() throws SQLException;
 1080   
 1081       /**
 1082        * Retrieves the maximum number of characters this database allows in
 1083        * an SQL statement.
 1084        *
 1085        * @return the maximum number of characters allowed for an SQL statement;
 1086        *      a result of zero means that there is no limit or the limit
 1087        *      is not known
 1088        * @exception SQLException if a database access error occurs
 1089        */
 1090       int getMaxStatementLength() throws SQLException;
 1091   
 1092       /**
 1093        * Retrieves the maximum number of active statements to this database
 1094        * that can be open at the same time.
 1095        *
 1096        * @return the maximum number of statements that can be open at one time;
 1097        *      a result of zero means that there is no limit or the limit
 1098        *      is not known
 1099        * @exception SQLException if a database access error occurs
 1100        */
 1101       int getMaxStatements() throws SQLException;
 1102   
 1103       /**
 1104        * Retrieves the maximum number of characters this database allows in
 1105        * a table name.
 1106        *
 1107        * @return the maximum number of characters allowed for a table name;
 1108        *      a result of zero means that there is no limit or the limit
 1109        *      is not known
 1110        * @exception SQLException if a database access error occurs
 1111        */
 1112       int getMaxTableNameLength() throws SQLException;
 1113   
 1114       /**
 1115        * Retrieves the maximum number of tables this database allows in a
 1116        * <code>SELECT</code> statement.
 1117        *
 1118        * @return the maximum number of tables allowed in a <code>SELECT</code>
 1119        *         statement; a result of zero means that there is no limit or
 1120        *         the limit is not known
 1121        * @exception SQLException if a database access error occurs
 1122        */
 1123       int getMaxTablesInSelect() throws SQLException;
 1124   
 1125       /**
 1126        * Retrieves the maximum number of characters this database allows in
 1127        * a user name.
 1128        *
 1129        * @return the maximum number of characters allowed for a user name;
 1130        *      a result of zero means that there is no limit or the limit
 1131        *      is not known
 1132        * @exception SQLException if a database access error occurs
 1133        */
 1134       int getMaxUserNameLength() throws SQLException;
 1135   
 1136       //----------------------------------------------------------------------
 1137   
 1138       /**
 1139        * Retrieves this database's default transaction isolation level.  The
 1140        * possible values are defined in <code>java.sql.Connection</code>.
 1141        *
 1142        * @return the default isolation level
 1143        * @exception SQLException if a database access error occurs
 1144        * @see Connection
 1145        */
 1146       int getDefaultTransactionIsolation() throws SQLException;
 1147   
 1148       /**
 1149        * Retrieves whether this database supports transactions. If not, invoking the
 1150        * method <code>commit</code> is a noop, and the isolation level is
 1151        * <code>TRANSACTION_NONE</code>.
 1152        *
 1153        * @return <code>true</code> if transactions are supported;
 1154        *         <code>false</code> otherwise
 1155        * @exception SQLException if a database access error occurs
 1156        */
 1157       boolean supportsTransactions() throws SQLException;
 1158   
 1159       /**
 1160        * Retrieves whether this database supports the given transaction isolation level.
 1161        *
 1162        * @param level one of the transaction isolation levels defined in
 1163        *         <code>java.sql.Connection</code>
 1164        * @return <code>true</code> if so; <code>false</code> otherwise
 1165        * @exception SQLException if a database access error occurs
 1166        * @see Connection
 1167        */
 1168       boolean supportsTransactionIsolationLevel(int level)
 1169           throws SQLException;
 1170   
 1171       /**
 1172        * Retrieves whether this database supports both data definition and
 1173        * data manipulation statements within a transaction.
 1174        *
 1175        * @return <code>true</code> if so; <code>false</code> otherwise
 1176        * @exception SQLException if a database access error occurs
 1177        */
 1178       boolean supportsDataDefinitionAndDataManipulationTransactions()
 1179           throws SQLException;
 1180       /**
 1181        * Retrieves whether this database supports only data manipulation
 1182        * statements within a transaction.
 1183        *
 1184        * @return <code>true</code> if so; <code>false</code> otherwise
 1185        * @exception SQLException if a database access error occurs
 1186        */
 1187       boolean supportsDataManipulationTransactionsOnly()
 1188           throws SQLException;
 1189   
 1190       /**
 1191        * Retrieves whether a data definition statement within a transaction forces
 1192        * the transaction to commit.
 1193        *
 1194        * @return <code>true</code> if so; <code>false</code> otherwise
 1195        * @exception SQLException if a database access error occurs
 1196        */
 1197       boolean dataDefinitionCausesTransactionCommit()
 1198           throws SQLException;
 1199   
 1200       /**
 1201        * Retrieves whether this database ignores a data definition statement
 1202        * within a transaction.
 1203        *
 1204        * @return <code>true</code> if so; <code>false</code> otherwise
 1205        * @exception SQLException if a database access error occurs
 1206        */
 1207       boolean dataDefinitionIgnoredInTransactions()
 1208           throws SQLException;
 1209   
 1210       /**
 1211        * Retrieves a description of the stored procedures available in the given
 1212        * catalog.
 1213        * <P>
 1214        * Only procedure descriptions matching the schema and
 1215        * procedure name criteria are returned.  They are ordered by
 1216        * <code>PROCEDURE_CAT</code>, <code>PROCEDURE_SCHEM</code>,
 1217        * <code>PROCEDURE_NAME</code> and <code>SPECIFIC_ NAME</code>.
 1218        *
 1219        * <P>Each procedure description has the the following columns:
 1220        *  <OL>
 1221        *  <LI><B>PROCEDURE_CAT</B> String => procedure catalog (may be <code>null</code>)
 1222        *  <LI><B>PROCEDURE_SCHEM</B> String => procedure schema (may be <code>null</code>)
 1223        *  <LI><B>PROCEDURE_NAME</B> String => procedure name
 1224        *  <LI> reserved for future use
 1225        *  <LI> reserved for future use
 1226        *  <LI> reserved for future use
 1227        *  <LI><B>REMARKS</B> String => explanatory comment on the procedure
 1228        *  <LI><B>PROCEDURE_TYPE</B> short => kind of procedure:
 1229        *      <UL>
 1230        *      <LI> procedureResultUnknown - Cannot determine if  a return value
 1231        *       will be returned
 1232        *      <LI> procedureNoResult - Does not return a return value
 1233        *      <LI> procedureReturnsResult - Returns a return value
 1234        *      </UL>
 1235        *  <LI><B>SPECIFIC_NAME</B> String  => The name which uniquely identifies this
 1236        * procedure within its schema.
 1237        *  </OL>
 1238        * <p>
 1239        * A user may not have permissions to execute any of the procedures that are
 1240        * returned by <code>getProcedures</code>
 1241        *
 1242        * @param catalog a catalog name; must match the catalog name as it
 1243        *        is stored in the database; "" retrieves those without a catalog;
 1244        *        <code>null</code> means that the catalog name should not be used to narrow
 1245        *        the search
 1246        * @param schemaPattern a schema name pattern; must match the schema name
 1247        *        as it is stored in the database; "" retrieves those without a schema;
 1248        *        <code>null</code> means that the schema name should not be used to narrow
 1249        *        the search
 1250        * @param procedureNamePattern a procedure name pattern; must match the
 1251        *        procedure name as it is stored in the database
 1252        * @return <code>ResultSet</code> - each row is a procedure description
 1253        * @exception SQLException if a database access error occurs
 1254        * @see #getSearchStringEscape
 1255        */
 1256       ResultSet getProcedures(String catalog, String schemaPattern,
 1257                               String procedureNamePattern) throws SQLException;
 1258   
 1259       /**
 1260        * Indicates that it is not known whether the procedure returns
 1261        * a result.
 1262        * <P>
 1263        * A possible value for column <code>PROCEDURE_TYPE</code> in the
 1264        * <code>ResultSet</code> object returned by the method
 1265        * <code>getProcedures</code>.
 1266        */
 1267       int procedureResultUnknown  = 0;
 1268   
 1269       /**
 1270        * Indicates that the procedure does not return a result.
 1271        * <P>
 1272        * A possible value for column <code>PROCEDURE_TYPE</code> in the
 1273        * <code>ResultSet</code> object returned by the method
 1274        * <code>getProcedures</code>.
 1275        */
 1276       int procedureNoResult               = 1;
 1277   
 1278       /**
 1279        * Indicates that the procedure returns a result.
 1280        * <P>
 1281        * A possible value for column <code>PROCEDURE_TYPE</code> in the
 1282        * <code>ResultSet</code> object returned by the method
 1283        * <code>getProcedures</code>.
 1284        */
 1285       int procedureReturnsResult  = 2;
 1286   
 1287       /**
 1288        * Retrieves a description of the given catalog's stored procedure parameter
 1289        * and result columns.
 1290        *
 1291        * <P>Only descriptions matching the schema, procedure and
 1292        * parameter name criteria are returned.  They are ordered by
 1293        * PROCEDURE_CAT, PROCEDURE_SCHEM, PROCEDURE_NAME and SPECIFIC_NAME. Within this, the return value,
 1294        * if any, is first. Next are the parameter descriptions in call
 1295        * order. The column descriptions follow in column number order.
 1296        *
 1297        * <P>Each row in the <code>ResultSet</code> is a parameter description or
 1298        * column description with the following fields:
 1299        *  <OL>
 1300        *  <LI><B>PROCEDURE_CAT</B> String => procedure catalog (may be <code>null</code>)
 1301        *  <LI><B>PROCEDURE_SCHEM</B> String => procedure schema (may be <code>null</code>)
 1302        *  <LI><B>PROCEDURE_NAME</B> String => procedure name
 1303        *  <LI><B>COLUMN_NAME</B> String => column/parameter name
 1304        *  <LI><B>COLUMN_TYPE</B> Short => kind of column/parameter:
 1305        *      <UL>
 1306        *      <LI> procedureColumnUnknown - nobody knows
 1307        *      <LI> procedureColumnIn - IN parameter
 1308        *      <LI> procedureColumnInOut - INOUT parameter
 1309        *      <LI> procedureColumnOut - OUT parameter
 1310        *      <LI> procedureColumnReturn - procedure return value
 1311        *      <LI> procedureColumnResult - result column in <code>ResultSet</code>
 1312        *      </UL>
 1313        *  <LI><B>DATA_TYPE</B> int => SQL type from java.sql.Types
 1314        *  <LI><B>TYPE_NAME</B> String => SQL type name, for a UDT type the
 1315        *  type name is fully qualified
 1316        *  <LI><B>PRECISION</B> int => precision
 1317        *  <LI><B>LENGTH</B> int => length in bytes of data
 1318        *  <LI><B>SCALE</B> short => scale -  null is returned for data types where
 1319        * SCALE is not applicable.
 1320        *  <LI><B>RADIX</B> short => radix
 1321        *  <LI><B>NULLABLE</B> short => can it contain NULL.
 1322        *      <UL>
 1323        *      <LI> procedureNoNulls - does not allow NULL values
 1324        *      <LI> procedureNullable - allows NULL values
 1325        *      <LI> procedureNullableUnknown - nullability unknown
 1326        *      </UL>
 1327        *  <LI><B>REMARKS</B> String => comment describing parameter/column
 1328        *  <LI><B>COLUMN_DEF</B> String => default value for the column, which should be interpreted as a string when the value is enclosed in single quotes (may be <code>null</code>)
 1329        *      <UL>
 1330        *      <LI> The string NULL (not enclosed in quotes) - if NULL was specified as the default value
 1331        *      <LI> TRUNCATE (not enclosed in quotes)        - if the specified default value cannot be represented without truncation
 1332        *      <LI> NULL                                     - if a default value was not specified
 1333        *      </UL>
 1334        *  <LI><B>SQL_DATA_TYPE</B> int  => reserved for future use
 1335        *  <LI><B>SQL_DATETIME_SUB</B> int  => reserved for future use
 1336        *  <LI><B>CHAR_OCTET_LENGTH</B> int  => the maximum length of binary and character based columns.  For any other datatype the returned value is a
 1337        * NULL
 1338        *  <LI><B>ORDINAL_POSITION</B> int  => the ordinal position, starting from 1, for the input and output parameters for a procedure. A value of 0
 1339        *is returned if this row describes the procedure's return value.  For result set columns, it is the
 1340        *ordinal position of the column in the result set starting from 1.  If there are
 1341        *multiple result sets, the column ordinal positions are implementation
 1342        * defined.
 1343        *  <LI><B>IS_NULLABLE</B> String  => ISO rules are used to determine the nullability for a column.
 1344        *       <UL>
 1345        *       <LI> YES           --- if the parameter can include NULLs
 1346        *       <LI> NO            --- if the parameter cannot include NULLs
 1347        *       <LI> empty string  --- if the nullability for the
 1348        * parameter is unknown
 1349        *       </UL>
 1350        *  <LI><B>SPECIFIC_NAME</B> String  => the name which uniquely identifies this procedure within its schema.
 1351        *  </OL>
 1352        *
 1353        * <P><B>Note:</B> Some databases may not return the column
 1354        * descriptions for a procedure.
 1355        *
 1356        * <p>The PRECISION column represents the specified column size for the given column.
 1357        * For numeric data, this is the maximum precision.  For character data, this is the length in characters.
 1358        * For datetime datatypes, this is the length in characters of the String representation (assuming the
 1359        * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes.  For the ROWID datatype,
 1360        * this is the length in bytes. Null is returned for data types where the
 1361        * column size is not applicable.
 1362        * @param catalog a catalog name; must match the catalog name as it
 1363        *        is stored in the database; "" retrieves those without a catalog;
 1364        *        <code>null</code> means that the catalog name should not be used to narrow
 1365        *        the search
 1366        * @param schemaPattern a schema name pattern; must match the schema name
 1367        *        as it is stored in the database; "" retrieves those without a schema;
 1368        *        <code>null</code> means that the schema name should not be used to narrow
 1369        *        the search
 1370        * @param procedureNamePattern a procedure name pattern; must match the
 1371        *        procedure name as it is stored in the database
 1372        * @param columnNamePattern a column name pattern; must match the column name
 1373        *        as it is stored in the database
 1374        * @return <code>ResultSet</code> - each row describes a stored procedure parameter or
 1375        *      column
 1376        * @exception SQLException if a database access error occurs
 1377        * @see #getSearchStringEscape
 1378        */
 1379       ResultSet getProcedureColumns(String catalog,
 1380                                     String schemaPattern,
 1381                                     String procedureNamePattern,
 1382                                     String columnNamePattern) throws SQLException;
 1383   
 1384       /**
 1385        * Indicates that type of the column is unknown.
 1386        * <P>
 1387        * A possible value for the column
 1388        * <code>COLUMN_TYPE</code>
 1389        * in the <code>ResultSet</code>
 1390        * returned by the method <code>getProcedureColumns</code>.
 1391        */
 1392       int procedureColumnUnknown = 0;
 1393   
 1394       /**
 1395        * Indicates that the column stores IN parameters.
 1396        * <P>
 1397        * A possible value for the column
 1398        * <code>COLUMN_TYPE</code>
 1399        * in the <code>ResultSet</code>
 1400        * returned by the method <code>getProcedureColumns</code>.
 1401        */
 1402       int procedureColumnIn = 1;
 1403   
 1404       /**
 1405        * Indicates that the column stores INOUT parameters.
 1406        * <P>
 1407        * A possible value for the column
 1408        * <code>COLUMN_TYPE</code>
 1409        * in the <code>ResultSet</code>
 1410        * returned by the method <code>getProcedureColumns</code>.
 1411        */
 1412       int procedureColumnInOut = 2;
 1413   
 1414       /**
 1415        * Indicates that the column stores OUT parameters.
 1416        * <P>
 1417        * A possible value for the column
 1418        * <code>COLUMN_TYPE</code>
 1419        * in the <code>ResultSet</code>
 1420       * returned by the method <code>getProcedureColumns</code>.
 1421        */
 1422       int procedureColumnOut = 4;
 1423       /**
 1424        * Indicates that the column stores return values.
 1425        * <P>
 1426        * A possible value for the column
 1427        * <code>COLUMN_TYPE</code>
 1428        * in the <code>ResultSet</code>
 1429        * returned by the method <code>getProcedureColumns</code>.
 1430        */
 1431       int procedureColumnReturn = 5;
 1432   
 1433       /**
 1434        * Indicates that the column stores results.
 1435        * <P>
 1436        * A possible value for the column
 1437        * <code>COLUMN_TYPE</code>
 1438        * in the <code>ResultSet</code>
 1439        * returned by the method <code>getProcedureColumns</code>.
 1440        */
 1441       int procedureColumnResult = 3;
 1442   
 1443       /**
 1444        * Indicates that <code>NULL</code> values are not allowed.
 1445        * <P>
 1446        * A possible value for the column
 1447        * <code>NULLABLE</code>
 1448        * in the <code>ResultSet</code> object
 1449        * returned by the method <code>getProcedureColumns</code>.
 1450        */
 1451       int procedureNoNulls = 0;
 1452   
 1453       /**
 1454        * Indicates that <code>NULL</code> values are allowed.
 1455        * <P>
 1456        * A possible value for the column
 1457        * <code>NULLABLE</code>
 1458        * in the <code>ResultSet</code> object
 1459        * returned by the method <code>getProcedureColumns</code>.
 1460        */
 1461       int procedureNullable = 1;
 1462   
 1463       /**
 1464        * Indicates that whether <code>NULL</code> values are allowed
 1465        * is unknown.
 1466        * <P>
 1467        * A possible value for the column
 1468        * <code>NULLABLE</code>
 1469        * in the <code>ResultSet</code> object
 1470        * returned by the method <code>getProcedureColumns</code>.
 1471        */
 1472       int procedureNullableUnknown = 2;
 1473   
 1474   
 1475       /**
 1476        * Retrieves a description of the tables available in the given catalog.
 1477        * Only table descriptions matching the catalog, schema, table
 1478        * name and type criteria are returned.  They are ordered by
 1479        * <code>TABLE_TYPE</code>, <code>TABLE_CAT</code>,
 1480        * <code>TABLE_SCHEM</code> and <code>TABLE_NAME</code>.
 1481        * <P>
 1482        * Each table description has the following columns:
 1483        *  <OL>
 1484        *  <LI><B>TABLE_CAT</B> String => table catalog (may be <code>null</code>)
 1485        *  <LI><B>TABLE_SCHEM</B> String => table schema (may be <code>null</code>)
 1486        *  <LI><B>TABLE_NAME</B> String => table name
 1487        *  <LI><B>TABLE_TYPE</B> String => table type.  Typical types are "TABLE",
 1488        *                  "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY",
 1489        *                  "LOCAL TEMPORARY", "ALIAS", "SYNONYM".
 1490        *  <LI><B>REMARKS</B> String => explanatory comment on the table
 1491        *  <LI><B>TYPE_CAT</B> String => the types catalog (may be <code>null</code>)
 1492        *  <LI><B>TYPE_SCHEM</B> String => the types schema (may be <code>null</code>)
 1493        *  <LI><B>TYPE_NAME</B> String => type name (may be <code>null</code>)
 1494        *  <LI><B>SELF_REFERENCING_COL_NAME</B> String => name of the designated
 1495        *                  "identifier" column of a typed table (may be <code>null</code>)
 1496        *  <LI><B>REF_GENERATION</B> String => specifies how values in
 1497        *                  SELF_REFERENCING_COL_NAME are created. Values are
 1498        *                  "SYSTEM", "USER", "DERIVED". (may be <code>null</code>)
 1499        *  </OL>
 1500        *
 1501        * <P><B>Note:</B> Some databases may not return information for
 1502        * all tables.
 1503        *
 1504        * @param catalog a catalog name; must match the catalog name as it
 1505        *        is stored in the database; "" retrieves those without a catalog;
 1506        *        <code>null</code> means that the catalog name should not be used to narrow
 1507        *        the search
 1508        * @param schemaPattern a schema name pattern; must match the schema name
 1509        *        as it is stored in the database; "" retrieves those without a schema;
 1510        *        <code>null</code> means that the schema name should not be used to narrow
 1511        *        the search
 1512        * @param tableNamePattern a table name pattern; must match the
 1513        *        table name as it is stored in the database
 1514        * @param types a list of table types, which must be from the list of table types
 1515        *         returned from {@link #getTableTypes},to include; <code>null</code> returns
 1516        * all types
 1517        * @return <code>ResultSet</code> - each row is a table description
 1518        * @exception SQLException if a database access error occurs
 1519        * @see #getSearchStringEscape
 1520        */
 1521       ResultSet getTables(String catalog, String schemaPattern,
 1522                           String tableNamePattern, String types[]) throws SQLException;
 1523   
 1524       /**
 1525        * Retrieves the schema names available in this database.  The results
 1526        * are ordered by <code>TABLE_CATALOG</code> and
 1527        * <code>TABLE_SCHEM</code>.
 1528        *
 1529        * <P>The schema columns are:
 1530        *  <OL>
 1531        *  <LI><B>TABLE_SCHEM</B> String => schema name
 1532        *  <LI><B>TABLE_CATALOG</B> String => catalog name (may be <code>null</code>)
 1533        *  </OL>
 1534        *
 1535        * @return a <code>ResultSet</code> object in which each row is a
 1536        *         schema description
 1537        * @exception SQLException if a database access error occurs
 1538        *
 1539        */
 1540       ResultSet getSchemas() throws SQLException;
 1541   
 1542       /**
 1543        * Retrieves the catalog names available in this database.  The results
 1544        * are ordered by catalog name.
 1545        *
 1546        * <P>The catalog column is:
 1547        *  <OL>
 1548        *  <LI><B>TABLE_CAT</B> String => catalog name
 1549        *  </OL>
 1550        *
 1551        * @return a <code>ResultSet</code> object in which each row has a
 1552        *         single <code>String</code> column that is a catalog name
 1553        * @exception SQLException if a database access error occurs
 1554        */
 1555       ResultSet getCatalogs() throws SQLException;
 1556   
 1557       /**
 1558        * Retrieves the table types available in this database.  The results
 1559        * are ordered by table type.
 1560        *
 1561        * <P>The table type is:
 1562        *  <OL>
 1563        *  <LI><B>TABLE_TYPE</B> String => table type.  Typical types are "TABLE",
 1564        *                  "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY",
 1565        *                  "LOCAL TEMPORARY", "ALIAS", "SYNONYM".
 1566        *  </OL>
 1567        *
 1568        * @return a <code>ResultSet</code> object in which each row has a
 1569        *         single <code>String</code> column that is a table type
 1570        * @exception SQLException if a database access error occurs
 1571        */
 1572       ResultSet getTableTypes() throws SQLException;
 1573   
 1574       /**
 1575        * Retrieves a description of table columns available in
 1576        * the specified catalog.
 1577        *
 1578        * <P>Only column descriptions matching the catalog, schema, table
 1579        * and column name criteria are returned.  They are ordered by
 1580        * <code>TABLE_CAT</code>,<code>TABLE_SCHEM</code>,
 1581        * <code>TABLE_NAME</code>, and <code>ORDINAL_POSITION</code>.
 1582        *
 1583        * <P>Each column description has the following columns:
 1584        *  <OL>
 1585        *  <LI><B>TABLE_CAT</B> String => table catalog (may be <code>null</code>)
 1586        *  <LI><B>TABLE_SCHEM</B> String => table schema (may be <code>null</code>)
 1587        *  <LI><B>TABLE_NAME</B> String => table name
 1588        *  <LI><B>COLUMN_NAME</B> String => column name
 1589        *  <LI><B>DATA_TYPE</B> int => SQL type from java.sql.Types
 1590        *  <LI><B>TYPE_NAME</B> String => Data source dependent type name,
 1591        *  for a UDT the type name is fully qualified
 1592        *  <LI><B>COLUMN_SIZE</B> int => column size.
 1593        *  <LI><B>BUFFER_LENGTH</B> is not used.
 1594        *  <LI><B>DECIMAL_DIGITS</B> int => the number of fractional digits. Null is returned for data types where
 1595        * DECIMAL_DIGITS is not applicable.
 1596        *  <LI><B>NUM_PREC_RADIX</B> int => Radix (typically either 10 or 2)
 1597        *  <LI><B>NULLABLE</B> int => is NULL allowed.
 1598        *      <UL>
 1599        *      <LI> columnNoNulls - might not allow <code>NULL</code> values
 1600        *      <LI> columnNullable - definitely allows <code>NULL</code> values
 1601        *      <LI> columnNullableUnknown - nullability unknown
 1602        *      </UL>
 1603        *  <LI><B>REMARKS</B> String => comment describing column (may be <code>null</code>)
 1604        *  <LI><B>COLUMN_DEF</B> String => default value for the column, which should be interpreted as a string when the value is enclosed in single quotes (may be <code>null</code>)
 1605        *  <LI><B>SQL_DATA_TYPE</B> int => unused
 1606        *  <LI><B>SQL_DATETIME_SUB</B> int => unused
 1607        *  <LI><B>CHAR_OCTET_LENGTH</B> int => for char types the
 1608        *       maximum number of bytes in the column
 1609        *  <LI><B>ORDINAL_POSITION</B> int => index of column in table
 1610        *      (starting at 1)
 1611        *  <LI><B>IS_NULLABLE</B> String  => ISO rules are used to determine the nullability for a column.
 1612        *       <UL>
 1613        *       <LI> YES           --- if the parameter can include NULLs
 1614        *       <LI> NO            --- if the parameter cannot include NULLs
 1615        *       <LI> empty string  --- if the nullability for the
 1616        * parameter is unknown
 1617        *       </UL>
 1618        *  <LI><B>SCOPE_CATLOG</B> String => catalog of table that is the scope
 1619        *      of a reference attribute (<code>null</code> if DATA_TYPE isn't REF)
 1620        *  <LI><B>SCOPE_SCHEMA</B> String => schema of table that is the scope
 1621        *      of a reference attribute (<code>null</code> if the DATA_TYPE isn't REF)
 1622        *  <LI><B>SCOPE_TABLE</B> String => table name that this the scope
 1623        *      of a reference attribure (<code>null</code> if the DATA_TYPE isn't REF)
 1624        *  <LI><B>SOURCE_DATA_TYPE</B> short => source type of a distinct type or user-generated
 1625        *      Ref type, SQL type from java.sql.Types (<code>null</code> if DATA_TYPE
 1626        *      isn't DISTINCT or user-generated REF)
 1627        *   <LI><B>IS_AUTOINCREMENT</B> String  => Indicates whether this column is auto incremented
 1628        *       <UL>
 1629        *       <LI> YES           --- if the column is auto incremented
 1630        *       <LI> NO            --- if the column is not auto incremented
 1631        *       <LI> empty string  --- if it cannot be determined whether the column is auto incremented
 1632        * parameter is unknown
 1633        *       </UL>
 1634        *  </OL>
 1635        *
 1636        * <p>The COLUMN_SIZE column the specified column size for the given column.
 1637        * For numeric data, this is the maximum precision.  For character data, this is the length in characters.
 1638        * For datetime datatypes, this is the length in characters of the String representation (assuming the
 1639        * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes.  For the ROWID datatype,
 1640        * this is the length in bytes. Null is returned for data types where the
 1641        * column size is not applicable.
 1642        *
 1643        * @param catalog a catalog name; must match the catalog name as it
 1644        *        is stored in the database; "" retrieves those without a catalog;
 1645        *        <code>null</code> means that the catalog name should not be used to narrow
 1646        *        the search
 1647        * @param schemaPattern a schema name pattern; must match the schema name
 1648        *        as it is stored in the database; "" retrieves those without a schema;
 1649        *        <code>null</code> means that the schema name should not be used to narrow
 1650        *        the search
 1651        * @param tableNamePattern a table name pattern; must match the
 1652        *        table name as it is stored in the database
 1653        * @param columnNamePattern a column name pattern; must match the column
 1654        *        name as it is stored in the database
 1655        * @return <code>ResultSet</code> - each row is a column description
 1656        * @exception SQLException if a database access error occurs
 1657        * @see #getSearchStringEscape
 1658        */
 1659       ResultSet getColumns(String catalog, String schemaPattern,
 1660                            String tableNamePattern, String columnNamePattern)
 1661           throws SQLException;
 1662   
 1663       /**
 1664        * Indicates that the column might not allow <code>NULL</code> values.
 1665        * <P>
 1666        * A possible value for the column
 1667        * <code>NULLABLE</code>
 1668        * in the <code>ResultSet</code> returned by the method
 1669        * <code>getColumns</code>.
 1670        */
 1671       int columnNoNulls = 0;
 1672   
 1673       /**
 1674        * Indicates that the column definitely allows <code>NULL</code> values.
 1675        * <P>
 1676        * A possible value for the column
 1677        * <code>NULLABLE</code>
 1678        * in the <code>ResultSet</code> returned by the method
 1679        * <code>getColumns</code>.
 1680        */
 1681       int columnNullable = 1;
 1682   
 1683       /**
 1684        * Indicates that the nullability of columns is unknown.
 1685        * <P>
 1686        * A possible value for the column
 1687        * <code>NULLABLE</code>
 1688        * in the <code>ResultSet</code> returned by the method
 1689        * <code>getColumns</code>.
 1690        */
 1691       int columnNullableUnknown = 2;
 1692   
 1693       /**
 1694        * Retrieves a description of the access rights for a table's columns.
 1695        *
 1696        * <P>Only privileges matching the column name criteria are
 1697        * returned.  They are ordered by COLUMN_NAME and PRIVILEGE.
 1698        *
 1699        * <P>Each privilige description has the following columns:
 1700        *  <OL>
 1701        *  <LI><B>TABLE_CAT</B> String => table catalog (may be <code>null</code>)
 1702        *  <LI><B>TABLE_SCHEM</B> String => table schema (may be <code>null</code>)
 1703        *  <LI><B>TABLE_NAME</B> String => table name
 1704        *  <LI><B>COLUMN_NAME</B> String => column name
 1705        *  <LI><B>GRANTOR</B> String => grantor of access (may be <code>null</code>)
 1706        *  <LI><B>GRANTEE</B> String => grantee of access
 1707        *  <LI><B>PRIVILEGE</B> String => name of access (SELECT,
 1708        *      INSERT, UPDATE, REFRENCES, ...)
 1709        *  <LI><B>IS_GRANTABLE</B> String => "YES" if grantee is permitted
 1710        *      to grant to others; "NO" if not; <code>null</code> if unknown
 1711        *  </OL>
 1712        *
 1713        * @param catalog a catalog name; must match the catalog name as it
 1714        *        is stored in the database; "" retrieves those without a catalog;
 1715        *        <code>null</code> means that the catalog name should not be used to narrow
 1716        *        the search
 1717        * @param schema a schema name; must match the schema name as it is
 1718        *        stored in the database; "" retrieves those without a schema;
 1719        *        <code>null</code> means that the schema name should not be used to narrow
 1720        *        the search
 1721        * @param table a table name; must match the table name as it is
 1722        *        stored in the database
 1723        * @param columnNamePattern a column name pattern; must match the column
 1724        *        name as it is stored in the database
 1725        * @return <code>ResultSet</code> - each row is a column privilege description
 1726        * @exception SQLException if a database access error occurs
 1727        * @see #getSearchStringEscape
 1728        */
 1729       ResultSet getColumnPrivileges(String catalog, String schema,
 1730                                     String table, String columnNamePattern) throws SQLException;
 1731   
 1732       /**
 1733        * Retrieves a description of the access rights for each table available
 1734        * in a catalog. Note that a table privilege applies to one or
 1735        * more columns in the table. It would be wrong to assume that
 1736        * this privilege applies to all columns (this may be true for
 1737        * some systems but is not true for all.)
 1738        *
 1739        * <P>Only privileges matching the schema and table name
 1740        * criteria are returned.  They are ordered by
 1741        * <code>TABLE_CAT</code>,
 1742        * <code>TABLE_SCHEM</code>, <code>TABLE_NAME</code>,
 1743        * and <code>PRIVILEGE</code>.
 1744        *
 1745        * <P>Each privilige description has the following columns:
 1746        *  <OL>
 1747        *  <LI><B>TABLE_CAT</B> String => table catalog (may be <code>null</code>)
 1748        *  <LI><B>TABLE_SCHEM</B> String => table schema (may be <code>null</code>)
 1749        *  <LI><B>TABLE_NAME</B> String => table name
 1750        *  <LI><B>GRANTOR</B> String => grantor of access (may be <code>null</code>)
 1751        *  <LI><B>GRANTEE</B> String => grantee of access
 1752        *  <LI><B>PRIVILEGE</B> String => name of access (SELECT,
 1753        *      INSERT, UPDATE, REFRENCES, ...)
 1754        *  <LI><B>IS_GRANTABLE</B> String => "YES" if grantee is permitted
 1755        *      to grant to others; "NO" if not; <code>null</code> if unknown
 1756        *  </OL>
 1757        *
 1758        * @param catalog a catalog name; must match the catalog name as it
 1759        *        is stored in the database; "" retrieves those without a catalog;
 1760        *        <code>null</code> means that the catalog name should not be used to narrow
 1761        *        the search
 1762        * @param schemaPattern a schema name pattern; must match the schema name
 1763        *        as it is stored in the database; "" retrieves those without a schema;
 1764        *        <code>null</code> means that the schema name should not be used to narrow
 1765        *        the search
 1766        * @param tableNamePattern a table name pattern; must match the
 1767        *        table name as it is stored in the database
 1768        * @return <code>ResultSet</code> - each row is a table privilege description
 1769        * @exception SQLException if a database access error occurs
 1770        * @see #getSearchStringEscape
 1771        */
 1772       ResultSet getTablePrivileges(String catalog, String schemaPattern,
 1773                                    String tableNamePattern) throws SQLException;
 1774   
 1775       /**
 1776        * Retrieves a description of a table's optimal set of columns that
 1777        * uniquely identifies a row. They are ordered by SCOPE.
 1778        *
 1779        * <P>Each column description has the following columns:
 1780        *  <OL>
 1781        *  <LI><B>SCOPE</B> short => actual scope of result
 1782        *      <UL>
 1783        *      <LI> bestRowTemporary - very temporary, while using row
 1784        *      <LI> bestRowTransaction - valid for remainder of current transaction
 1785        *      <LI> bestRowSession - valid for remainder of current session
 1786        *      </UL>
 1787        *  <LI><B>COLUMN_NAME</B> String => column name
 1788        *  <LI><B>DATA_TYPE</B> int => SQL data type from java.sql.Types
 1789        *  <LI><B>TYPE_NAME</B> String => Data source dependent type name,
 1790        *  for a UDT the type name is fully qualified
 1791        *  <LI><B>COLUMN_SIZE</B> int => precision
 1792        *  <LI><B>BUFFER_LENGTH</B> int => not used
 1793        *  <LI><B>DECIMAL_DIGITS</B> short  => scale - Null is returned for data types where
 1794        * DECIMAL_DIGITS is not applicable.
 1795        *  <LI><B>PSEUDO_COLUMN</B> short => is this a pseudo column
 1796        *      like an Oracle ROWID
 1797        *      <UL>
 1798        *      <LI> bestRowUnknown - may or may not be pseudo column
 1799        *      <LI> bestRowNotPseudo - is NOT a pseudo column
 1800        *      <LI> bestRowPseudo - is a pseudo column
 1801        *      </UL>
 1802        *  </OL>
 1803        *
 1804        * <p>The COLUMN_SIZE column represents the specified column size for the given column.
 1805        * For numeric data, this is the maximum precision.  For character data, this is the length in characters.
 1806        * For datetime datatypes, this is the length in characters of the String representation (assuming the
 1807        * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes.  For the ROWID datatype,
 1808        * this is the length in bytes. Null is returned for data types where the
 1809        * column size is not applicable.
 1810        *
 1811        * @param catalog a catalog name; must match the catalog name as it
 1812        *        is stored in the database; "" retrieves those without a catalog;
 1813        *        <code>null</code> means that the catalog name should not be used to narrow
 1814        *        the search
 1815        * @param schema a schema name; must match the schema name
 1816        *        as it is stored in the database; "" retrieves those without a schema;
 1817        *        <code>null</code> means that the schema name should not be used to narrow
 1818        *        the search
 1819        * @param table a table name; must match the table name as it is stored
 1820        *        in the database
 1821        * @param scope the scope of interest; use same values as SCOPE
 1822        * @param nullable include columns that are nullable.
 1823        * @return <code>ResultSet</code> - each row is a column description
 1824        * @exception SQLException if a database access error occurs
 1825        */
 1826       ResultSet getBestRowIdentifier(String catalog, String schema,
 1827                                      String table, int scope, boolean nullable) throws SQLException;
 1828   
 1829       /**
 1830        * Indicates that the scope of the best row identifier is
 1831        * very temporary, lasting only while the
 1832        * row is being used.
 1833        * <P>
 1834        * A possible value for the column
 1835        * <code>SCOPE</code>
 1836        * in the <code>ResultSet</code> object
 1837        * returned by the method <code>getBestRowIdentifier</code>.
 1838        */
 1839       int bestRowTemporary   = 0;
 1840   
 1841       /**
 1842        * Indicates that the scope of the best row identifier is
 1843        * the remainder of the current transaction.
 1844        * <P>
 1845        * A possible value for the column
 1846        * <code>SCOPE</code>
 1847        * in the <code>ResultSet</code> object
 1848        * returned by the method <code>getBestRowIdentifier</code>.
 1849        */
 1850       int bestRowTransaction = 1;
 1851   
 1852       /**
 1853        * Indicates that the scope of the best row identifier is
 1854        * the remainder of the current session.
 1855        * <P>
 1856        * A possible value for the column
 1857        * <code>SCOPE</code>
 1858        * in the <code>ResultSet</code> object
 1859        * returned by the method <code>getBestRowIdentifier</code>.
 1860        */
 1861       int bestRowSession     = 2;
 1862   
 1863       /**
 1864        * Indicates that the best row identifier may or may not be a pseudo column.
 1865        * <P>
 1866        * A possible value for the column
 1867        * <code>PSEUDO_COLUMN</code>
 1868        * in the <code>ResultSet</code> object
 1869        * returned by the method <code>getBestRowIdentifier</code>.
 1870        */
 1871       int bestRowUnknown  = 0;
 1872   
 1873       /**
 1874        * Indicates that the best row identifier is NOT a pseudo column.
 1875        * <P>
 1876        * A possible value for the column
 1877        * <code>PSEUDO_COLUMN</code>
 1878        * in the <code>ResultSet</code> object
 1879        * returned by the method <code>getBestRowIdentifier</code>.
 1880        */
 1881       int bestRowNotPseudo        = 1;
 1882   
 1883       /**
 1884        * Indicates that the best row identifier is a pseudo column.
 1885        * <P>
 1886        * A possible value for the column
 1887        * <code>PSEUDO_COLUMN</code>
 1888        * in the <code>ResultSet</code> object
 1889        * returned by the method <code>getBestRowIdentifier</code>.
 1890        */
 1891       int bestRowPseudo   = 2;
 1892   
 1893       /**
 1894        * Retrieves a description of a table's columns that are automatically
 1895        * updated when any value in a row is updated.  They are
 1896        * unordered.
 1897        *
 1898        * <P>Each column description has the following columns:
 1899        *  <OL>
 1900        *  <LI><B>SCOPE</B> short => is not used
 1901        *  <LI><B>COLUMN_NAME</B> String => column name
 1902        *  <LI><B>DATA_TYPE</B> int => SQL data type from <code>java.sql.Types</code>
 1903        *  <LI><B>TYPE_NAME</B> String => Data source-dependent type name
 1904        *  <LI><B>COLUMN_SIZE</B> int => precision
 1905        *  <LI><B>BUFFER_LENGTH</B> int => length of column value in bytes
 1906        *  <LI><B>DECIMAL_DIGITS</B> short  => scale - Null is returned for data types where
 1907        * DECIMAL_DIGITS is not applicable.
 1908        *  <LI><B>PSEUDO_COLUMN</B> short => whether this is pseudo column
 1909        *      like an Oracle ROWID
 1910        *      <UL>
 1911        *      <LI> versionColumnUnknown - may or may not be pseudo column
 1912        *      <LI> versionColumnNotPseudo - is NOT a pseudo column
 1913        *      <LI> versionColumnPseudo - is a pseudo column
 1914        *      </UL>
 1915        *  </OL>
 1916        *
 1917        * <p>The COLUMN_SIZE column represents the specified column size for the given column.
 1918        * For numeric data, this is the maximum precision.  For character data, this is the length in characters.
 1919        * For datetime datatypes, this is the length in characters of the String representation (assuming the
 1920        * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes.  For the ROWID datatype,
 1921        * this is the length in bytes. Null is returned for data types where the
 1922        * column size is not applicable.
 1923        * @param catalog a catalog name; must match the catalog name as it
 1924        *        is stored in the database; "" retrieves those without a catalog;
 1925        *        <code>null</code> means that the catalog name should not be used to narrow
 1926        *        the search
 1927        * @param schema a schema name; must match the schema name
 1928        *        as it is stored in the database; "" retrieves those without a schema;
 1929        *        <code>null</code> means that the schema name should not be used to narrow
 1930        *        the search
 1931        * @param table a table name; must match the table name as it is stored
 1932        *        in the database
 1933        * @return a <code>ResultSet</code> object in which each row is a
 1934        *         column description
 1935        * @exception SQLException if a database access error occurs
 1936        */
 1937       ResultSet getVersionColumns(String catalog, String schema,
 1938                                   String table) throws SQLException;
 1939   
 1940       /**
 1941        * Indicates that this version column may or may not be a pseudo column.
 1942        * <P>
 1943        * A possible value for the column
 1944        * <code>PSEUDO_COLUMN</code>
 1945        * in the <code>ResultSet</code> object
 1946        * returned by the method <code>getVersionColumns</code>.
 1947        */
 1948       int versionColumnUnknown    = 0;
 1949   
 1950       /**
 1951        * Indicates that this version column is NOT a pseudo column.
 1952        * <P>
 1953        * A possible value for the column
 1954        * <code>PSEUDO_COLUMN</code>
 1955        * in the <code>ResultSet</code> object
 1956        * returned by the method <code>getVersionColumns</code>.
 1957        */
 1958       int versionColumnNotPseudo  = 1;
 1959   
 1960       /**
 1961        * Indicates that this version column is a pseudo column.
 1962        * <P>
 1963        * A possible value for the column
 1964        * <code>PSEUDO_COLUMN</code>
 1965        * in the <code>ResultSet</code> object
 1966        * returned by the method <code>getVersionColumns</code>.
 1967        */
 1968       int versionColumnPseudo     = 2;
 1969   
 1970       /**
 1971        * Retrieves a description of the given table's primary key columns.  They
 1972        * are ordered by COLUMN_NAME.
 1973        *
 1974        * <P>Each primary key column description has the following columns:
 1975        *  <OL>
 1976        *  <LI><B>TABLE_CAT</B> String => table catalog (may be <code>null</code>)
 1977        *  <LI><B>TABLE_SCHEM</B> String => table schema (may be <code>null</code>)
 1978        *  <LI><B>TABLE_NAME</B> String => table name
 1979        *  <LI><B>COLUMN_NAME</B> String => column name
 1980        *  <LI><B>KEY_SEQ</B> short => sequence number within primary key( a value
 1981        *  of 1 represents the first column of the primary key, a value of 2 would
 1982        *  represent the second column within the primary key).
 1983        *  <LI><B>PK_NAME</B> String => primary key name (may be <code>null</code>)
 1984        *  </OL>
 1985        *
 1986        * @param catalog a catalog name; must match the catalog name as it
 1987        *        is stored in the database; "" retrieves those without a catalog;
 1988        *        <code>null</code> means that the catalog name should not be used to narrow
 1989        *        the search
 1990        * @param schema a schema name; must match the schema name
 1991        *        as it is stored in the database; "" retrieves those without a schema;
 1992        *        <code>null</code> means that the schema name should not be used to narrow
 1993        *        the search
 1994        * @param table a table name; must match the table name as it is stored
 1995        *        in the database
 1996        * @return <code>ResultSet</code> - each row is a primary key column description
 1997        * @exception SQLException if a database access error occurs
 1998        */
 1999       ResultSet getPrimaryKeys(String catalog, String schema,
 2000                                String table) throws SQLException;
 2001   
 2002       /**
 2003        * Retrieves a description of the primary key columns that are
 2004        * referenced by the given table's foreign key columns (the primary keys
 2005        * imported by a table).  They are ordered by PKTABLE_CAT,
 2006        * PKTABLE_SCHEM, PKTABLE_NAME, and KEY_SEQ.
 2007        *
 2008        * <P>Each primary key column description has the following columns:
 2009        *  <OL>
 2010        *  <LI><B>PKTABLE_CAT</B> String => primary key table catalog
 2011        *      being imported (may be <code>null</code>)
 2012        *  <LI><B>PKTABLE_SCHEM</B> String => primary key table schema
 2013        *      being imported (may be <code>null</code>)
 2014        *  <LI><B>PKTABLE_NAME</B> String => primary key table name
 2015        *      being imported
 2016        *  <LI><B>PKCOLUMN_NAME</B> String => primary key column name
 2017        *      being imported
 2018        *  <LI><B>FKTABLE_CAT</B> String => foreign key table catalog (may be <code>null</code>)
 2019        *  <LI><B>FKTABLE_SCHEM</B> String => foreign key table schema (may be <code>null</code>)
 2020        *  <LI><B>FKTABLE_NAME</B> String => foreign key table name
 2021        *  <LI><B>FKCOLUMN_NAME</B> String => foreign key column name
 2022        *  <LI><B>KEY_SEQ</B> short => sequence number within a foreign key( a value
 2023        *  of 1 represents the first column of the foreign key, a value of 2 would
 2024        *  represent the second column within the foreign key).
 2025        *  <LI><B>UPDATE_RULE</B> short => What happens to a
 2026        *       foreign key when the primary key is updated:
 2027        *      <UL>
 2028        *      <LI> importedNoAction - do not allow update of primary
 2029        *               key if it has been imported
 2030        *      <LI> importedKeyCascade - change imported key to agree
 2031        *               with primary key update
 2032        *      <LI> importedKeySetNull - change imported key to <code>NULL</code>
 2033        *               if its primary key has been updated
 2034        *      <LI> importedKeySetDefault - change imported key to default values
 2035        *               if its primary key has been updated
 2036        *      <LI> importedKeyRestrict - same as importedKeyNoAction
 2037        *                                 (for ODBC 2.x compatibility)
 2038        *      </UL>
 2039        *  <LI><B>DELETE_RULE</B> short => What happens to
 2040        *      the foreign key when primary is deleted.
 2041        *      <UL>
 2042        *      <LI> importedKeyNoAction - do not allow delete of primary
 2043        *               key if it has been imported
 2044        *      <LI> importedKeyCascade - delete rows that import a deleted key
 2045        *      <LI> importedKeySetNull - change imported key to NULL if
 2046        *               its primary key has been deleted
 2047        *      <LI> importedKeyRestrict - same as importedKeyNoAction
 2048        *                                 (for ODBC 2.x compatibility)
 2049        *      <LI> importedKeySetDefault - change imported key to default if
 2050        *               its primary key has been deleted
 2051        *      </UL>
 2052        *  <LI><B>FK_NAME</B> String => foreign key name (may be <code>null</code>)
 2053        *  <LI><B>PK_NAME</B> String => primary key name (may be <code>null</code>)
 2054        *  <LI><B>DEFERRABILITY</B> short => can the evaluation of foreign key
 2055        *      constraints be deferred until commit
 2056        *      <UL>
 2057        *      <LI> importedKeyInitiallyDeferred - see SQL92 for definition
 2058        *      <LI> importedKeyInitiallyImmediate - see SQL92 for definition
 2059        *      <LI> importedKeyNotDeferrable - see SQL92 for definition
 2060        *      </UL>
 2061        *  </OL>
 2062        *
 2063        * @param catalog a catalog name; must match the catalog name as it
 2064        *        is stored in the database; "" retrieves those without a catalog;
 2065        *        <code>null</code> means that the catalog name should not be used to narrow
 2066        *        the search
 2067        * @param schema a schema name; must match the schema name
 2068        *        as it is stored in the database; "" retrieves those without a schema;
 2069        *        <code>null</code> means that the schema name should not be used to narrow
 2070        *        the search
 2071        * @param table a table name; must match the table name as it is stored
 2072        *        in the database
 2073        * @return <code>ResultSet</code> - each row is a primary key column description
 2074        * @exception SQLException if a database access error occurs
 2075        * @see #getExportedKeys
 2076        */
 2077       ResultSet getImportedKeys(String catalog, String schema,
 2078                                 String table) throws SQLException;
 2079   
 2080       /**
 2081        * For the column <code>UPDATE_RULE</code>,
 2082        * indicates that
 2083        * when the primary key is updated, the foreign key (imported key)
 2084        * is changed to agree with it.
 2085        * For the column <code>DELETE_RULE</code>,
 2086        * it indicates that
 2087        * when the primary key is deleted, rows that imported that key
 2088        * are deleted.
 2089        * <P>
 2090        * A possible value for the columns <code>UPDATE_RULE</code>
 2091        * and &l