History

My first initial commit with all of mine experimental changes.

Dmitry Kabak (userdima committed 13 years ago

Commit d37b88d1 parent 3f5b46618352 files · +2598093 −-8690Browse files

Showing the changes to java/pkg/java/sql/DatabaseMetaData.java (1 of 18352 files). Show all

Unified · Split

java/pkg/java/sql/DatabaseMetaData.java+3655−0
@@ -0,0 +1,3655 @@
1/*
2 * Copyright (c) 1996, 2010, Oracle and/or its affiliates. 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. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26
27package 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 */
72public 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 column can include NULLs
1346 * <LI> NO --- if the column cannot include NULLs
1347 * <LI> empty string --- if the nullability for the
1348 * column 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 column can include NULLs
1614 * <LI> NO --- if the column cannot include NULLs
1615 * <LI> empty string --- if the nullability for the
1616 * column is unknown
1617 * </UL>
1618 * <LI><B>SCOPE_CATALOG</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 attribute (<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 * </UL>
1633 * <LI><B>IS_GENERATEDCOLUMN</B> String => Indicates whether this is a generated column
1634 * <UL>
1635 * <LI> YES --- if this a generated column
1636 * <LI> NO --- if this not a generated column
1637 * <LI> empty string --- if it cannot be determined whether this is a generated column
1638 * </UL>
1639 * </OL>
1640 *
1641 * <p>The COLUMN_SIZE column specifies the column size for the given column.
1642 * For numeric data, this is the maximum precision. For character data, this is the length in characters.
1643 * For datetime datatypes, this is the length in characters of the String representation (assuming the
1644 * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype,
1645 * this is the length in bytes. Null is returned for data types where the
1646 * column size is not applicable.
1647 *
1648 * @param catalog a catalog name; must match the catalog name as it
1649 * is stored in the database; "" retrieves those without a catalog;
1650 * <code>null</code> means that the catalog name should not be used to narrow
1651 * the search
1652 * @param schemaPattern a schema name pattern; must match the schema name
1653 * as it is stored in the database; "" retrieves those without a schema;
1654 * <code>null</code> means that the schema name should not be used to narrow
1655 * the search
1656 * @param tableNamePattern a table name pattern; must match the
1657 * table name as it is stored in the database
1658 * @param columnNamePattern a column name pattern; must match the column
1659 * name as it is stored in the database
1660 * @return <code>ResultSet</code> - each row is a column description
1661 * @exception SQLException if a database access error occurs
1662 * @see #getSearchStringEscape
1663 */
1664 ResultSet getColumns(String catalog, String schemaPattern,
1665 String tableNamePattern, String columnNamePattern)
1666 throws SQLException;
1667
1668 /**
1669 * Indicates that the column might not allow <code>NULL</code> values.
1670 * <P>
1671 * A possible value for the column
1672 * <code>NULLABLE</code>
1673 * in the <code>ResultSet</code> returned by the method
1674 * <code>getColumns</code>.
1675 */
1676 int columnNoNulls = 0;
1677
1678 /**
1679 * Indicates that the column definitely allows <code>NULL</code> values.
1680 * <P>
1681 * A possible value for the column
1682 * <code>NULLABLE</code>
1683 * in the <code>ResultSet</code> returned by the method
1684 * <code>getColumns</code>.
1685 */
1686 int columnNullable = 1;
1687
1688 /**
1689 * Indicates that the nullability of columns is unknown.
1690 * <P>
1691 * A possible value for the column
1692 * <code>NULLABLE</code>
1693 * in the <code>ResultSet</code> returned by the method
1694 * <code>getColumns</code>.
1695 */
1696 int columnNullableUnknown = 2;
1697
1698 /**
1699 * Retrieves a description of the access rights for a table's columns.
1700 *
1701 * <P>Only privileges matching the column name criteria are
1702 * returned. They are ordered by COLUMN_NAME and PRIVILEGE.
1703 *
1704 * <P>Each privilige description has the following columns:
1705 * <OL>
1706 * <LI><B>TABLE_CAT</B> String => table catalog (may be <code>null</code>)
1707 * <LI><B>TABLE_SCHEM</B> String => table schema (may be <code>null</code>)
1708 * <LI><B>TABLE_NAME</B> String => table name
1709 * <LI><B>COLUMN_NAME</B> String => column name
1710 * <LI><B>GRANTOR</B> String => grantor of access (may be <code>null</code>)
1711 * <LI><B>GRANTEE</B> String => grantee of access
1712 * <LI><B>PRIVILEGE</B> String => name of access (SELECT,
1713 * INSERT, UPDATE, REFRENCES, ...)
1714 * <LI><B>IS_GRANTABLE</B> String => "YES" if grantee is permitted
1715 * to grant to others; "NO" if not; <code>null</code> if unknown
1716 * </OL>
1717 *
1718 * @param catalog a catalog name; must match the catalog name as it
1719 * is stored in the database; "" retrieves those without a catalog;
1720 * <code>null</code> means that the catalog name should not be used to narrow
1721 * the search
1722 * @param schema a schema name; must match the schema name as it is
1723 * stored in the database; "" retrieves those without a schema;
1724 * <code>null</code> means that the schema name should not be used to narrow
1725 * the search
1726 * @param table a table name; must match the table name as it is
1727 * stored in the database
1728 * @param columnNamePattern a column name pattern; must match the column
1729 * name as it is stored in the database
1730 * @return <code>ResultSet</code> - each row is a column privilege description
1731 * @exception SQLException if a database access error occurs
1732 * @see #getSearchStringEscape
1733 */
1734 ResultSet getColumnPrivileges(String catalog, String schema,
1735 String table, String columnNamePattern) throws SQLException;
1736
1737 /**
1738 * Retrieves a description of the access rights for each table available
1739 * in a catalog. Note that a table privilege applies to one or
1740 * more columns in the table. It would be wrong to assume that
1741 * this privilege applies to all columns (this may be true for
1742 * some systems but is not true for all.)
1743 *
1744 * <P>Only privileges matching the schema and table name
1745 * criteria are returned. They are ordered by
1746 * <code>TABLE_CAT</code>,
1747 * <code>TABLE_SCHEM</code>, <code>TABLE_NAME</code>,
1748 * and <code>PRIVILEGE</code>.
1749 *
1750 * <P>Each privilige description has the following columns:
1751 * <OL>
1752 * <LI><B>TABLE_CAT</B> String => table catalog (may be <code>null</code>)
1753 * <LI><B>TABLE_SCHEM</B> String => table schema (may be <code>null</code>)
1754 * <LI><B>TABLE_NAME</B> String => table name
1755 * <LI><B>GRANTOR</B> String => grantor of access (may be <code>null</code>)
1756 * <LI><B>GRANTEE</B> String => grantee of access
1757 * <LI><B>PRIVILEGE</B> String => name of access (SELECT,
1758 * INSERT, UPDATE, REFRENCES, ...)
1759 * <LI><B>IS_GRANTABLE</B> String => "YES" if grantee is permitted
1760 * to grant to others; "NO" if not; <code>null</code> if unknown
1761 * </OL>
1762 *
1763 * @param catalog a catalog name; must match the catalog name as it
1764 * is stored in the database; "" retrieves those without a catalog;
1765 * <code>null</code> means that the catalog name should not be used to narrow
1766 * the search
1767 * @param schemaPattern a schema name pattern; must match the schema name
1768 * as it is stored in the database; "" retrieves those without a schema;
1769 * <code>null</code> means that the schema name should not be used to narrow
1770 * the search
1771 * @param tableNamePattern a table name pattern; must match the
1772 * table name as it is stored in the database
1773 * @return <code>ResultSet</code> - each row is a table privilege description
1774 * @exception SQLException if a database access error occurs
1775 * @see #getSearchStringEscape
1776 */
1777 ResultSet getTablePrivileges(String catalog, String schemaPattern,
1778 String tableNamePattern) throws SQLException;
1779
1780 /**
1781 * Retrieves a description of a table's optimal set of columns that
1782 * uniquely identifies a row. They are ordered by SCOPE.
1783 *
1784 * <P>Each column description has the following columns:
1785 * <OL>
1786 * <LI><B>SCOPE</B> short => actual scope of result
1787 * <UL>
1788 * <LI> bestRowTemporary - very temporary, while using row
1789 * <LI> bestRowTransaction - valid for remainder of current transaction
1790 * <LI> bestRowSession - valid for remainder of current session
1791 * </UL>
1792 * <LI><B>COLUMN_NAME</B> String => column name
1793 * <LI><B>DATA_TYPE</B> int => SQL data type from java.sql.Types
1794 * <LI><B>TYPE_NAME</B> String => Data source dependent type name,
1795 * for a UDT the type name is fully qualified
1796 * <LI><B>COLUMN_SIZE</B> int => precision
1797 * <LI><B>BUFFER_LENGTH</B> int => not used
1798 * <LI><B>DECIMAL_DIGITS</B> short => scale - Null is returned for data types where
1799 * DECIMAL_DIGITS is not applicable.
1800 * <LI><B>PSEUDO_COLUMN</B> short => is this a pseudo column
1801 * like an Oracle ROWID
1802 * <UL>
1803 * <LI> bestRowUnknown - may or may not be pseudo column
1804 * <LI> bestRowNotPseudo - is NOT a pseudo column
1805 * <LI> bestRowPseudo - is a pseudo column
1806 * </UL>
1807 * </OL>
1808 *
1809 * <p>The COLUMN_SIZE column represents the specified column size for the given column.
1810 * For numeric data, this is the maximum precision. For character data, this is the length in characters.
1811 * For datetime datatypes, this is the length in characters of the String representation (assuming the
1812 * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype,
1813 * this is the length in bytes. Null is returned for data types where the
1814 * column size is not applicable.
1815 *
1816 * @param catalog a catalog name; must match the catalog name as it
1817 * is stored in the database; "" retrieves those without a catalog;
1818 * <code>null</code> means that the catalog name should not be used to narrow
1819 * the search
1820 * @param schema a schema name; must match the schema name
1821 * as it is stored in the database; "" retrieves those without a schema;
1822 * <code>null</code> means that the schema name should not be used to narrow
1823 * the search
1824 * @param table a table name; must match the table name as it is stored
1825 * in the database
1826 * @param scope the scope of interest; use same values as SCOPE
1827 * @param nullable include columns that are nullable.
1828 * @return <code>ResultSet</code> - each row is a column description
1829 * @exception SQLException if a database access error occurs
1830 */
1831 ResultSet getBestRowIdentifier(String catalog, String schema,
1832 String table, int scope, boolean nullable) throws SQLException;
1833
1834 /**
1835 * Indicates that the scope of the best row identifier is
1836 * very temporary, lasting only while the
1837 * row is being used.
1838 * <P>
1839 * A possible value for the column
1840 * <code>SCOPE</code>
1841 * in the <code>ResultSet</code> object
1842 * returned by the method <code>getBestRowIdentifier</code>.
1843 */
1844 int bestRowTemporary = 0;
1845
1846 /**
1847 * Indicates that the scope of the best row identifier is
1848 * the remainder of the current transaction.
1849 * <P>
1850 * A possible value for the column
1851 * <code>SCOPE</code>
1852 * in the <code>ResultSet</code> object
1853 * returned by the method <code>getBestRowIdentifier</code>.
1854 */
1855 int bestRowTransaction = 1;
1856
1857 /**
1858 * Indicates that the scope of the best row identifier is
1859 * the remainder of the current session.
1860 * <P>
1861 * A possible value for the column
1862 * <code>SCOPE</code>
1863 * in the <code>ResultSet</code> object
1864 * returned by the method <code>getBestRowIdentifier</code>.
1865 */
1866 int bestRowSession = 2;
1867
1868 /**
1869 * Indicates that the best row identifier may or may not be a pseudo column.
1870 * <P>
1871 * A possible value for the column
1872 * <code>PSEUDO_COLUMN</code>
1873 * in the <code>ResultSet</code> object
1874 * returned by the method <code>getBestRowIdentifier</code>.
1875 */
1876 int bestRowUnknown = 0;
1877
1878 /**
1879 * Indicates that the best row identifier is NOT a pseudo column.
1880 * <P>
1881 * A possible value for the column
1882 * <code>PSEUDO_COLUMN</code>
1883 * in the <code>ResultSet</code> object
1884 * returned by the method <code>getBestRowIdentifier</code>.
1885 */
1886 int bestRowNotPseudo = 1;
1887
1888 /**
1889 * Indicates that the best row identifier is a pseudo column.
1890 * <P>
1891 * A possible value for the column
1892 * <code>PSEUDO_COLUMN</code>
1893 * in the <code>ResultSet</code> object
1894 * returned by the method <code>getBestRowIdentifier</code>.
1895 */
1896 int bestRowPseudo = 2;
1897
1898 /**
1899 * Retrieves a description of a table's columns that are automatically
1900 * updated when any value in a row is updated. They are
1901 * unordered.
1902 *
1903 * <P>Each column description has the following columns:
1904 * <OL>
1905 * <LI><B>SCOPE</B> short => is not used
1906 * <LI><B>COLUMN_NAME</B> String => column name
1907 * <LI><B>DATA_TYPE</B> int => SQL data type from <code>java.sql.Types</code>
1908 * <LI><B>TYPE_NAME</B> String => Data source-dependent type name
1909 * <LI><B>COLUMN_SIZE</B> int => precision
1910 * <LI><B>BUFFER_LENGTH</B> int => length of column value in bytes
1911 * <LI><B>DECIMAL_DIGITS</B> short => scale - Null is returned for data types where
1912 * DECIMAL_DIGITS is not applicable.
1913 * <LI><B>PSEUDO_COLUMN</B> short => whether this is pseudo column
1914 * like an Oracle ROWID
1915 * <UL>
1916 * <LI> versionColumnUnknown - may or may not be pseudo column
1917 * <LI> versionColumnNotPseudo - is NOT a pseudo column
1918 * <LI> versionColumnPseudo - is a pseudo column
1919 * </UL>
1920 * </OL>
1921 *
1922 * <p>The COLUMN_SIZE column represents the specified column size for the given column.
1923 * For numeric data, this is the maximum precision. For character data, this is the length in characters.
1924 * For datetime datatypes, this is the length in characters of the String representation (assuming the
1925 * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype,
1926 * this is the length in bytes. Null is returned for data types where the
1927 * column size is not applicable.
1928 * @param catalog a catalog name; must match the catalog name as it
1929 * is stored in the database; "" retrieves those without a catalog;
1930 * <code>null</code> means that the catalog name should not be used to narrow
1931 * the search
1932 * @param schema a schema name; must match the schema name
1933 * as it is stored in the database; "" retrieves those without a schema;
1934 * <code>null</code> means that the schema name should not be used to narrow
1935 * the search
1936 * @param table a table name; must match the table name as it is stored
1937 * in the database
1938 * @return a <code>ResultSet</code> object in which each row is a
1939 * column description
1940 * @exception SQLException if a database access error occurs
1941 */
1942 ResultSet getVersionColumns(String catalog, String schema,
1943 String table) throws SQLException;
1944
1945 /**
1946 * Indicates that this version column may or may not be a pseudo column.
1947 * <P>
1948 * A possible value for the column
1949 * <code>PSEUDO_COLUMN</code>
1950 * in the <code>ResultSet</code> object
1951 * returned by the method <code>getVersionColumns</code>.
1952 */
1953 int versionColumnUnknown = 0;
1954
1955 /**
1956 * Indicates that this version column is NOT a pseudo column.
1957 * <P>
1958 * A possible value for the column
1959 * <code>PSEUDO_COLUMN</code>
1960 * in the <code>ResultSet</code> object
1961 * returned by the method <code>getVersionColumns</code>.
1962 */
1963 int versionColumnNotPseudo = 1;
1964
1965 /**
1966 * Indicates that this version column is a pseudo column.
1967 * <P>
1968 * A possible value for the column
1969 * <code>PSEUDO_COLUMN</code>
1970 * in the <code>ResultSet</code> object
1971 * returned by the method <code>getVersionColumns</code>.
1972 */
1973 int versionColumnPseudo = 2;
1974
1975 /**
1976 * Retrieves a description of the given table's primary key columns. They
1977 * are ordered by COLUMN_NAME.
1978 *
1979 * <P>Each primary key column description has the following columns:
1980 * <OL>
1981 * <LI><B>TABLE_CAT</B> String => table catalog (may be <code>null</code>)
1982 * <LI><B>TABLE_SCHEM</B> String => table schema (may be <code>null</code>)
1983 * <LI><B>TABLE_NAME</B> String => table name
1984 * <LI><B>COLUMN_NAME</B> String => column name
1985 * <LI><B>KEY_SEQ</B> short => sequence number within primary key( a value
1986 * of 1 represents the first column of the primary key, a value of 2 would
1987 * represent the second column within the primary key).
1988 * <LI><B>PK_NAME</B> String => primary key name (may be <code>null</code>)
1989 * </OL>
1990 *
1991 * @param catalog a catalog name; must match the catalog name as it
1992 * is stored in the database; "" retrieves those without a catalog;
1993 * <code>null</code> means that the catalog name should not be used to narrow
1994 * the search
1995 * @param schema a schema name; must match the schema name
1996 * as it is stored in the database; "" retrieves those without a schema;
1997 * <code>null</code> means that the schema name should not be used to narrow
1998 * the search
1999 * @param table a table name; must match the table name as it is stored
2000 * in the database
2001 * @return <code>ResultSet</code> - each row is a primary key column description
2002 * @exception SQLException if a database access error occurs
2003 */
2004 ResultSet getPrimaryKeys(String catalog, String schema,
2005 String table) throws SQLException;
2006
2007 /**
2008 * Retrieves a description of the primary key columns that are
2009 * referenced by the given table's foreign key columns (the primary keys
2010 * imported by a table). They are ordered by PKTABLE_CAT,
2011 * PKTABLE_SCHEM, PKTABLE_NAME, and KEY_SEQ.
2012 *
2013 * <P>Each primary key column description has the following columns:
2014 * <OL>
2015 * <LI><B>PKTABLE_CAT</B> String => primary key table catalog
2016 * being imported (may be <code>null</code>)
2017 * <LI><B>PKTABLE_SCHEM</B> String => primary key table schema
2018 * being imported (may be <code>null</code>)
2019 * <LI><B>PKTABLE_NAME</B> String => primary key table name
2020 * being imported
2021 * <LI><B>PKCOLUMN_NAME</B> String => primary key column name
2022 * being imported
2023 * <LI><B>FKTABLE_CAT</B> String => foreign key table catalog (may be <code>null</code>)
2024 * <LI><B>FKTABLE_SCHEM</B> String => foreign key table schema (may be <code>null</code>)
2025 * <LI><B>FKTABLE_NAME</B> String => foreign key table name
2026 * <LI><B>FKCOLUMN_NAME</B> String => foreign key column name
2027 * <LI><B>KEY_SEQ</B> short => sequence number within a foreign key( a value
2028 * of 1 represents the first column of the foreign key, a value of 2 would
2029 * represent the second column within the foreign key).
2030 * <LI><B>UPDATE_RULE</B> short => What happens to a
2031 * foreign key when the primary key is updated:
2032 * <UL>
2033 * <LI> importedNoAction - do not allow update of primary
2034 * key if it has been imported
2035 * <LI> importedKeyCascade - change imported key to agree
2036 * with primary key update
2037 * <LI> importedKeySetNull - change imported key to <code>NULL</code>
2038 * if its primary key has been updated
2039 * <LI> importedKeySetDefault - change imported key to default values
2040 * if its primary key has been updated
2041 * <LI> importedKeyRestrict - same as importedKeyNoAction
2042 * (for ODBC 2.x compatibility)
2043 * </UL>
2044 * <LI><B>DELETE_RULE</B> short => What happens to
2045 * the foreign key when primary is deleted.
2046 * <UL>
2047 * <LI> importedKeyNoAction - do not allow delete of primary
2048 * key if it has been imported
2049 * <LI> importedKeyCascade - delete rows that import a deleted key
2050 * <LI> importedKeySetNull - change imported key to NULL if
2051 * its primary key has been deleted
2052 * <LI> importedKeyRestrict - same as importedKeyNoAction
2053 * (for ODBC 2.x compatibility)
2054 * <LI> importedKeySetDefault - change imported key to default if
2055 * its primary key has been deleted
2056 * </UL>
2057 * <LI><B>FK_NAME</B> String => foreign key name (may be <code>null</code>)
2058 * <LI><B>PK_NAME</B> String => primary key name (may be <code>null</code>)
2059 * <LI><B>DEFERRABILITY</B> short => can the evaluation of foreign key
2060 * constraints be deferred until commit
2061 * <UL>
2062 * <LI> importedKeyInitiallyDeferred - see SQL92 for definition
2063 * <LI> importedKeyInitiallyImmediate - see SQL92 for definition
2064 * <LI> importedKeyNotDeferrable - see SQL92 for definition
2065 * </UL>
2066 * </OL>
2067 *
2068 * @param catalog a catalog name; must match the catalog name as it
2069 * is stored in the database; "" retrieves those without a catalog;
2070 * <code>null</code> means that the catalog name should not be used to narrow
2071 * the search
2072 * @param schema a schema name; must match the schema name
2073 * as it is stored in the database; "" retrieves those without a schema;
2074 * <code>null</code> means that the schema name should not be used to narrow
2075 * the search
2076 * @param table a table name; must match the table name as it is stored
2077 * in the database
2078 * @return <code>ResultSet</code> - each row is a primary key column description
2079 * @exception SQLException if a database access error occurs
2080 * @see #getExportedKeys
2081 */
2082 ResultSet getImportedKeys(String catalog, String schema,
2083 String table) throws SQLException;
2084
2085 /**
2086 * For the column <code>UPDATE_RULE</code>,
2087 * indicates that
2088 * when the primary key is updated, the foreign key (imported key)
2089 * is changed to agree with it.
2090 * For the column <code>DELETE_RULE</code>,
2091 * it indicates that
2092 * when the primary key is deleted, rows that imported that key
2093 * are deleted.
2094 * <P>
2095 * A possible value for the columns <code>UPDATE_RULE</code>
2096 * and <code>DELETE_RULE</code> in the
2097 * <code>ResultSet</code> objects returned by the methods
2098 * <code>getImportedKeys</code>, <code>getExportedKeys</code>,
2099 * and <code>getCrossReference</code>.
2100 */
2101 int importedKeyCascade = 0;
2102
2103 /**
2104 * For the column <code>UPDATE_RULE</code>, indicates that
2105 * a primary key may not be updated if it has been imported by
2106 * another table as a foreign key.
2107 * For the column <code>DELETE_RULE</code>, indicates that
2108 * a primary key may not be deleted if it has been imported by
2109 * another table as a foreign key.
2110 * <P>
2111 * A possible value for the columns <code>UPDATE_RULE</code>
2112 * and <code>DELETE_RULE</code> in the
2113 * <code>ResultSet</code> objects returned by the methods
2114 * <code>getImportedKeys</code>, <code>getExportedKeys</code>,
2115 * and <code>getCrossReference</code>.
2116 */
2117 int importedKeyRestrict = 1;
2118
2119 /**
2120 * For the columns <code>UPDATE_RULE</code>
2121 * and <code>DELETE_RULE</code>, indicates that
2122 * when the primary key is updated or deleted, the foreign key (imported key)
2123 * is changed to <code>NULL</code>.
2124 * <P>
2125 * A possible value for the columns <code>UPDATE_RULE</code>
2126 * and <code>DELETE_RULE</code> in the
2127 * <code>ResultSet</code> objects returned by the methods
2128 * <code>getImportedKeys</code>, <code>getExportedKeys</code>,
2129 * and <code>getCrossReference</code>.
2130 */
2131 int importedKeySetNull = 2;
2132
2133 /**
2134 * For the columns <code>UPDATE_RULE</code>
2135 * and <code>DELETE_RULE</code>, indicates that
2136 * if the primary key has been imported, it cannot be updated or deleted.
2137 * <P>
2138 * A possible value for the columns <code>UPDATE_RULE</code>
2139 * and <code>DELETE_RULE</code> in the
2140 * <code>ResultSet</code> objects returned by the methods
2141 * <code>getImportedKeys</code>, <code>getExportedKeys</code>,
2142 * and <code>getCrossReference</code>.
2143 */
2144 int importedKeyNoAction = 3;
2145
2146 /**
2147 * For the columns <code>UPDATE_RULE</code>
2148 * and <code>DELETE_RULE</code>, indicates that
2149 * if the primary key is updated or deleted, the foreign key (imported key)
2150 * is set to the default value.
2151 * <P>
2152 * A possible value for the columns <code>UPDATE_RULE</code>
2153 * and <code>DELETE_RULE</code> in the
2154 * <code>ResultSet</code> objects returned by the methods
2155 * <code>getImportedKeys</code>, <code>getExportedKeys</code>,
2156 * and <code>getCrossReference</code>.
2157 */
2158 int importedKeySetDefault = 4;
2159
2160 /**
2161 * Indicates deferrability. See SQL-92 for a definition.
2162 * <P>
2163 * A possible value for the column <code>DEFERRABILITY</code>
2164 * in the <code>ResultSet</code> objects returned by the methods
2165 * <code>getImportedKeys</code>, <code>getExportedKeys</code>,
2166 * and <code>getCrossReference</code>.
2167 */
2168 int importedKeyInitiallyDeferred = 5;
2169
2170 /**
2171 * Indicates deferrability. See SQL-92 for a definition.
2172 * <P>
2173 * A possible value for the column <code>DEFERRABILITY</code>
2174 * in the <code>ResultSet</code> objects returned by the methods
2175 * <code>getImportedKeys</code>, <code>getExportedKeys</code>,
2176 * and <code>getCrossReference</code>.
2177 */
2178 int importedKeyInitiallyImmediate = 6;
2179
2180 /**
2181 * Indicates deferrability. See SQL-92 for a definition.
2182 * <P>
2183 * A possible value for the column <code>DEFERRABILITY</code>
2184 * in the <code>ResultSet</code> objects returned by the methods
2185 * <code>getImportedKeys</code>, <code>getExportedKeys</code>,
2186 * and <code>getCrossReference</code>.
2187 */
2188 int importedKeyNotDeferrable = 7;
2189
2190 /**
2191 * Retrieves a description of the foreign key columns that reference the
2192 * given table's primary key columns (the foreign keys exported by a
2193 * table). They are ordered by FKTABLE_CAT, FKTABLE_SCHEM,
2194 * FKTABLE_NAME, and KEY_SEQ.
2195 *
2196 * <P>Each foreign key column description has the following columns:
2197 * <OL>
2198 * <LI><B>PKTABLE_CAT</B> String => primary key table catalog (may be <code>null</code>)
2199 * <LI><B>PKTABLE_SCHEM</B> String => primary key table schema (may be <code>null</code>)
2200 * <LI><B>PKTABLE_NAME</B> String => primary key table name
2201 * <LI><B>PKCOLUMN_NAME</B> String => primary key column name
2202 * <LI><B>FKTABLE_CAT</B> String => foreign key table catalog (may be <code>null</code>)
2203 * being exported (may be <code>null</code>)
2204 * <LI><B>FKTABLE_SCHEM</B> String => foreign key table schema (may be <code>null</code>)
2205 * being exported (may be <code>null</code>)
2206 * <LI><B>FKTABLE_NAME</B> String => foreign key table name
2207 * being exported
2208 * <LI><B>FKCOLUMN_NAME</B> String => foreign key column name
2209 * being exported
2210 * <LI><B>KEY_SEQ</B> short => sequence number within foreign key( a value
2211 * of 1 represents the first column of the foreign key, a value of 2 would
2212 * represent the second column within the foreign key).
2213 * <LI><B>UPDATE_RULE</B> short => What happens to
2214 * foreign key when primary is updated:
2215 * <UL>
2216 * <LI> importedNoAction - do not allow update of primary
2217 * key if it has been imported
2218 * <LI> importedKeyCascade - change imported key to agree
2219 * with primary key update
2220 * <LI> importedKeySetNull - change imported key to <code>NULL</code> if
2221 * its primary key has been updated
2222 * <LI> importedKeySetDefault - change imported key to default values
2223 * if its primary key has been updated
2224 * <LI> importedKeyRestrict - same as importedKeyNoAction
2225 * (for ODBC 2.x compatibility)
2226 * </UL>
2227 * <LI><B>DELETE_RULE</B> short => What happens to
2228 * the foreign key when primary is deleted.
2229 * <UL>
2230 * <LI> importedKeyNoAction - do not allow delete of primary
2231 * key if it has been imported
2232 * <LI> importedKeyCascade - delete rows that import a deleted key
2233 * <LI> importedKeySetNull - change imported key to <code>NULL</code> if
2234 * its primary key has been deleted
2235 * <LI> importedKeyRestrict - same as importedKeyNoAction
2236 * (for ODBC 2.x compatibility)
2237 * <LI> importedKeySetDefault - change imported key to default if
2238 * its primary key has been deleted
2239 * </UL>
2240 * <LI><B>FK_NAME</B> String => foreign key name (may be <code>null</code>)
2241 * <LI><B>PK_NAME</B> String => primary key name (may be <code>null</code>)
2242 * <LI><B>DEFERRABILITY</B> short => can the evaluation of foreign key
2243 * constraints be deferred until commit
2244 * <UL>
2245 * <LI> importedKeyInitiallyDeferred - see SQL92 for definition
2246 * <LI> importedKeyInitiallyImmediate - see SQL92 for definition
2247 * <LI> importedKeyNotDeferrable - see SQL92 for definition
2248 * </UL>
2249 * </OL>
2250 *
2251 * @param catalog a catalog name; must match the catalog name as it
2252 * is stored in this database; "" retrieves those without a catalog;
2253 * <code>null</code> means that the catalog name should not be used to narrow
2254 * the search
2255 * @param schema a schema name; must match the schema name
2256 * as it is stored in the database; "" retrieves those without a schema;
2257 * <code>null</code> means that the schema name should not be used to narrow
2258 * the search
2259 * @param table a table name; must match the table name as it is stored
2260 * in this database
2261 * @return a <code>ResultSet</code> object in which each row is a
2262 * foreign key column description
2263 * @exception SQLException if a database access error occurs
2264 * @see #getImportedKeys
2265 */
2266 ResultSet getExportedKeys(String catalog, String schema,
2267 String table) throws SQLException;
2268
2269 /**
2270 * Retrieves a description of the foreign key columns in the given foreign key
2271 * table that reference the primary key or the columns representing a unique constraint of the parent table (could be the same or a different table).
2272 * The number of columns returned from the parent table must match the number of
2273 * columns that make up the foreign key. They
2274 * are ordered by FKTABLE_CAT, FKTABLE_SCHEM, FKTABLE_NAME, and
2275 * KEY_SEQ.
2276 *
2277 * <P>Each foreign key column description has the following columns:
2278 * <OL>
2279 * <LI><B>PKTABLE_CAT</B> String => parent key table catalog (may be <code>null</code>)
2280 * <LI><B>PKTABLE_SCHEM</B> String => parent key table schema (may be <code>null</code>)
2281 * <LI><B>PKTABLE_NAME</B> String => parent key table name
2282 * <LI><B>PKCOLUMN_NAME</B> String => parent key column name
2283 * <LI><B>FKTABLE_CAT</B> String => foreign key table catalog (may be <code>null</code>)
2284 * being exported (may be <code>null</code>)
2285 * <LI><B>FKTABLE_SCHEM</B> String => foreign key table schema (may be <code>null</code>)
2286 * being exported (may be <code>null</code>)
2287 * <LI><B>FKTABLE_NAME</B> String => foreign key table name
2288 * being exported
2289 * <LI><B>FKCOLUMN_NAME</B> String => foreign key column name
2290 * being exported
2291 * <LI><B>KEY_SEQ</B> short => sequence number within foreign key( a value
2292 * of 1 represents the first column of the foreign key, a value of 2 would
2293 * represent the second column within the foreign key).
2294 * <LI><B>UPDATE_RULE</B> short => What happens to
2295 * foreign key when parent key is updated:
2296 * <UL>
2297 * <LI> importedNoAction - do not allow update of parent
2298 * key if it has been imported
2299 * <LI> importedKeyCascade - change imported key to agree
2300 * with parent key update
2301 * <LI> importedKeySetNull - change imported key to <code>NULL</code> if
2302 * its parent key has been updated
2303 * <LI> importedKeySetDefault - change imported key to default values
2304 * if its parent key has been updated
2305 * <LI> importedKeyRestrict - same as importedKeyNoAction
2306 * (for ODBC 2.x compatibility)
2307 * </UL>
2308 * <LI><B>DELETE_RULE</B> short => What happens to
2309 * the foreign key when parent key is deleted.
2310 * <UL>
2311 * <LI> importedKeyNoAction - do not allow delete of parent
2312 * key if it has been imported
2313 * <LI> importedKeyCascade - delete rows that import a deleted key
2314 * <LI> importedKeySetNull - change imported key to <code>NULL</code> if
2315 * its primary key has been deleted
2316 * <LI> importedKeyRestrict - same as importedKeyNoAction
2317 * (for ODBC 2.x compatibility)
2318 * <LI> importedKeySetDefault - change imported key to default if
2319 * its parent key has been deleted
2320 * </UL>
2321 * <LI><B>FK_NAME</B> String => foreign key name (may be <code>null</code>)
2322 * <LI><B>PK_NAME</B> String => parent key name (may be <code>null</code>)
2323 * <LI><B>DEFERRABILITY</B> short => can the evaluation of foreign key
2324 * constraints be deferred until commit
2325 * <UL>
2326 * <LI> importedKeyInitiallyDeferred - see SQL92 for definition
2327 * <LI> importedKeyInitiallyImmediate - see SQL92 for definition
2328 * <LI> importedKeyNotDeferrable - see SQL92 for definition
2329 * </UL>
2330 * </OL>
2331 *
2332 * @param parentCatalog a catalog name; must match the catalog name
2333 * as it is stored in the database; "" retrieves those without a
2334 * catalog; <code>null</code> means drop catalog name from the selection criteria
2335 * @param parentSchema a schema name; must match the schema name as
2336 * it is stored in the database; "" retrieves those without a schema;
2337 * <code>null</code> means drop schema name from the selection criteria
2338 * @param parentTable the name of the table that exports the key; must match
2339 * the table name as it is stored in the database
2340 * @param foreignCatalog a catalog name; must match the catalog name as
2341 * it is stored in the database; "" retrieves those without a
2342 * catalog; <code>null</code> means drop catalog name from the selection criteria
2343 * @param foreignSchema a schema name; must match the schema name as it
2344 * is stored in the database; "" retrieves those without a schema;
2345 * <code>null</code> means drop schema name from the selection criteria
2346 * @param foreignTable the name of the table that imports the key; must match
2347 * the table name as it is stored in the database
2348 * @return <code>ResultSet</code> - each row is a foreign key column description
2349 * @exception SQLException if a database access error occurs
2350 * @see #getImportedKeys
2351 */
2352 ResultSet getCrossReference(
2353 String parentCatalog, String parentSchema, String parentTable,
2354 String foreignCatalog, String foreignSchema, String foreignTable
2355 ) throws SQLException;
2356
2357 /**
2358 * Retrieves a description of all the data types supported by
2359 * this database. They are ordered by DATA_TYPE and then by how
2360 * closely the data type maps to the corresponding JDBC SQL type.
2361 *
2362 * <P>If the database supports SQL distinct types, then getTypeInfo() will return
2363 * a single row with a TYPE_NAME of DISTINCT and a DATA_TYPE of Types.DISTINCT.
2364 * If the database supports SQL structured types, then getTypeInfo() will return
2365 * a single row with a TYPE_NAME of STRUCT and a DATA_TYPE of Types.STRUCT.
2366 *
2367 * <P>If SQL distinct or structured types are supported, then information on the
2368 * individual types may be obtained from the getUDTs() method.
2369 *
2370
2371 *
2372 * <P>Each type description has the following columns:
2373 * <OL>
2374 * <LI><B>TYPE_NAME</B> String => Type name
2375 * <LI><B>DATA_TYPE</B> int => SQL data type from java.sql.Types
2376 * <LI><B>PRECISION</B> int => maximum precision
2377 * <LI><B>LITERAL_PREFIX</B> String => prefix used to quote a literal
2378 * (may be <code>null</code>)
2379 * <LI><B>LITERAL_SUFFIX</B> String => suffix used to quote a literal
2380 (may be <code>null</code>)
2381 * <LI><B>CREATE_PARAMS</B> String => parameters used in creating
2382 * the type (may be <code>null</code>)
2383 * <LI><B>NULLABLE</B> short => can you use NULL for this type.
2384 * <UL>
2385 * <LI> typeNoNulls - does not allow NULL values
2386 * <LI> typeNullable - allows NULL values
2387 * <LI> typeNullableUnknown - nullability unknown
2388 * </UL>
2389 * <LI><B>CASE_SENSITIVE</B> boolean=> is it case sensitive.
2390 * <LI><B>SEARCHABLE</B> short => can you use "WHERE" based on this type:
2391 * <UL>
2392 * <LI> typePredNone - No support
2393 * <LI> typePredChar - Only supported with WHERE .. LIKE
2394 * <LI> typePredBasic - Supported except for WHERE .. LIKE
2395 * <LI> typeSearchable - Supported for all WHERE ..
2396 * </UL>
2397 * <LI><B>UNSIGNED_ATTRIBUTE</B> boolean => is it unsigned.
2398 * <LI><B>FIXED_PREC_SCALE</B> boolean => can it be a money value.
2399 * <LI><B>AUTO_INCREMENT</B> boolean => can it be used for an
2400 * auto-increment value.
2401 * <LI><B>LOCAL_TYPE_NAME</B> String => localized version of type name
2402 * (may be <code>null</code>)
2403 * <LI><B>MINIMUM_SCALE</B> short => minimum scale supported
2404 * <LI><B>MAXIMUM_SCALE</B> short => maximum scale supported
2405 * <LI><B>SQL_DATA_TYPE</B> int => unused
2406 * <LI><B>SQL_DATETIME_SUB</B> int => unused
2407 * <LI><B>NUM_PREC_RADIX</B> int => usually 2 or 10
2408 * </OL>
2409 *
2410 * <p>The PRECISION column represents the maximum column size that the server supports for the given datatype.
2411 * For numeric data, this is the maximum precision. For character data, this is the length in characters.
2412 * For datetime datatypes, this is the length in characters of the String representation (assuming the
2413 * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype,
2414 * this is the length in bytes. Null is returned for data types where the
2415 * column size is not applicable.
2416 *
2417 * @return a <code>ResultSet</code> object in which each row is an SQL
2418 * type description
2419 * @exception SQLException if a database access error occurs
2420 */
2421 ResultSet getTypeInfo() throws SQLException;
2422
2423 /**
2424 * Indicates that a <code>NULL</code> value is NOT allowed for this
2425 * data type.
2426 * <P>
2427 * A possible value for column <code>NULLABLE</code> in the
2428 * <code>ResultSet</code> object returned by the method
2429 * <code>getTypeInfo</code>.
2430 */
2431 int typeNoNulls = 0;
2432
2433 /**
2434 * Indicates that a <code>NULL</code> value is allowed for this
2435 * data type.
2436 * <P>
2437 * A possible value for column <code>NULLABLE</code> in the
2438 * <code>ResultSet</code> object returned by the method
2439 * <code>getTypeInfo</code>.
2440 */
2441 int typeNullable = 1;
2442
2443 /**
2444 * Indicates that it is not known whether a <code>NULL</code> value
2445 * is allowed for this data type.
2446 * <P>
2447 * A possible value for column <code>NULLABLE</code> in the
2448 * <code>ResultSet</code> object returned by the method
2449 * <code>getTypeInfo</code>.
2450 */
2451 int typeNullableUnknown = 2;
2452
2453 /**
2454 * Indicates that <code>WHERE</code> search clauses are not supported
2455 * for this type.
2456 * <P>
2457 * A possible value for column <code>SEARCHABLE</code> in the
2458 * <code>ResultSet</code> object returned by the method
2459 * <code>getTypeInfo</code>.
2460 */
2461 int typePredNone = 0;
2462
2463 /**
2464 * Indicates that the data type
2465 * can be only be used in <code>WHERE</code> search clauses
2466 * that use <code>LIKE</code> predicates.
2467 * <P>
2468 * A possible value for column <code>SEARCHABLE</code> in the
2469 * <code>ResultSet</code> object returned by the method
2470 * <code>getTypeInfo</code>.
2471 */
2472 int typePredChar = 1;
2473
2474 /**
2475 * Indicates that the data type can be only be used in <code>WHERE</code>
2476 * search clauses
2477 * that do not use <code>LIKE</code> predicates.
2478 * <P>
2479 * A possible value for column <code>SEARCHABLE</code> in the
2480 * <code>ResultSet</code> object returned by the method
2481 * <code>getTypeInfo</code>.
2482 */
2483 int typePredBasic = 2;
2484
2485 /**
2486 * Indicates that all <code>WHERE</code> search clauses can be
2487 * based on this type.
2488 * <P>
2489 * A possible value for column <code>SEARCHABLE</code> in the
2490 * <code>ResultSet</code> object returned by the method
2491 * <code>getTypeInfo</code>.
2492 */
2493 int typeSearchable = 3;
2494
2495 /**
2496 * Retrieves a description of the given table's indices and statistics. They are
2497 * ordered by NON_UNIQUE, TYPE, INDEX_NAME, and ORDINAL_POSITION.
2498 *
2499 * <P>Each index column description has the following columns:
2500 * <OL>
2501 * <LI><B>TABLE_CAT</B> String => table catalog (may be <code>null</code>)
2502 * <LI><B>TABLE_SCHEM</B> String => table schema (may be <code>null</code>)
2503 * <LI><B>TABLE_NAME</B> String => table name
2504 * <LI><B>NON_UNIQUE</B> boolean => Can index values be non-unique.
2505 * false when TYPE is tableIndexStatistic
2506 * <LI><B>INDEX_QUALIFIER</B> String => index catalog (may be <code>null</code>);
2507 * <code>null</code> when TYPE is tableIndexStatistic
2508 * <LI><B>INDEX_NAME</B> String => index name; <code>null</code> when TYPE is
2509 * tableIndexStatistic
2510 * <LI><B>TYPE</B> short => index type:
2511 * <UL>
2512 * <LI> tableIndexStatistic - this identifies table statistics that are
2513 * returned in conjuction with a table's index descriptions
2514 * <LI> tableIndexClustered - this is a clustered index
2515 * <LI> tableIndexHashed - this is a hashed index
2516 * <LI> tableIndexOther - this is some other style of index
2517 * </UL>
2518 * <LI><B>ORDINAL_POSITION</B> short => column sequence number
2519 * within index; zero when TYPE is tableIndexStatistic
2520 * <LI><B>COLUMN_NAME</B> String => column name; <code>null</code> when TYPE is
2521 * tableIndexStatistic
2522 * <LI><B>ASC_OR_DESC</B> String => column sort sequence, "A" => ascending,
2523 * "D" => descending, may be <code>null</code> if sort sequence is not supported;
2524 * <code>null</code> when TYPE is tableIndexStatistic
2525 * <LI><B>CARDINALITY</B> int => When TYPE is tableIndexStatistic, then
2526 * this is the number of rows in the table; otherwise, it is the
2527 * number of unique values in the index.
2528 * <LI><B>PAGES</B> int => When TYPE is tableIndexStatisic then
2529 * this is the number of pages used for the table, otherwise it
2530 * is the number of pages used for the current index.
2531 * <LI><B>FILTER_CONDITION</B> String => Filter condition, if any.
2532 * (may be <code>null</code>)
2533 * </OL>
2534 *
2535 * @param catalog a catalog name; must match the catalog name as it
2536 * is stored in this database; "" retrieves those without a catalog;
2537 * <code>null</code> means that the catalog name should not be used to narrow
2538 * the search
2539 * @param schema a schema name; must match the schema name
2540 * as it is stored in this database; "" retrieves those without a schema;
2541 * <code>null</code> means that the schema name should not be used to narrow
2542 * the search
2543 * @param table a table name; must match the table name as it is stored
2544 * in this database
2545 * @param unique when true, return only indices for unique values;
2546 * when false, return indices regardless of whether unique or not
2547 * @param approximate when true, result is allowed to reflect approximate
2548 * or out of data values; when false, results are requested to be
2549 * accurate
2550 * @return <code>ResultSet</code> - each row is an index column description
2551 * @exception SQLException if a database access error occurs
2552 */
2553 ResultSet getIndexInfo(String catalog, String schema, String table,
2554 boolean unique, boolean approximate)
2555 throws SQLException;
2556
2557 /**
2558 * Indicates that this column contains table statistics that
2559 * are returned in conjunction with a table's index descriptions.
2560 * <P>
2561 * A possible value for column <code>TYPE</code> in the
2562 * <code>ResultSet</code> object returned by the method
2563 * <code>getIndexInfo</code>.
2564 */
2565 short tableIndexStatistic = 0;
2566
2567 /**
2568 * Indicates that this table index is a clustered index.
2569 * <P>
2570 * A possible value for column <code>TYPE</code> in the
2571 * <code>ResultSet</code> object returned by the method
2572 * <code>getIndexInfo</code>.
2573 */
2574 short tableIndexClustered = 1;
2575
2576 /**
2577 * Indicates that this table index is a hashed index.
2578 * <P>
2579 * A possible value for column <code>TYPE</code> in the
2580 * <code>ResultSet</code> object returned by the method
2581 * <code>getIndexInfo</code>.
2582 */
2583 short tableIndexHashed = 2;
2584
2585 /**
2586 * Indicates that this table index is not a clustered
2587 * index, a hashed index, or table statistics;
2588 * it is something other than these.
2589 * <P>
2590 * A possible value for column <code>TYPE</code> in the
2591 * <code>ResultSet</code> object returned by the method
2592 * <code>getIndexInfo</code>.
2593 */
2594 short tableIndexOther = 3;
2595
2596 //--------------------------JDBC 2.0-----------------------------
2597
2598 /**
2599 * Retrieves whether this database supports the given result set type.
2600 *
2601 * @param type defined in <code>java.sql.ResultSet</code>
2602 * @return <code>true</code> if so; <code>false</code> otherwise
2603 * @exception SQLException if a database access error occurs
2604 * @see Connection
2605 * @since 1.2
2606 */
2607 boolean supportsResultSetType(int type) throws SQLException;
2608
2609 /**
2610 * Retrieves whether this database supports the given concurrency type
2611 * in combination with the given result set type.
2612 *
2613 * @param type defined in <code>java.sql.ResultSet</code>
2614 * @param concurrency type defined in <code>java.sql.ResultSet</code>
2615 * @return <code>true</code> if so; <code>false</code> otherwise
2616 * @exception SQLException if a database access error occurs
2617 * @see Connection
2618 * @since 1.2
2619 */
2620 boolean supportsResultSetConcurrency(int type, int concurrency)
2621 throws SQLException;
2622
2623 /**
2624 *
2625 * Retrieves whether for the given type of <code>ResultSet</code> object,
2626 * the result set's own updates are visible.
2627 *
2628 * @param type the <code>ResultSet</code> type; one of
2629 * <code>ResultSet.TYPE_FORWARD_ONLY</code>,
2630 * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or
2631 * <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
2632 * @return <code>true</code> if updates are visible for the given result set type;
2633 * <code>false</code> otherwise
2634 * @exception SQLException if a database access error occurs
2635 * @since 1.2
2636 */
2637 boolean ownUpdatesAreVisible(int type) throws SQLException;
2638
2639 /**
2640 * Retrieves whether a result set's own deletes are visible.
2641 *
2642 * @param type the <code>ResultSet</code> type; one of
2643 * <code>ResultSet.TYPE_FORWARD_ONLY</code>,
2644 * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or
2645 * <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
2646 * @return <code>true</code> if deletes are visible for the given result set type;
2647 * <code>false</code> otherwise
2648 * @exception SQLException if a database access error occurs
2649 * @since 1.2
2650 */
2651 boolean ownDeletesAreVisible(int type) throws SQLException;
2652
2653 /**
2654 * Retrieves whether a result set's own inserts are visible.
2655 *
2656 * @param type the <code>ResultSet</code> type; one of
2657 * <code>ResultSet.TYPE_FORWARD_ONLY</code>,
2658 * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or
2659 * <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
2660 * @return <code>true</code> if inserts are visible for the given result set type;
2661 * <code>false</code> otherwise
2662 * @exception SQLException if a database access error occurs
2663 * @since 1.2
2664 */
2665 boolean ownInsertsAreVisible(int type) throws SQLException;
2666
2667 /**
2668 * Retrieves whether updates made by others are visible.
2669 *
2670 * @param type the <code>ResultSet</code> type; one of
2671 * <code>ResultSet.TYPE_FORWARD_ONLY</code>,
2672 * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or
2673 * <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
2674 * @return <code>true</code> if updates made by others
2675 * are visible for the given result set type;
2676 * <code>false</code> otherwise
2677 * @exception SQLException if a database access error occurs
2678 * @since 1.2
2679 */
2680 boolean othersUpdatesAreVisible(int type) throws SQLException;
2681
2682 /**
2683 * Retrieves whether deletes made by others are visible.
2684 *
2685 * @param type the <code>ResultSet</code> type; one of
2686 * <code>ResultSet.TYPE_FORWARD_ONLY</code>,
2687 * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or
2688 * <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
2689 * @return <code>true</code> if deletes made by others
2690 * are visible for the given result set type;
2691 * <code>false</code> otherwise
2692 * @exception SQLException if a database access error occurs
2693 * @since 1.2
2694 */
2695 boolean othersDeletesAreVisible(int type) throws SQLException;
2696
2697 /**
2698 * Retrieves whether inserts made by others are visible.
2699 *
2700 * @param type the <code>ResultSet</code> type; one of
2701 * <code>ResultSet.TYPE_FORWARD_ONLY</code>,
2702 * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or
2703 * <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
2704 * @return <code>true</code> if inserts made by others
2705 * are visible for the given result set type;
2706 * <code>false</code> otherwise
2707 * @exception SQLException if a database access error occurs
2708 * @since 1.2
2709 */
2710 boolean othersInsertsAreVisible(int type) throws SQLException;
2711
2712 /**
2713 * Retrieves whether or not a visible row update can be detected by
2714 * calling the method <code>ResultSet.rowUpdated</code>.
2715 *
2716 * @param type the <code>ResultSet</code> type; one of
2717 * <code>ResultSet.TYPE_FORWARD_ONLY</code>,
2718 * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or
2719 * <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
2720 * @return <code>true</code> if changes are detected by the result set type;
2721 * <code>false</code> otherwise
2722 * @exception SQLException if a database access error occurs
2723 * @since 1.2
2724 */
2725 boolean updatesAreDetected(int type) throws SQLException;
2726
2727 /**
2728 * Retrieves whether or not a visible row delete can be detected by
2729 * calling the method <code>ResultSet.rowDeleted</code>. If the method
2730 * <code>deletesAreDetected</code> returns <code>false</code>, it means that
2731 * deleted rows are removed from the result set.
2732 *
2733 * @param type the <code>ResultSet</code> type; one of
2734 * <code>ResultSet.TYPE_FORWARD_ONLY</code>,
2735 * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or
2736 * <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
2737 * @return <code>true</code> if deletes are detected by the given result set type;
2738 * <code>false</code> otherwise
2739 * @exception SQLException if a database access error occurs
2740 * @since 1.2
2741 */
2742 boolean deletesAreDetected(int type) throws SQLException;
2743
2744 /**
2745 * Retrieves whether or not a visible row insert can be detected
2746 * by calling the method <code>ResultSet.rowInserted</code>.
2747 *
2748 * @param type the <code>ResultSet</code> type; one of
2749 * <code>ResultSet.TYPE_FORWARD_ONLY</code>,
2750 * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or
2751 * <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
2752 * @return <code>true</code> if changes are detected by the specified result
2753 * set type; <code>false</code> otherwise
2754 * @exception SQLException if a database access error occurs
2755 * @since 1.2
2756 */
2757 boolean insertsAreDetected(int type) throws SQLException;
2758
2759 /**
2760 * Retrieves whether this database supports batch updates.
2761 *
2762 * @return <code>true</code> if this database supports batch upcates;
2763 * <code>false</code> otherwise
2764 * @exception SQLException if a database access error occurs
2765 * @since 1.2
2766 */
2767 boolean supportsBatchUpdates() throws SQLException;
2768
2769 /**
2770 * Retrieves a description of the user-defined types (UDTs) defined
2771 * in a particular schema. Schema-specific UDTs may have type
2772 * <code>JAVA_OBJECT</code>, <code>STRUCT</code>,
2773 * or <code>DISTINCT</code>.
2774 *
2775 * <P>Only types matching the catalog, schema, type name and type
2776 * criteria are returned. They are ordered by <code>DATA_TYPE</code>,
2777 * <code>TYPE_CAT</code>, <code>TYPE_SCHEM</code> and
2778 * <code>TYPE_NAME</code>. The type name parameter may be a fully-qualified
2779 * name. In this case, the catalog and schemaPattern parameters are
2780 * ignored.
2781 *
2782 * <P>Each type description has the following columns:
2783 * <OL>
2784 * <LI><B>TYPE_CAT</B> String => the type's catalog (may be <code>null</code>)
2785 * <LI><B>TYPE_SCHEM</B> String => type's schema (may be <code>null</code>)
2786 * <LI><B>TYPE_NAME</B> String => type name
2787 * <LI><B>CLASS_NAME</B> String => Java class name
2788 * <LI><B>DATA_TYPE</B> int => type value defined in java.sql.Types.
2789 * One of JAVA_OBJECT, STRUCT, or DISTINCT
2790 * <LI><B>REMARKS</B> String => explanatory comment on the type
2791 * <LI><B>BASE_TYPE</B> short => type code of the source type of a
2792 * DISTINCT type or the type that implements the user-generated
2793 * reference type of the SELF_REFERENCING_COLUMN of a structured
2794 * type as defined in java.sql.Types (<code>null</code> if DATA_TYPE is not
2795 * DISTINCT or not STRUCT with REFERENCE_GENERATION = USER_DEFINED)
2796 * </OL>
2797 *
2798 * <P><B>Note:</B> If the driver does not support UDTs, an empty
2799 * result set is returned.
2800 *
2801 * @param catalog a catalog name; must match the catalog name as it
2802 * is stored in the database; "" retrieves those without a catalog;
2803 * <code>null</code> means that the catalog name should not be used to narrow
2804 * the search
2805 * @param schemaPattern a schema pattern name; must match the schema name
2806 * as it is stored in the database; "" retrieves those without a schema;
2807 * <code>null</code> means that the schema name should not be used to narrow
2808 * the search
2809 * @param typeNamePattern a type name pattern; must match the type name
2810 * as it is stored in the database; may be a fully qualified name
2811 * @param types a list of user-defined types (JAVA_OBJECT,
2812 * STRUCT, or DISTINCT) to include; <code>null</code> returns all types
2813 * @return <code>ResultSet</code> object in which each row describes a UDT
2814 * @exception SQLException if a database access error occurs
2815 * @see #getSearchStringEscape
2816 * @since 1.2
2817 */
2818 ResultSet getUDTs(String catalog, String schemaPattern,
2819 String typeNamePattern, int[] types)
2820 throws SQLException;
2821
2822 /**
2823 * Retrieves the connection that produced this metadata object.
2824 * <P>
2825 * @return the connection that produced this metadata object
2826 * @exception SQLException if a database access error occurs
2827 * @since 1.2
2828 */
2829 Connection getConnection() throws SQLException;
2830
2831 // ------------------- JDBC 3.0 -------------------------
2832
2833 /**
2834 * Retrieves whether this database supports savepoints.
2835 *
2836 * @return <code>true</code> if savepoints are supported;
2837 * <code>false</code> otherwise
2838 * @exception SQLException if a database access error occurs
2839 * @since 1.4
2840 */
2841 boolean supportsSavepoints() throws SQLException;
2842
2843 /**
2844 * Retrieves whether this database supports named parameters to callable
2845 * statements.
2846 *
2847 * @return <code>true</code> if named parameters are supported;
2848 * <code>false</code> otherwise
2849 * @exception SQLException if a database access error occurs
2850 * @since 1.4
2851 */
2852 boolean supportsNamedParameters() throws SQLException;
2853
2854 /**
2855 * Retrieves whether it is possible to have multiple <code>ResultSet</code> objects
2856 * returned from a <code>CallableStatement</code> object
2857 * simultaneously.
2858 *
2859 * @return <code>true</code> if a <code>CallableStatement</code> object
2860 * can return multiple <code>ResultSet</code> objects
2861 * simultaneously; <code>false</code> otherwise
2862 * @exception SQLException if a datanase access error occurs
2863 * @since 1.4
2864 */
2865 boolean supportsMultipleOpenResults() throws SQLException;
2866
2867 /**
2868 * Retrieves whether auto-generated keys can be retrieved after
2869 * a statement has been executed
2870 *
2871 * @return <code>true</code> if auto-generated keys can be retrieved
2872 * after a statement has executed; <code>false</code> otherwise
2873 *<p>If <code>true</code> is returned, the JDBC driver must support the
2874 * returning of auto-generated keys for at least SQL INSERT statements
2875 *<p>
2876 * @exception SQLException if a database access error occurs
2877 * @since 1.4
2878 */
2879 boolean supportsGetGeneratedKeys() throws SQLException;
2880
2881 /**
2882 * Retrieves a description of the user-defined type (UDT) hierarchies defined in a
2883 * particular schema in this database. Only the immediate super type/
2884 * sub type relationship is modeled.
2885 * <P>
2886 * Only supertype information for UDTs matching the catalog,
2887 * schema, and type name is returned. The type name parameter
2888 * may be a fully-qualified name. When the UDT name supplied is a
2889 * fully-qualified name, the catalog and schemaPattern parameters are
2890 * ignored.
2891 * <P>
2892 * If a UDT does not have a direct super type, it is not listed here.
2893 * A row of the <code>ResultSet</code> object returned by this method
2894 * describes the designated UDT and a direct supertype. A row has the following
2895 * columns:
2896 * <OL>
2897 * <LI><B>TYPE_CAT</B> String => the UDT's catalog (may be <code>null</code>)
2898 * <LI><B>TYPE_SCHEM</B> String => UDT's schema (may be <code>null</code>)
2899 * <LI><B>TYPE_NAME</B> String => type name of the UDT
2900 * <LI><B>SUPERTYPE_CAT</B> String => the direct super type's catalog
2901 * (may be <code>null</code>)
2902 * <LI><B>SUPERTYPE_SCHEM</B> String => the direct super type's schema
2903 * (may be <code>null</code>)
2904 * <LI><B>SUPERTYPE_NAME</B> String => the direct super type's name
2905 * </OL>
2906 *
2907 * <P><B>Note:</B> If the driver does not support type hierarchies, an
2908 * empty result set is returned.
2909 *
2910 * @param catalog a catalog name; "" retrieves those without a catalog;
2911 * <code>null</code> means drop catalog name from the selection criteria
2912 * @param schemaPattern a schema name pattern; "" retrieves those
2913 * without a schema
2914 * @param typeNamePattern a UDT name pattern; may be a fully-qualified
2915 * name
2916 * @return a <code>ResultSet</code> object in which a row gives information
2917 * about the designated UDT
2918 * @throws SQLException if a database access error occurs
2919 * @see #getSearchStringEscape
2920 * @since 1.4
2921 */
2922 ResultSet getSuperTypes(String catalog, String schemaPattern,
2923 String typeNamePattern) throws SQLException;
2924
2925 /**
2926 * Retrieves a description of the table hierarchies defined in a particular
2927 * schema in this database.
2928 *
2929 * <P>Only supertable information for tables matching the catalog, schema
2930 * and table name are returned. The table name parameter may be a fully-
2931 * qualified name, in which case, the catalog and schemaPattern parameters
2932 * are ignored. If a table does not have a super table, it is not listed here.
2933 * Supertables have to be defined in the same catalog and schema as the
2934 * sub tables. Therefore, the type description does not need to include
2935 * this information for the supertable.
2936 *
2937 * <P>Each type description has the following columns:
2938 * <OL>
2939 * <LI><B>TABLE_CAT</B> String => the type's catalog (may be <code>null</code>)
2940 * <LI><B>TABLE_SCHEM</B> String => type's schema (may be <code>null</code>)
2941 * <LI><B>TABLE_NAME</B> String => type name
2942 * <LI><B>SUPERTABLE_NAME</B> String => the direct super type's name
2943 * </OL>
2944 *
2945 * <P><B>Note:</B> If the driver does not support type hierarchies, an
2946 * empty result set is returned.
2947 *
2948 * @param catalog a catalog name; "" retrieves those without a catalog;
2949 * <code>null</code> means drop catalog name from the selection criteria
2950 * @param schemaPattern a schema name pattern; "" retrieves those
2951 * without a schema
2952 * @param tableNamePattern a table name pattern; may be a fully-qualified
2953 * name
2954 * @return a <code>ResultSet</code> object in which each row is a type description
2955 * @throws SQLException if a database access error occurs
2956 * @see #getSearchStringEscape
2957 * @since 1.4
2958 */
2959 ResultSet getSuperTables(String catalog, String schemaPattern,
2960 String tableNamePattern) throws SQLException;
2961
2962 /**
2963 * Indicates that <code>NULL</code> values might not be allowed.
2964 * <P>
2965 * A possible value for the column
2966 * <code>NULLABLE</code> in the <code>ResultSet</code> object
2967 * returned by the method <code>getAttributes</code>.
2968 */
2969 short attributeNoNulls = 0;
2970
2971 /**
2972 * Indicates that <code>NULL</code> values are definitely allowed.
2973 * <P>
2974 * A possible value for the column <code>NULLABLE</code>
2975 * in the <code>ResultSet</code> object
2976 * returned by the method <code>getAttributes</code>.
2977 */
2978 short attributeNullable = 1;
2979
2980 /**
2981 * Indicates that whether <code>NULL</code> values are allowed is not
2982 * known.
2983 * <P>
2984 * A possible value for the column <code>NULLABLE</code>
2985 * in the <code>ResultSet</code> object
2986 * returned by the method <code>getAttributes</code>.
2987 */
2988 short attributeNullableUnknown = 2;
2989
2990 /**
2991 * Retrieves a description of the given attribute of the given type
2992 * for a user-defined type (UDT) that is available in the given schema
2993 * and catalog.
2994 * <P>
2995 * Descriptions are returned only for attributes of UDTs matching the
2996 * catalog, schema, type, and attribute name criteria. They are ordered by
2997 * <code>TYPE_CAT</code>, <code>TYPE_SCHEM</code>,
2998 * <code>TYPE_NAME</code> and <code>ORDINAL_POSITION</code>. This description
2999 * does not contain inherited attributes.
3000 * <P>
3001 * The <code>ResultSet</code> object that is returned has the following
3002 * columns:
3003 * <OL>
3004 * <LI><B>TYPE_CAT</B> String => type catalog (may be <code>null</code>)
3005 * <LI><B>TYPE_SCHEM</B> String => type schema (may be <code>null</code>)
3006 * <LI><B>TYPE_NAME</B> String => type name
3007 * <LI><B>ATTR_NAME</B> String => attribute name
3008 * <LI><B>DATA_TYPE</B> int => attribute type SQL type from java.sql.Types
3009 * <LI><B>ATTR_TYPE_NAME</B> String => Data source dependent type name.
3010 * For a UDT, the type name is fully qualified. For a REF, the type name is
3011 * fully qualified and represents the target type of the reference type.
3012 * <LI><B>ATTR_SIZE</B> int => column size. For char or date
3013 * types this is the maximum number of characters; for numeric or
3014 * decimal types this is precision.
3015 * <LI><B>DECIMAL_DIGITS</B> int => the number of fractional digits. Null is returned for data types where
3016 * DECIMAL_DIGITS is not applicable.
3017 * <LI><B>NUM_PREC_RADIX</B> int => Radix (typically either 10 or 2)
3018 * <LI><B>NULLABLE</B> int => whether NULL is allowed
3019 * <UL>
3020 * <LI> attributeNoNulls - might not allow NULL values
3021 * <LI> attributeNullable - definitely allows NULL values
3022 * <LI> attributeNullableUnknown - nullability unknown
3023 * </UL>
3024 * <LI><B>REMARKS</B> String => comment describing column (may be <code>null</code>)
3025 * <LI><B>ATTR_DEF</B> String => default value (may be <code>null</code>)
3026 * <LI><B>SQL_DATA_TYPE</B> int => unused
3027 * <LI><B>SQL_DATETIME_SUB</B> int => unused
3028 * <LI><B>CHAR_OCTET_LENGTH</B> int => for char types the
3029 * maximum number of bytes in the column
3030 * <LI><B>ORDINAL_POSITION</B> int => index of the attribute in the UDT
3031 * (starting at 1)
3032 * <LI><B>IS_NULLABLE</B> String => ISO rules are used to determine
3033 * the nullability for a attribute.
3034 * <UL>
3035 * <LI> YES --- if the attribute can include NULLs
3036 * <LI> NO --- if the attribute cannot include NULLs
3037 * <LI> empty string --- if the nullability for the
3038 * attribute is unknown
3039 * </UL>
3040 * <LI><B>SCOPE_CATALOG</B> String => catalog of table that is the
3041 * scope of a reference attribute (<code>null</code> if DATA_TYPE isn't REF)
3042 * <LI><B>SCOPE_SCHEMA</B> String => schema of table that is the
3043 * scope of a reference attribute (<code>null</code> if DATA_TYPE isn't REF)
3044 * <LI><B>SCOPE_TABLE</B> String => table name that is the scope of a
3045 * reference attribute (<code>null</code> if the DATA_TYPE isn't REF)
3046 * <LI><B>SOURCE_DATA_TYPE</B> short => source type of a distinct type or user-generated
3047 * Ref type,SQL type from java.sql.Types (<code>null</code> if DATA_TYPE
3048 * isn't DISTINCT or user-generated REF)
3049 * </OL>
3050 * @param catalog a catalog name; must match the catalog name as it
3051 * is stored in the database; "" retrieves those without a catalog;
3052 * <code>null</code> means that the catalog name should not be used to narrow
3053 * the search
3054 * @param schemaPattern a schema name pattern; must match the schema name
3055 * as it is stored in the database; "" retrieves those without a schema;
3056 * <code>null</code> means that the schema name should not be used to narrow
3057 * the search
3058 * @param typeNamePattern a type name pattern; must match the
3059 * type name as it is stored in the database
3060 * @param attributeNamePattern an attribute name pattern; must match the attribute
3061 * name as it is declared in the database
3062 * @return a <code>ResultSet</code> object in which each row is an
3063 * attribute description
3064 * @exception SQLException if a database access error occurs
3065 * @see #getSearchStringEscape
3066 * @since 1.4
3067 */
3068 ResultSet getAttributes(String catalog, String schemaPattern,
3069 String typeNamePattern, String attributeNamePattern)
3070 throws SQLException;
3071
3072 /**
3073 * Retrieves whether this database supports the given result set holdability.
3074 *
3075 * @param holdability one of the following constants:
3076 * <code>ResultSet.HOLD_CURSORS_OVER_COMMIT</code> or
3077 * <code>ResultSet.CLOSE_CURSORS_AT_COMMIT<code>
3078 * @return <code>true</code> if so; <code>false</code> otherwise
3079 * @exception SQLException if a database access error occurs
3080 * @see Connection
3081 * @since 1.4
3082 */
3083 boolean supportsResultSetHoldability(int holdability) throws SQLException;
3084
3085 /**
3086 * Retrieves this database's default holdability for <code>ResultSet</code>
3087 * objects.
3088 *
3089 * @return the default holdability; either
3090 * <code>ResultSet.HOLD_CURSORS_OVER_COMMIT</code> or
3091 * <code>ResultSet.CLOSE_CURSORS_AT_COMMIT</code>
3092 * @exception SQLException if a database access error occurs
3093 * @since 1.4
3094 */
3095 int getResultSetHoldability() throws SQLException;
3096
3097 /**
3098 * Retrieves the major version number of the underlying database.
3099 *
3100 * @return the underlying database's major version
3101 * @exception SQLException if a database access error occurs
3102 * @since 1.4
3103 */
3104 int getDatabaseMajorVersion() throws SQLException;
3105
3106 /**
3107 * Retrieves the minor version number of the underlying database.
3108 *
3109 * @return underlying database's minor version
3110 * @exception SQLException if a database access error occurs
3111 * @since 1.4
3112 */
3113 int getDatabaseMinorVersion() throws SQLException;
3114
3115 /**
3116 * Retrieves the major JDBC version number for this
3117 * driver.
3118 *
3119 * @return JDBC version major number
3120 * @exception SQLException if a database access error occurs
3121 * @since 1.4
3122 */
3123 int getJDBCMajorVersion() throws SQLException;
3124
3125 /**
3126 * Retrieves the minor JDBC version number for this
3127 * driver.
3128 *
3129 * @return JDBC version minor number
3130 * @exception SQLException if a database access error occurs
3131 * @since 1.4
3132 */
3133 int getJDBCMinorVersion() throws SQLException;
3134
3135 /**
3136 * A possible return value for the method
3137 * <code>DatabaseMetaData.getSQLStateType</code> which is used to indicate
3138 * whether the value returned by the method
3139 * <code>SQLException.getSQLState</code> is an
3140 * X/Open (now know as Open Group) SQL CLI SQLSTATE value.
3141 * <P>
3142 * @since 1.4
3143 */
3144 int sqlStateXOpen = 1;
3145
3146 /**
3147 * A possible return value for the method
3148 * <code>DatabaseMetaData.getSQLStateType</code> which is used to indicate
3149 * whether the value returned by the method
3150 * <code>SQLException.getSQLState</code> is an SQLSTATE value.
3151 * <P>
3152 * @since 1.6
3153 */
3154 int sqlStateSQL = 2;
3155
3156 /**
3157 * A possible return value for the method
3158 * <code>DatabaseMetaData.getSQLStateType</code> which is used to indicate
3159 * whether the value returned by the method
3160 * <code>SQLException.getSQLState</code> is an SQL99 SQLSTATE value.
3161 * <P>
3162 * <b>Note:</b>This constant remains only for compatibility reasons. Developers
3163 * should use the constant <code>sqlStateSQL</code> instead.
3164 *
3165 * @since 1.4
3166 */
3167 int sqlStateSQL99 = sqlStateSQL;
3168
3169 /**
3170 * Indicates whether the SQLSTATE returned by <code>SQLException.getSQLState</code>
3171 * is X/Open (now known as Open Group) SQL CLI or SQL:2003.
3172 * @return the type of SQLSTATE; one of:
3173 * sqlStateXOpen or
3174 * sqlStateSQL
3175 * @throws SQLException if a database access error occurs
3176 * @since 1.4
3177 */
3178 int getSQLStateType() throws SQLException;
3179
3180 /**
3181 * Indicates whether updates made to a LOB are made on a copy or directly
3182 * to the LOB.
3183 * @return <code>true</code> if updates are made to a copy of the LOB;
3184 * <code>false</code> if updates are made directly to the LOB
3185 * @throws SQLException if a database access error occurs
3186 * @since 1.4
3187 */
3188 boolean locatorsUpdateCopy() throws SQLException;
3189
3190 /**
3191 * Retrieves whether this database supports statement pooling.
3192 *
3193 * @return <code>true</code> if so; <code>false</code> otherwise
3194 * @throws SQLException if a database access error occurs
3195 * @since 1.4
3196 */
3197 boolean supportsStatementPooling() throws SQLException;
3198
3199 //------------------------- JDBC 4.0 -----------------------------------
3200
3201 /**
3202 * Indicates whether or not this data source supports the SQL <code>ROWID</code> type,
3203 * and if so the lifetime for which a <code>RowId</code> object remains valid.
3204 * <p>
3205 * The returned int values have the following relationship:
3206 * <pre>
3207 * ROWID_UNSUPPORTED < ROWID_VALID_OTHER < ROWID_VALID_TRANSACTION
3208 * < ROWID_VALID_SESSION < ROWID_VALID_FOREVER
3209 * </pre>
3210 * so conditional logic such as
3211 * <pre>
3212 * if (metadata.getRowIdLifetime() > DatabaseMetaData.ROWID_VALID_TRANSACTION)
3213 * </pre>
3214 * can be used. Valid Forever means valid across all Sessions, and valid for
3215 * a Session means valid across all its contained Transactions.
3216 *
3217 * @return the status indicating the lifetime of a <code>RowId</code>
3218 * @throws SQLException if a database access error occurs
3219 * @since 1.6
3220 */
3221 RowIdLifetime getRowIdLifetime() throws SQLException;
3222
3223 /**
3224 * Retrieves the schema names available in this database. The results
3225 * are ordered by <code>TABLE_CATALOG</code> and
3226 * <code>TABLE_SCHEM</code>.
3227 *
3228 * <P>The schema columns are:
3229 * <OL>
3230 * <LI><B>TABLE_SCHEM</B> String => schema name
3231 * <LI><B>TABLE_CATALOG</B> String => catalog name (may be <code>null</code>)
3232 * </OL>
3233 *
3234 *
3235 * @param catalog a catalog name; must match the catalog name as it is stored
3236 * in the database;"" retrieves those without a catalog; null means catalog
3237 * name should not be used to narrow down the search.
3238 * @param schemaPattern a schema name; must match the schema name as it is
3239 * stored in the database; null means
3240 * schema name should not be used to narrow down the search.
3241 * @return a <code>ResultSet</code> object in which each row is a
3242 * schema description
3243 * @exception SQLException if a database access error occurs
3244 * @see #getSearchStringEscape
3245 * @since 1.6
3246 */
3247 ResultSet getSchemas(String catalog, String schemaPattern) throws SQLException;
3248
3249 /**
3250 * Retrieves whether this database supports invoking user-defined or vendor functions
3251 * using the stored procedure escape syntax.
3252 *
3253 * @return <code>true</code> if so; <code>false</code> otherwise
3254 * @exception SQLException if a database access error occurs
3255 * @since 1.6
3256 */
3257 boolean supportsStoredFunctionsUsingCallSyntax() throws SQLException;
3258
3259 /**
3260 * Retrieves whether a <code>SQLException</code> while autoCommit is <code>true</code> inidcates
3261 * that all open ResultSets are closed, even ones that are holdable. When a <code>SQLException</code> occurs while
3262 * autocommit is <code>true</code>, it is vendor specific whether the JDBC driver responds with a commit operation, a
3263 * rollback operation, or by doing neither a commit nor a rollback. A potential result of this difference
3264 * is in whether or not holdable ResultSets are closed.
3265 *
3266 * @return <code>true</code> if so; <code>false</code> otherwise
3267 * @exception SQLException if a database access error occurs
3268 * @since 1.6
3269 */
3270 boolean autoCommitFailureClosesAllResultSets() throws SQLException;
3271 /**
3272 * Retrieves a list of the client info properties
3273 * that the driver supports. The result set contains the following columns
3274 * <p>
3275 * <ol>
3276 * <li><b>NAME</b> String=> The name of the client info property<br>
3277 * <li><b>MAX_LEN</b> int=> The maximum length of the value for the property<br>
3278 * <li><b>DEFAULT_VALUE</b> String=> The default value of the property<br>
3279 * <li><b>DESCRIPTION</b> String=> A description of the property. This will typically
3280 * contain information as to where this property is
3281 * stored in the database.
3282 * </ol>
3283 * <p>
3284 * The <code>ResultSet</code> is sorted by the NAME column
3285 * <p>
3286 * @return A <code>ResultSet</code> object; each row is a supported client info
3287 * property
3288 * <p>
3289 * @exception SQLException if a database access error occurs
3290 * <p>
3291 * @since 1.6
3292 */
3293 ResultSet getClientInfoProperties()
3294 throws SQLException;
3295
3296 /**
3297 * Retrieves a description of the system and user functions available
3298 * in the given catalog.
3299 * <P>
3300 * Only system and user function descriptions matching the schema and
3301 * function name criteria are returned. They are ordered by
3302 * <code>FUNCTION_CAT</code>, <code>FUNCTION_SCHEM</code>,
3303 * <code>FUNCTION_NAME</code> and
3304 * <code>SPECIFIC_ NAME</code>.
3305 *
3306 * <P>Each function description has the the following columns:
3307 * <OL>
3308 * <LI><B>FUNCTION_CAT</B> String => function catalog (may be <code>null</code>)
3309 * <LI><B>FUNCTION_SCHEM</B> String => function schema (may be <code>null</code>)
3310 * <LI><B>FUNCTION_NAME</B> String => function name. This is the name
3311 * used to invoke the function
3312 * <LI><B>REMARKS</B> String => explanatory comment on the function
3313 * <LI><B>FUNCTION_TYPE</B> short => kind of function:
3314 * <UL>
3315 * <LI>functionResultUnknown - Cannot determine if a return value
3316 * or table will be returned
3317 * <LI> functionNoTable- Does not return a table
3318 * <LI> functionReturnsTable - Returns a table
3319 * </UL>
3320 * <LI><B>SPECIFIC_NAME</B> String => the name which uniquely identifies
3321 * this function within its schema. This is a user specified, or DBMS
3322 * generated, name that may be different then the <code>FUNCTION_NAME</code>
3323 * for example with overload functions
3324 * </OL>
3325 * <p>
3326 * A user may not have permission to execute any of the functions that are
3327 * returned by <code>getFunctions</code>
3328 *
3329 * @param catalog a catalog name; must match the catalog name as it
3330 * is stored in the database; "" retrieves those without a catalog;
3331 * <code>null</code> means that the catalog name should not be used to narrow
3332 * the search
3333 * @param schemaPattern a schema name pattern; must match the schema name
3334 * as it is stored in the database; "" retrieves those without a schema;
3335 * <code>null</code> means that the schema name should not be used to narrow
3336 * the search
3337 * @param functionNamePattern a function name pattern; must match the
3338 * function name as it is stored in the database
3339 * @return <code>ResultSet</code> - each row is a function description
3340 * @exception SQLException if a database access error occurs
3341 * @see #getSearchStringEscape
3342 * @since 1.6
3343 */
3344 ResultSet getFunctions(String catalog, String schemaPattern,
3345 String functionNamePattern) throws SQLException;
3346 /**
3347 * Retrieves a description of the given catalog's system or user
3348 * function parameters and return type.
3349 *
3350 * <P>Only descriptions matching the schema, function and
3351 * parameter name criteria are returned. They are ordered by
3352 * <code>FUNCTION_CAT</code>, <code>FUNCTION_SCHEM</code>,
3353 * <code>FUNCTION_NAME</code> and
3354 * <code>SPECIFIC_ NAME</code>. Within this, the return value,
3355 * if any, is first. Next are the parameter descriptions in call
3356 * order. The column descriptions follow in column number order.
3357 *
3358 * <P>Each row in the <code>ResultSet</code>
3359 * is a parameter description, column description or
3360 * return type description with the following fields:
3361 * <OL>
3362 * <LI><B>FUNCTION_CAT</B> String => function catalog (may be <code>null</code>)
3363 * <LI><B>FUNCTION_SCHEM</B> String => function schema (may be <code>null</code>)
3364 * <LI><B>FUNCTION_NAME</B> String => function name. This is the name
3365 * used to invoke the function
3366 * <LI><B>COLUMN_NAME</B> String => column/parameter name
3367 * <LI><B>COLUMN_TYPE</B> Short => kind of column/parameter:
3368 * <UL>
3369 * <LI> functionColumnUnknown - nobody knows
3370 * <LI> functionColumnIn - IN parameter
3371 * <LI> functionColumnInOut - INOUT parameter
3372 * <LI> functionColumnOut - OUT parameter
3373 * <LI> functionColumnReturn - function return value
3374 * <LI> functionColumnResult - Indicates that the parameter or column
3375 * is a column in the <code>ResultSet</code>
3376 * </UL>
3377 * <LI><B>DATA_TYPE</B> int => SQL type from java.sql.Types
3378 * <LI><B>TYPE_NAME</B> String => SQL type name, for a UDT type the
3379 * type name is fully qualified
3380 * <LI><B>PRECISION</B> int => precision
3381 * <LI><B>LENGTH</B> int => length in bytes of data
3382 * <LI><B>SCALE</B> short => scale - null is returned for data types where
3383 * SCALE is not applicable.
3384 * <LI><B>RADIX</B> short => radix
3385 * <LI><B>NULLABLE</B> short => can it contain NULL.
3386 * <UL>
3387 * <LI> functionNoNulls - does not allow NULL values
3388 * <LI> functionNullable - allows NULL values
3389 * <LI> functionNullableUnknown - nullability unknown
3390 * </UL>
3391 * <LI><B>REMARKS</B> String => comment describing column/parameter
3392 * <LI><B>CHAR_OCTET_LENGTH</B> int => the maximum length of binary
3393 * and character based parameters or columns. For any other datatype the returned value
3394 * is a NULL
3395 * <LI><B>ORDINAL_POSITION</B> int => the ordinal position, starting
3396 * from 1, for the input and output parameters. A value of 0
3397 * is returned if this row describes the function's return value.
3398 * For result set columns, it is the
3399 * ordinal position of the column in the result set starting from 1.
3400 * <LI><B>IS_NULLABLE</B> String => ISO rules are used to determine
3401 * the nullability for a parameter or column.
3402 * <UL>
3403 * <LI> YES --- if the parameter or column can include NULLs
3404 * <LI> NO --- if the parameter or column cannot include NULLs
3405 * <LI> empty string --- if the nullability for the
3406 * parameter or column is unknown
3407 * </UL>
3408 * <LI><B>SPECIFIC_NAME</B> String => the name which uniquely identifies
3409 * this function within its schema. This is a user specified, or DBMS
3410 * generated, name that may be different then the <code>FUNCTION_NAME</code>
3411 * for example with overload functions
3412 * </OL>
3413 *
3414 * <p>The PRECISION column represents the specified column size for the given
3415 * parameter or column.
3416 * For numeric data, this is the maximum precision. For character data, this is the length in characters.
3417 * For datetime datatypes, this is the length in characters of the String representation (assuming the
3418 * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype,
3419 * this is the length in bytes. Null is returned for data types where the
3420 * column size is not applicable.
3421 * @param catalog a catalog name; must match the catalog name as it
3422 * is stored in the database; "" retrieves those without a catalog;
3423 * <code>null</code> means that the catalog name should not be used to narrow
3424 * the search
3425 * @param schemaPattern a schema name pattern; must match the schema name
3426 * as it is stored in the database; "" retrieves those without a schema;
3427 * <code>null</code> means that the schema name should not be used to narrow
3428 * the search
3429 * @param functionNamePattern a procedure name pattern; must match the
3430 * function name as it is stored in the database
3431 * @param columnNamePattern a parameter name pattern; must match the
3432 * parameter or column name as it is stored in the database
3433 * @return <code>ResultSet</code> - each row describes a
3434 * user function parameter, column or return type
3435 *
3436 * @exception SQLException if a database access error occurs
3437 * @see #getSearchStringEscape
3438 * @since 1.6
3439 */
3440 ResultSet getFunctionColumns(String catalog,
3441 String schemaPattern,
3442 String functionNamePattern,
3443 String columnNamePattern) throws SQLException;
3444
3445
3446 /**
3447 * Indicates that type of the parameter or column is unknown.
3448 * <P>
3449 * A possible value for the column
3450 * <code>COLUMN_TYPE</code>
3451 * in the <code>ResultSet</code>
3452 * returned by the method <code>getFunctionColumns</code>.
3453 */
3454 int functionColumnUnknown = 0;
3455
3456 /**
3457 * Indicates that the parameter or column is an IN parameter.
3458 * <P>
3459 * A possible value for the column
3460 * <code>COLUMN_TYPE</code>
3461 * in the <code>ResultSet</code>
3462 * returned by the method <code>getFunctionColumns</code>.
3463 * @since 1.6
3464 */
3465 int functionColumnIn = 1;
3466
3467 /**
3468 * Indicates that the parameter or column is an INOUT parameter.
3469 * <P>
3470 * A possible value for the column
3471 * <code>COLUMN_TYPE</code>
3472 * in the <code>ResultSet</code>
3473 * returned by the method <code>getFunctionColumns</code>.
3474 * @since 1.6
3475 */
3476 int functionColumnInOut = 2;
3477
3478 /**
3479 * Indicates that the parameter or column is an OUT parameter.
3480 * <P>
3481 * A possible value for the column
3482 * <code>COLUMN_TYPE</code>
3483 * in the <code>ResultSet</code>
3484 * returned by the method <code>getFunctionColumns</code>.
3485 * @since 1.6
3486 */
3487 int functionColumnOut = 3;
3488 /**
3489 * Indicates that the parameter or column is a return value.
3490 * <P>
3491 * A possible value for the column
3492 * <code>COLUMN_TYPE</code>
3493 * in the <code>ResultSet</code>
3494 * returned by the method <code>getFunctionColumns</code>.
3495 * @since 1.6
3496 */
3497 int functionReturn = 4;
3498
3499 /**
3500 * Indicates that the parameter or column is a column in a result set.
3501 * <P>
3502 * A possible value for the column
3503 * <code>COLUMN_TYPE</code>
3504 * in the <code>ResultSet</code>
3505 * returned by the method <code>getFunctionColumns</code>.
3506 * @since 1.6
3507 */
3508 int functionColumnResult = 5;
3509
3510
3511 /**
3512 * Indicates that <code>NULL</code> values are not allowed.
3513 * <P>
3514 * A possible value for the column
3515 * <code>NULLABLE</code>
3516 * in the <code>ResultSet</code> object
3517 * returned by the method <code>getFunctionColumns</code>.
3518 * @since 1.6
3519 */
3520 int functionNoNulls = 0;
3521
3522 /**
3523 * Indicates that <code>NULL</code> values are allowed.
3524 * <P>
3525 * A possible value for the column
3526 * <code>NULLABLE</code>
3527 * in the <code>ResultSet</code> object
3528 * returned by the method <code>getFunctionColumns</code>.
3529 * @since 1.6
3530 */
3531 int functionNullable = 1;
3532
3533 /**
3534 * Indicates that whether <code>NULL</code> values are allowed
3535 * is unknown.
3536 * <P>
3537 * A possible value for the column
3538 * <code>NULLABLE</code>
3539 * in the <code>ResultSet</code> object
3540 * returned by the method <code>getFunctionColumns</code>.
3541 * @since 1.6
3542 */
3543 int functionNullableUnknown = 2;
3544
3545 /**
3546 * Indicates that it is not known whether the function returns
3547 * a result or a table.
3548 * <P>
3549 * A possible value for column <code>FUNCTION_TYPE</code> in the
3550 * <code>ResultSet</code> object returned by the method
3551 * <code>getFunctions</code>.
3552 * @since 1.6
3553 */
3554 int functionResultUnknown = 0;
3555
3556 /**
3557 * Indicates that the function does not return a table.
3558 * <P>
3559 * A possible value for column <code>FUNCTION_TYPE</code> in the
3560 * <code>ResultSet</code> object returned by the method
3561 * <code>getFunctions</code>.
3562 * @since 1.6
3563 */
3564 int functionNoTable = 1;
3565
3566 /**
3567 * Indicates that the function returns a table.
3568 * <P>
3569 * A possible value for column <code>FUNCTION_TYPE</code> in the
3570 * <code>ResultSet</code> object returned by the method
3571 * <code>getFunctions</code>.
3572 * @since 1.6
3573 */
3574 int functionReturnsTable = 2;
3575
3576 //--------------------------JDBC 4.1 -----------------------------
3577
3578 /**
3579 * Retrieves a description of the pseudo or hidden columns available
3580 * in a given table within the specified catalog and schema.
3581 * Pseudo or hidden columns may not always be stored within
3582 * a table and are not visible in a ResultSet unless they are
3583 * specified in the query's outermost SELECT list. Pseudo or hidden
3584 * columns may not necessarily be able to be modified. If there are
3585 * no pseudo or hidden columns, an empty ResultSet is returned.
3586 *
3587 * <P>Only column descriptions matching the catalog, schema, table
3588 * and column name criteria are returned. They are ordered by
3589 * <code>TABLE_CAT</code>,<code>TABLE_SCHEM</code>, <code>TABLE_NAME</code>
3590 * and <code>COLUMN_NAME</code>.
3591 *
3592 * <P>Each column description has the following columns:
3593 * <OL>
3594 * <LI><B>TABLE_CAT</B> String => table catalog (may be <code>null</code>)
3595 * <LI><B>TABLE_SCHEM</B> String => table schema (may be <code>null</code>)
3596 * <LI><B>TABLE_NAME</B> String => table name
3597 * <LI><B>COLUMN_NAME</B> String => column name
3598 * <LI><B>DATA_TYPE</B> int => SQL type from java.sql.Types
3599 * <LI><B>COLUMN_SIZE</B> int => column size.
3600 * <LI><B>DECIMAL_DIGITS</B> int => the number of fractional digits. Null is returned for data types where
3601 * DECIMAL_DIGITS is not applicable.
3602 * <LI><B>NUM_PREC_RADIX</B> int => Radix (typically either 10 or 2)
3603 * <LI><B>COLUMN_USAGE</B> String => The allowed usage for the column. The
3604 * value returned will correspond to the enum name returned by {@link PseudoColumnUsage#name PseudoColumnUsage.name()}
3605 * <LI><B>REMARKS</B> String => comment describing column (may be <code>null</code>)
3606 * <LI><B>CHAR_OCTET_LENGTH</B> int => for char types the
3607 * maximum number of bytes in the column
3608 * <LI><B>IS_NULLABLE</B> String => ISO rules are used to determine the nullability for a column.
3609 * <UL>
3610 * <LI> YES --- if the column can include NULLs
3611 * <LI> NO --- if the column cannot include NULLs
3612 * <LI> empty string --- if the nullability for the column is unknown
3613 * </UL>
3614 * </OL>
3615 *
3616 * <p>The COLUMN_SIZE column specifies the column size for the given column.
3617 * For numeric data, this is the maximum precision. For character data, this is the length in characters.
3618 * For datetime datatypes, this is the length in characters of the String representation (assuming the
3619 * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype,
3620 * this is the length in bytes. Null is returned for data types where the
3621 * column size is not applicable.
3622 *
3623 * @param catalog a catalog name; must match the catalog name as it
3624 * is stored in the database; "" retrieves those without a catalog;
3625 * <code>null</code> means that the catalog name should not be used to narrow
3626 * the search
3627 * @param schemaPattern a schema name pattern; must match the schema name
3628 * as it is stored in the database; "" retrieves those without a schema;
3629 * <code>null</code> means that the schema name should not be used to narrow
3630 * the search
3631 * @param tableNamePattern a table name pattern; must match the
3632 * table name as it is stored in the database
3633 * @param columnNamePattern a column name pattern; must match the column
3634 * name as it is stored in the database
3635 * @return <code>ResultSet</code> - each row is a column description
3636 * @exception SQLException if a database access error occurs
3637 * @see PseudoColumnUsage
3638 * @since 1.7
3639 */
3640 ResultSet getPseudoColumns(String catalog, String schemaPattern,
3641 String tableNamePattern, String columnNamePattern)
3642 throws SQLException;
3643
3644 /**
3645 * Retrieves whether a generated key will always be returned if the column
3646 * name(s) or index(es) specified for the auto generated key column(s)
3647 * are valid and the statement succeeds. The key that is returned may or
3648 * may not be based on the column(s) for the auto generated key.
3649 * Consult your JDBC driver documentation for additional details.
3650 * @return <code>true</code> if so; <code>false</code> otherwise
3651 * @exception SQLException if a database access error occurs
3652 * @since 1.7
3653 */
3654 boolean generatedKeyAlwaysReturned() throws SQLException;
3655}