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