Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/java.sql/share/classes/java/sql/DatabaseMetaData.java
41153 views
1
/*
2
* Copyright (c) 1996, 2020, 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
27
package java.sql;
28
29
/**
30
* Comprehensive information about the database as a whole.
31
* <P>
32
* This interface is implemented by driver vendors to let users know the capabilities
33
* of a Database Management System (DBMS) in combination with
34
* the driver based on JDBC 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} to find out what data types can be used in a
47
* {@code CREATE TABLE} statement. Or a user might call the method
48
* {@code supportsCorrelatedSubqueries} to see if it is possible to use
49
* a correlated subquery or {@code supportsBatchUpdates} to see if it is
50
* possible to use batch updates.
51
* <P>
52
* Some {@code DatabaseMetaData} methods return lists of information
53
* in the form of {@code ResultSet} objects.
54
* Regular {@code ResultSet} methods, such as
55
* {@code getString} and {@code getInt}, can be used
56
* to retrieve the data from these {@code ResultSet} objects. If
57
* a given form of metadata is not available, an empty {@code ResultSet}
58
* will be returned. Additional columns beyond the columns defined to be
59
* returned by the {@code ResultSet} 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} 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}, that argument's criterion will
69
* be dropped from the search.
70
*
71
* @since 1.1
72
*/
73
public interface DatabaseMetaData extends Wrapper {
74
75
//----------------------------------------------------------------------
76
// First, a variety of minor information about the target database.
77
78
/**
79
* Retrieves whether the current user can call all the procedures
80
* returned by the method {@code getProcedures}.
81
*
82
* @return {@code true} if so; {@code false} otherwise
83
* @throws SQLException if a database access error occurs
84
*/
85
boolean allProceduresAreCallable() throws SQLException;
86
87
/**
88
* Retrieves whether the current user can use all the tables returned
89
* by the method {@code getTables} in a {@code SELECT}
90
* statement.
91
*
92
* @return {@code true} if so; {@code false} otherwise
93
* @throws SQLException if a database access error occurs
94
*/
95
boolean allTablesAreSelectable() throws SQLException;
96
97
/**
98
* Retrieves the URL for this DBMS.
99
*
100
* @return the URL for this DBMS or {@code null} if it cannot be
101
* generated
102
* @throws SQLException if a database access error occurs
103
*/
104
String getURL() throws SQLException;
105
106
/**
107
* Retrieves the user name as known to this database.
108
*
109
* @return the database user name
110
* @throws SQLException if a database access error occurs
111
*/
112
String getUserName() throws SQLException;
113
114
/**
115
* Retrieves whether this database is in read-only mode.
116
*
117
* @return {@code true} if so; {@code false} otherwise
118
* @throws SQLException if a database access error occurs
119
*/
120
boolean isReadOnly() throws SQLException;
121
122
/**
123
* Retrieves whether {@code NULL} values are sorted high.
124
* Sorted high means that {@code NULL} values
125
* sort higher than any other value in a domain. In an ascending order,
126
* if this method returns {@code true}, {@code NULL} values
127
* will appear at the end. By contrast, the method
128
* {@code nullsAreSortedAtEnd} indicates whether {@code NULL} values
129
* are sorted at the end regardless of sort order.
130
*
131
* @return {@code true} if so; {@code false} otherwise
132
* @throws SQLException if a database access error occurs
133
*/
134
boolean nullsAreSortedHigh() throws SQLException;
135
136
/**
137
* Retrieves whether {@code NULL} values are sorted low.
138
* Sorted low means that {@code NULL} values
139
* sort lower than any other value in a domain. In an ascending order,
140
* if this method returns {@code true}, {@code NULL} values
141
* will appear at the beginning. By contrast, the method
142
* {@code nullsAreSortedAtStart} indicates whether {@code NULL} values
143
* are sorted at the beginning regardless of sort order.
144
*
145
* @return {@code true} if so; {@code false} otherwise
146
* @throws SQLException if a database access error occurs
147
*/
148
boolean nullsAreSortedLow() throws SQLException;
149
150
/**
151
* Retrieves whether {@code NULL} values are sorted at the start regardless
152
* of sort order.
153
*
154
* @return {@code true} if so; {@code false} otherwise
155
* @throws SQLException if a database access error occurs
156
*/
157
boolean nullsAreSortedAtStart() throws SQLException;
158
159
/**
160
* Retrieves whether {@code NULL} values are sorted at the end regardless of
161
* sort order.
162
*
163
* @return {@code true} if so; {@code false} otherwise
164
* @throws SQLException if a database access error occurs
165
*/
166
boolean nullsAreSortedAtEnd() throws SQLException;
167
168
/**
169
* Retrieves the name of this database product.
170
*
171
* @return database product name
172
* @throws SQLException if a database access error occurs
173
*/
174
String getDatabaseProductName() throws SQLException;
175
176
/**
177
* Retrieves the version number of this database product.
178
*
179
* @return database version number
180
* @throws SQLException if a database access error occurs
181
*/
182
String getDatabaseProductVersion() throws SQLException;
183
184
/**
185
* Retrieves the name of this JDBC driver.
186
*
187
* @return JDBC driver name
188
* @throws SQLException if a database access error occurs
189
*/
190
String getDriverName() throws SQLException;
191
192
/**
193
* Retrieves the version number of this JDBC driver as a {@code String}.
194
*
195
* @return JDBC driver version
196
* @throws SQLException if a database access error occurs
197
*/
198
String getDriverVersion() throws SQLException;
199
200
/**
201
* Retrieves this JDBC driver's major version number.
202
*
203
* @return JDBC driver major version
204
*/
205
int getDriverMajorVersion();
206
207
/**
208
* Retrieves this JDBC driver's minor version number.
209
*
210
* @return JDBC driver minor version number
211
*/
212
int getDriverMinorVersion();
213
214
/**
215
* Retrieves whether this database stores tables in a local file.
216
*
217
* @return {@code true} if so; {@code false} otherwise
218
* @throws SQLException if a database access error occurs
219
*/
220
boolean usesLocalFiles() throws SQLException;
221
222
/**
223
* Retrieves whether this database uses a file for each table.
224
*
225
* @return {@code true} if this database uses a local file for each table;
226
* {@code false} otherwise
227
* @throws SQLException if a database access error occurs
228
*/
229
boolean usesLocalFilePerTable() throws SQLException;
230
231
/**
232
* Retrieves whether this database treats mixed case unquoted SQL identifiers as
233
* case sensitive and as a result stores them in mixed case.
234
*
235
* @return {@code true} if so; {@code false} otherwise
236
* @throws SQLException if a database access error occurs
237
*/
238
boolean supportsMixedCaseIdentifiers() throws SQLException;
239
240
/**
241
* Retrieves whether this database treats mixed case unquoted SQL identifiers as
242
* case insensitive and stores them in upper case.
243
*
244
* @return {@code true} if so; {@code false} otherwise
245
* @throws SQLException if a database access error occurs
246
*/
247
boolean storesUpperCaseIdentifiers() throws SQLException;
248
249
/**
250
* Retrieves whether this database treats mixed case unquoted SQL identifiers as
251
* case insensitive and stores them in lower case.
252
*
253
* @return {@code true} if so; {@code false} otherwise
254
* @throws SQLException if a database access error occurs
255
*/
256
boolean storesLowerCaseIdentifiers() throws SQLException;
257
258
/**
259
* Retrieves whether this database treats mixed case unquoted SQL identifiers as
260
* case insensitive and stores them in mixed case.
261
*
262
* @return {@code true} if so; {@code false} otherwise
263
* @throws SQLException if a database access error occurs
264
*/
265
boolean storesMixedCaseIdentifiers() throws SQLException;
266
267
/**
268
* Retrieves whether this database treats mixed case quoted SQL identifiers as
269
* case sensitive and as a result stores them in mixed case.
270
*
271
* @return {@code true} if so; {@code false} otherwise
272
* @throws SQLException if a database access error occurs
273
*/
274
boolean supportsMixedCaseQuotedIdentifiers() throws SQLException;
275
276
/**
277
* Retrieves whether this database treats mixed case quoted SQL identifiers as
278
* case insensitive and stores them in upper case.
279
*
280
* @return {@code true} if so; {@code false} otherwise
281
* @throws SQLException if a database access error occurs
282
*/
283
boolean storesUpperCaseQuotedIdentifiers() throws SQLException;
284
285
/**
286
* Retrieves whether this database treats mixed case quoted SQL identifiers as
287
* case insensitive and stores them in lower case.
288
*
289
* @return {@code true} if so; {@code false} otherwise
290
* @throws SQLException if a database access error occurs
291
*/
292
boolean storesLowerCaseQuotedIdentifiers() throws SQLException;
293
294
/**
295
* Retrieves whether this database treats mixed case quoted SQL identifiers as
296
* case insensitive and stores them in mixed case.
297
*
298
* @return {@code true} if so; {@code false} otherwise
299
* @throws SQLException if a database access error occurs
300
*/
301
boolean storesMixedCaseQuotedIdentifiers() throws SQLException;
302
303
/**
304
* Retrieves the string used to quote SQL identifiers.
305
* This method returns a space " " if identifier quoting is not supported.
306
*
307
* @return the quoting string or a space if quoting is not supported
308
* @throws SQLException if a database access error occurs
309
*/
310
String getIdentifierQuoteString() throws SQLException;
311
312
/**
313
* Retrieves a comma-separated list of all of this database's SQL keywords
314
* that are NOT also SQL:2003 keywords.
315
*
316
* @return the list of this database's keywords that are not also
317
* SQL:2003 keywords
318
* @throws SQLException if a database access error occurs
319
*/
320
String getSQLKeywords() throws SQLException;
321
322
/**
323
* Retrieves a comma-separated list of math functions available with
324
* this database. These are the Open /Open CLI math function names used in
325
* the JDBC function escape clause.
326
*
327
* @return the list of math functions supported by this database
328
* @throws SQLException if a database access error occurs
329
*/
330
String getNumericFunctions() throws SQLException;
331
332
/**
333
* Retrieves a comma-separated list of string functions available with
334
* this database. These are the Open Group CLI string function names used
335
* in the JDBC function escape clause.
336
*
337
* @return the list of string functions supported by this database
338
* @throws SQLException if a database access error occurs
339
*/
340
String getStringFunctions() throws SQLException;
341
342
/**
343
* Retrieves a comma-separated list of system functions available with
344
* this database. These are the Open Group CLI system function names used
345
* in the JDBC function escape clause.
346
*
347
* @return a list of system functions supported by this database
348
* @throws SQLException if a database access error occurs
349
*/
350
String getSystemFunctions() throws SQLException;
351
352
/**
353
* Retrieves a comma-separated list of the time and date functions available
354
* with this database.
355
*
356
* @return the list of time and date functions supported by this database
357
* @throws SQLException if a database access error occurs
358
*/
359
String getTimeDateFunctions() throws SQLException;
360
361
/**
362
* Retrieves the string that can be used to escape wildcard characters.
363
* This is the string that can be used to escape '_' or '%' in
364
* the catalog search parameters that are a pattern (and therefore use one
365
* of the wildcard characters).
366
*
367
* <P>The '_' character represents any single character;
368
* the '%' character represents any sequence of zero or
369
* more characters.
370
*
371
* @return the string used to escape wildcard characters
372
* @throws SQLException if a database access error occurs
373
*/
374
String getSearchStringEscape() throws SQLException;
375
376
/**
377
* Retrieves all the "extra" characters that can be used in unquoted
378
* identifier names (those beyond a-z, A-Z, 0-9 and _).
379
*
380
* @return the string containing the extra characters
381
* @throws SQLException if a database access error occurs
382
*/
383
String getExtraNameCharacters() throws SQLException;
384
385
//--------------------------------------------------------------------
386
// Functions describing which features are supported.
387
388
/**
389
* Retrieves whether this database supports {@code ALTER TABLE}
390
* with add column.
391
*
392
* @return {@code true} if so; {@code false} otherwise
393
* @throws SQLException if a database access error occurs
394
*/
395
boolean supportsAlterTableWithAddColumn() throws SQLException;
396
397
/**
398
* Retrieves whether this database supports {@code ALTER TABLE}
399
* with drop column.
400
*
401
* @return {@code true} if so; {@code false} otherwise
402
* @throws SQLException if a database access error occurs
403
*/
404
boolean supportsAlterTableWithDropColumn() throws SQLException;
405
406
/**
407
* Retrieves whether this database supports column aliasing.
408
*
409
* <P>If so, the SQL AS clause can be used to provide names for
410
* computed columns or to provide alias names for columns as
411
* required.
412
*
413
* @return {@code true} if so; {@code false} otherwise
414
* @throws SQLException if a database access error occurs
415
*/
416
boolean supportsColumnAliasing() throws SQLException;
417
418
/**
419
* Retrieves whether this database supports concatenations between
420
* {@code NULL} and non-{@code NULL} values being
421
* {@code NULL}.
422
*
423
* @return {@code true} if so; {@code false} otherwise
424
* @throws SQLException if a database access error occurs
425
*/
426
boolean nullPlusNonNullIsNull() throws SQLException;
427
428
/**
429
* Retrieves whether this database supports the JDBC scalar function
430
* {@code CONVERT} for the conversion of one JDBC type to another.
431
* The JDBC types are the generic SQL data types defined
432
* in {@code java.sql.Types}.
433
*
434
* @return {@code true} if so; {@code false} otherwise
435
* @throws SQLException if a database access error occurs
436
*/
437
boolean supportsConvert() throws SQLException;
438
439
/**
440
* Retrieves whether this database supports the JDBC scalar function
441
* {@code CONVERT} for conversions between the JDBC types <i>fromType</i>
442
* and <i>toType</i>. The JDBC types are the generic SQL data types defined
443
* in {@code java.sql.Types}.
444
*
445
* @param fromType the type to convert from; one of the type codes from
446
* the class {@code java.sql.Types}
447
* @param toType the type to convert to; one of the type codes from
448
* the class {@code java.sql.Types}
449
* @return {@code true} if so; {@code false} otherwise
450
* @throws SQLException if a database access error occurs
451
* @see Types
452
*/
453
boolean supportsConvert(int fromType, int toType) throws SQLException;
454
455
/**
456
* Retrieves whether this database supports table correlation names.
457
*
458
* @return {@code true} if so; {@code false} otherwise
459
* @throws SQLException if a database access error occurs
460
*/
461
boolean supportsTableCorrelationNames() throws SQLException;
462
463
/**
464
* Retrieves whether, when table correlation names are supported, they
465
* are restricted to being different from the names of the tables.
466
*
467
* @return {@code true} if so; {@code false} otherwise
468
* @throws SQLException if a database access error occurs
469
*/
470
boolean supportsDifferentTableCorrelationNames() throws SQLException;
471
472
/**
473
* Retrieves whether this database supports expressions in
474
* {@code ORDER BY} lists.
475
*
476
* @return {@code true} if so; {@code false} otherwise
477
* @throws SQLException if a database access error occurs
478
*/
479
boolean supportsExpressionsInOrderBy() throws SQLException;
480
481
/**
482
* Retrieves whether this database supports using a column that is
483
* not in the {@code SELECT} statement in an
484
* {@code ORDER BY} clause.
485
*
486
* @return {@code true} if so; {@code false} otherwise
487
* @throws SQLException if a database access error occurs
488
*/
489
boolean supportsOrderByUnrelated() throws SQLException;
490
491
/**
492
* Retrieves whether this database supports some form of
493
* {@code GROUP BY} clause.
494
*
495
* @return {@code true} if so; {@code false} otherwise
496
* @throws SQLException if a database access error occurs
497
*/
498
boolean supportsGroupBy() throws SQLException;
499
500
/**
501
* Retrieves whether this database supports using a column that is
502
* not in the {@code SELECT} statement in a
503
* {@code GROUP BY} clause.
504
*
505
* @return {@code true} if so; {@code false} otherwise
506
* @throws SQLException if a database access error occurs
507
*/
508
boolean supportsGroupByUnrelated() throws SQLException;
509
510
/**
511
* Retrieves whether this database supports using columns not included in
512
* the {@code SELECT} statement in a {@code GROUP BY} clause
513
* provided that all of the columns in the {@code SELECT} statement
514
* are included in the {@code GROUP BY} clause.
515
*
516
* @return {@code true} if so; {@code false} otherwise
517
* @throws SQLException if a database access error occurs
518
*/
519
boolean supportsGroupByBeyondSelect() throws SQLException;
520
521
/**
522
* Retrieves whether this database supports specifying a
523
* {@code LIKE} escape clause.
524
*
525
* @return {@code true} if so; {@code false} otherwise
526
* @throws SQLException if a database access error occurs
527
*/
528
boolean supportsLikeEscapeClause() throws SQLException;
529
530
/**
531
* Retrieves whether this database supports getting multiple
532
* {@code ResultSet} objects from a single call to the
533
* method {@code execute}.
534
*
535
* @return {@code true} if so; {@code false} otherwise
536
* @throws SQLException if a database access error occurs
537
*/
538
boolean supportsMultipleResultSets() throws SQLException;
539
540
/**
541
* Retrieves whether this database allows having multiple
542
* transactions open at once (on different connections).
543
*
544
* @return {@code true} if so; {@code false} otherwise
545
* @throws SQLException if a database access error occurs
546
*/
547
boolean supportsMultipleTransactions() throws SQLException;
548
549
/**
550
* Retrieves whether columns in this database may be defined as non-nullable.
551
*
552
* @return {@code true} if so; {@code false} otherwise
553
* @throws SQLException if a database access error occurs
554
*/
555
boolean supportsNonNullableColumns() throws SQLException;
556
557
/**
558
* Retrieves whether this database supports the ODBC Minimum SQL grammar.
559
*
560
* @return {@code true} if so; {@code false} otherwise
561
* @throws SQLException if a database access error occurs
562
*/
563
boolean supportsMinimumSQLGrammar() throws SQLException;
564
565
/**
566
* Retrieves whether this database supports the ODBC Core SQL grammar.
567
*
568
* @return {@code true} if so; {@code false} otherwise
569
* @throws SQLException if a database access error occurs
570
*/
571
boolean supportsCoreSQLGrammar() throws SQLException;
572
573
/**
574
* Retrieves whether this database supports the ODBC Extended SQL grammar.
575
*
576
* @return {@code true} if so; {@code false} otherwise
577
* @throws SQLException if a database access error occurs
578
*/
579
boolean supportsExtendedSQLGrammar() throws SQLException;
580
581
/**
582
* Retrieves whether this database supports the ANSI92 entry level SQL
583
* grammar.
584
*
585
* @return {@code true} if so; {@code false} otherwise
586
* @throws SQLException if a database access error occurs
587
*/
588
boolean supportsANSI92EntryLevelSQL() throws SQLException;
589
590
/**
591
* Retrieves whether this database supports the ANSI92 intermediate SQL grammar supported.
592
*
593
* @return {@code true} if so; {@code false} otherwise
594
* @throws SQLException if a database access error occurs
595
*/
596
boolean supportsANSI92IntermediateSQL() throws SQLException;
597
598
/**
599
* Retrieves whether this database supports the ANSI92 full SQL grammar supported.
600
*
601
* @return {@code true} if so; {@code false} otherwise
602
* @throws SQLException if a database access error occurs
603
*/
604
boolean supportsANSI92FullSQL() throws SQLException;
605
606
/**
607
* Retrieves whether this database supports the SQL Integrity
608
* Enhancement Facility.
609
*
610
* @return {@code true} if so; {@code false} otherwise
611
* @throws SQLException if a database access error occurs
612
*/
613
boolean supportsIntegrityEnhancementFacility() throws SQLException;
614
615
/**
616
* Retrieves whether this database supports some form of outer join.
617
*
618
* @return {@code true} if so; {@code false} otherwise
619
* @throws SQLException if a database access error occurs
620
*/
621
boolean supportsOuterJoins() throws SQLException;
622
623
/**
624
* Retrieves whether this database supports full nested outer joins.
625
*
626
* @return {@code true} if so; {@code false} otherwise
627
* @throws SQLException if a database access error occurs
628
*/
629
boolean supportsFullOuterJoins() throws SQLException;
630
631
/**
632
* Retrieves whether this database provides limited support for outer
633
* joins. (This will be {@code true} if the method
634
* {@code supportsFullOuterJoins} returns {@code true}).
635
*
636
* @return {@code true} if so; {@code false} otherwise
637
* @throws SQLException if a database access error occurs
638
*/
639
boolean supportsLimitedOuterJoins() throws SQLException;
640
641
/**
642
* Retrieves the database vendor's preferred term for "schema".
643
*
644
* @return the vendor term for "schema"
645
* @throws SQLException if a database access error occurs
646
*/
647
String getSchemaTerm() throws SQLException;
648
649
/**
650
* Retrieves the database vendor's preferred term for "procedure".
651
*
652
* @return the vendor term for "procedure"
653
* @throws SQLException if a database access error occurs
654
*/
655
String getProcedureTerm() throws SQLException;
656
657
/**
658
* Retrieves the database vendor's preferred term for "catalog".
659
*
660
* @return the vendor term for "catalog"
661
* @throws SQLException if a database access error occurs
662
*/
663
String getCatalogTerm() throws SQLException;
664
665
/**
666
* Retrieves whether a catalog appears at the start of a fully qualified
667
* table name. If not, the catalog appears at the end.
668
*
669
* @return {@code true} if the catalog name appears at the beginning
670
* of a fully qualified table name; {@code false} otherwise
671
* @throws SQLException if a database access error occurs
672
*/
673
boolean isCatalogAtStart() throws SQLException;
674
675
/**
676
* Retrieves the {@code String} that this database uses as the
677
* separator between a catalog and table name.
678
*
679
* @return the separator string
680
* @throws SQLException if a database access error occurs
681
*/
682
String getCatalogSeparator() throws SQLException;
683
684
/**
685
* Retrieves whether a schema name can be used in a data manipulation statement.
686
*
687
* @return {@code true} if so; {@code false} otherwise
688
* @throws SQLException if a database access error occurs
689
*/
690
boolean supportsSchemasInDataManipulation() throws SQLException;
691
692
/**
693
* Retrieves whether a schema name can be used in a procedure call statement.
694
*
695
* @return {@code true} if so; {@code false} otherwise
696
* @throws SQLException if a database access error occurs
697
*/
698
boolean supportsSchemasInProcedureCalls() throws SQLException;
699
700
/**
701
* Retrieves whether a schema name can be used in a table definition statement.
702
*
703
* @return {@code true} if so; {@code false} otherwise
704
* @throws SQLException if a database access error occurs
705
*/
706
boolean supportsSchemasInTableDefinitions() throws SQLException;
707
708
/**
709
* Retrieves whether a schema name can be used in an index definition statement.
710
*
711
* @return {@code true} if so; {@code false} otherwise
712
* @throws SQLException if a database access error occurs
713
*/
714
boolean supportsSchemasInIndexDefinitions() throws SQLException;
715
716
/**
717
* Retrieves whether a schema name can be used in a privilege definition statement.
718
*
719
* @return {@code true} if so; {@code false} otherwise
720
* @throws SQLException if a database access error occurs
721
*/
722
boolean supportsSchemasInPrivilegeDefinitions() throws SQLException;
723
724
/**
725
* Retrieves whether a catalog name can be used in a data manipulation statement.
726
*
727
* @return {@code true} if so; {@code false} otherwise
728
* @throws SQLException if a database access error occurs
729
*/
730
boolean supportsCatalogsInDataManipulation() throws SQLException;
731
732
/**
733
* Retrieves whether a catalog name can be used in a procedure call statement.
734
*
735
* @return {@code true} if so; {@code false} otherwise
736
* @throws SQLException if a database access error occurs
737
*/
738
boolean supportsCatalogsInProcedureCalls() throws SQLException;
739
740
/**
741
* Retrieves whether a catalog name can be used in a table definition statement.
742
*
743
* @return {@code true} if so; {@code false} otherwise
744
* @throws SQLException if a database access error occurs
745
*/
746
boolean supportsCatalogsInTableDefinitions() throws SQLException;
747
748
/**
749
* Retrieves whether a catalog name can be used in an index definition statement.
750
*
751
* @return {@code true} if so; {@code false} otherwise
752
* @throws SQLException if a database access error occurs
753
*/
754
boolean supportsCatalogsInIndexDefinitions() throws SQLException;
755
756
/**
757
* Retrieves whether a catalog name can be used in a privilege definition statement.
758
*
759
* @return {@code true} if so; {@code false} otherwise
760
* @throws SQLException if a database access error occurs
761
*/
762
boolean supportsCatalogsInPrivilegeDefinitions() throws SQLException;
763
764
765
/**
766
* Retrieves whether this database supports positioned {@code DELETE}
767
* statements.
768
*
769
* @return {@code true} if so; {@code false} otherwise
770
* @throws SQLException if a database access error occurs
771
*/
772
boolean supportsPositionedDelete() throws SQLException;
773
774
/**
775
* Retrieves whether this database supports positioned {@code UPDATE}
776
* statements.
777
*
778
* @return {@code true} if so; {@code false} otherwise
779
* @throws SQLException if a database access error occurs
780
*/
781
boolean supportsPositionedUpdate() throws SQLException;
782
783
/**
784
* Retrieves whether this database supports {@code SELECT FOR UPDATE}
785
* statements.
786
*
787
* @return {@code true} if so; {@code false} otherwise
788
* @throws SQLException if a database access error occurs
789
*/
790
boolean supportsSelectForUpdate() throws SQLException;
791
792
/**
793
* Retrieves whether this database supports stored procedure calls
794
* that use the stored procedure escape syntax.
795
*
796
* @return {@code true} if so; {@code false} otherwise
797
* @throws SQLException if a database access error occurs
798
*/
799
boolean supportsStoredProcedures() throws SQLException;
800
801
/**
802
* Retrieves whether this database supports subqueries in comparison
803
* expressions.
804
*
805
* @return {@code true} if so; {@code false} otherwise
806
* @throws SQLException if a database access error occurs
807
*/
808
boolean supportsSubqueriesInComparisons() throws SQLException;
809
810
/**
811
* Retrieves whether this database supports subqueries in
812
* {@code EXISTS} expressions.
813
*
814
* @return {@code true} if so; {@code false} otherwise
815
* @throws SQLException if a database access error occurs
816
*/
817
boolean supportsSubqueriesInExists() throws SQLException;
818
819
/**
820
* Retrieves whether this database supports subqueries in
821
* {@code IN} expressions.
822
*
823
* @return {@code true} if so; {@code false} otherwise
824
* @throws SQLException if a database access error occurs
825
*/
826
boolean supportsSubqueriesInIns() throws SQLException;
827
828
/**
829
* Retrieves whether this database supports subqueries in quantified
830
* expressions.
831
*
832
* @return {@code true} if so; {@code false} otherwise
833
* @throws SQLException if a database access error occurs
834
*/
835
boolean supportsSubqueriesInQuantifieds() throws SQLException;
836
837
/**
838
* Retrieves whether this database supports correlated subqueries.
839
*
840
* @return {@code true} if so; {@code false} otherwise
841
* @throws SQLException if a database access error occurs
842
*/
843
boolean supportsCorrelatedSubqueries() throws SQLException;
844
845
/**
846
* Retrieves whether this database supports SQL {@code UNION}.
847
*
848
* @return {@code true} if so; {@code false} otherwise
849
* @throws SQLException if a database access error occurs
850
*/
851
boolean supportsUnion() throws SQLException;
852
853
/**
854
* Retrieves whether this database supports SQL {@code UNION ALL}.
855
*
856
* @return {@code true} if so; {@code false} otherwise
857
* @throws SQLException if a database access error occurs
858
*/
859
boolean supportsUnionAll() throws SQLException;
860
861
/**
862
* Retrieves whether this database supports keeping cursors open
863
* across commits.
864
*
865
* @return {@code true} if cursors always remain open;
866
* {@code false} if they might not remain open
867
* @throws SQLException if a database access error occurs
868
*/
869
boolean supportsOpenCursorsAcrossCommit() throws SQLException;
870
871
/**
872
* Retrieves whether this database supports keeping cursors open
873
* across rollbacks.
874
*
875
* @return {@code true} if cursors always remain open;
876
* {@code false} if they might not remain open
877
* @throws SQLException if a database access error occurs
878
*/
879
boolean supportsOpenCursorsAcrossRollback() throws SQLException;
880
881
/**
882
* Retrieves whether this database supports keeping statements open
883
* across commits.
884
*
885
* @return {@code true} if statements always remain open;
886
* {@code false} if they might not remain open
887
* @throws SQLException if a database access error occurs
888
*/
889
boolean supportsOpenStatementsAcrossCommit() throws SQLException;
890
891
/**
892
* Retrieves whether this database supports keeping statements open
893
* across rollbacks.
894
*
895
* @return {@code true} if statements always remain open;
896
* {@code false} if they might not remain open
897
* @throws SQLException if a database access error occurs
898
*/
899
boolean supportsOpenStatementsAcrossRollback() throws SQLException;
900
901
902
903
//----------------------------------------------------------------------
904
// The following group of methods exposes various limitations
905
// based on the target database with the current driver.
906
// Unless otherwise specified, a result of zero means there is no
907
// limit, or the limit is not known.
908
909
/**
910
* Retrieves the maximum number of hex characters this database allows in an
911
* inline binary literal.
912
*
913
* @return max the maximum length (in hex characters) for a binary literal;
914
* a result of zero means that there is no limit or the limit
915
* is not known
916
* @throws SQLException if a database access error occurs
917
*/
918
int getMaxBinaryLiteralLength() throws SQLException;
919
920
/**
921
* Retrieves the maximum number of characters this database allows
922
* for a character literal.
923
*
924
* @return the maximum number of characters allowed for a character literal;
925
* a result of zero means that there is no limit or the limit is
926
* not known
927
* @throws SQLException if a database access error occurs
928
*/
929
int getMaxCharLiteralLength() throws SQLException;
930
931
/**
932
* Retrieves the maximum number of characters this database allows
933
* for a column name.
934
*
935
* @return the maximum number of characters allowed for a column name;
936
* a result of zero means that there is no limit or the limit
937
* is not known
938
* @throws SQLException if a database access error occurs
939
*/
940
int getMaxColumnNameLength() throws SQLException;
941
942
/**
943
* Retrieves the maximum number of columns this database allows in a
944
* {@code GROUP BY} clause.
945
*
946
* @return the maximum number of columns allowed;
947
* a result of zero means that there is no limit or the limit
948
* is not known
949
* @throws SQLException if a database access error occurs
950
*/
951
int getMaxColumnsInGroupBy() throws SQLException;
952
953
/**
954
* Retrieves the maximum number of columns this database allows in an index.
955
*
956
* @return the maximum number of columns allowed;
957
* a result of zero means that there is no limit or the limit
958
* is not known
959
* @throws SQLException if a database access error occurs
960
*/
961
int getMaxColumnsInIndex() throws SQLException;
962
963
/**
964
* Retrieves the maximum number of columns this database allows in an
965
* {@code ORDER BY} clause.
966
*
967
* @return the maximum number of columns allowed;
968
* a result of zero means that there is no limit or the limit
969
* is not known
970
* @throws SQLException if a database access error occurs
971
*/
972
int getMaxColumnsInOrderBy() throws SQLException;
973
974
/**
975
* Retrieves the maximum number of columns this database allows in a
976
* {@code SELECT} list.
977
*
978
* @return the maximum number of columns allowed;
979
* a result of zero means that there is no limit or the limit
980
* is not known
981
* @throws SQLException if a database access error occurs
982
*/
983
int getMaxColumnsInSelect() throws SQLException;
984
985
/**
986
* Retrieves the maximum number of columns this database allows in a table.
987
*
988
* @return the maximum number of columns allowed;
989
* a result of zero means that there is no limit or the limit
990
* is not known
991
* @throws SQLException if a database access error occurs
992
*/
993
int getMaxColumnsInTable() throws SQLException;
994
995
/**
996
* Retrieves the maximum number of concurrent connections to this
997
* database that are possible.
998
*
999
* @return the maximum number of active connections possible at one time;
1000
* a result of zero means that there is no limit or the limit
1001
* is not known
1002
* @throws SQLException if a database access error occurs
1003
*/
1004
int getMaxConnections() throws SQLException;
1005
1006
/**
1007
* Retrieves the maximum number of characters that this database allows in a
1008
* cursor name.
1009
*
1010
* @return the maximum number of characters allowed in a cursor name;
1011
* a result of zero means that there is no limit or the limit
1012
* is not known
1013
* @throws SQLException if a database access error occurs
1014
*/
1015
int getMaxCursorNameLength() throws SQLException;
1016
1017
/**
1018
* Retrieves the maximum number of bytes this database allows for an
1019
* index, including all of the parts of the index.
1020
*
1021
* @return the maximum number of bytes allowed; this limit includes the
1022
* composite of all the constituent parts of the index;
1023
* a result of zero means that there is no limit or the limit
1024
* is not known
1025
* @throws SQLException if a database access error occurs
1026
*/
1027
int getMaxIndexLength() throws SQLException;
1028
1029
/**
1030
* Retrieves the maximum number of characters that this database allows in a
1031
* schema name.
1032
*
1033
* @return the maximum number of characters allowed in a schema name;
1034
* a result of zero means that there is no limit or the limit
1035
* is not known
1036
* @throws SQLException if a database access error occurs
1037
*/
1038
int getMaxSchemaNameLength() throws SQLException;
1039
1040
/**
1041
* Retrieves the maximum number of characters that this database allows in a
1042
* procedure name.
1043
*
1044
* @return the maximum number of characters allowed in a procedure name;
1045
* a result of zero means that there is no limit or the limit
1046
* is not known
1047
* @throws SQLException if a database access error occurs
1048
*/
1049
int getMaxProcedureNameLength() throws SQLException;
1050
1051
/**
1052
* Retrieves the maximum number of characters that this database allows in a
1053
* catalog name.
1054
*
1055
* @return the maximum number of characters allowed in a catalog name;
1056
* a result of zero means that there is no limit or the limit
1057
* is not known
1058
* @throws SQLException if a database access error occurs
1059
*/
1060
int getMaxCatalogNameLength() throws SQLException;
1061
1062
/**
1063
* Retrieves the maximum number of bytes this database allows in
1064
* a single row.
1065
*
1066
* @return the maximum number of bytes allowed for a row; a result of
1067
* zero means that there is no limit or the limit is not known
1068
* @throws SQLException if a database access error occurs
1069
*/
1070
int getMaxRowSize() throws SQLException;
1071
1072
/**
1073
* Retrieves whether the return value for the method
1074
* {@code getMaxRowSize} includes the SQL data types
1075
* {@code LONGVARCHAR} and {@code LONGVARBINARY}.
1076
*
1077
* @return {@code true} if so; {@code false} otherwise
1078
* @throws SQLException if a database access error occurs
1079
*/
1080
boolean doesMaxRowSizeIncludeBlobs() throws SQLException;
1081
1082
/**
1083
* Retrieves the maximum number of characters this database allows in
1084
* an SQL statement.
1085
*
1086
* @return the maximum number of characters allowed for an SQL statement;
1087
* a result of zero means that there is no limit or the limit
1088
* is not known
1089
* @throws SQLException if a database access error occurs
1090
*/
1091
int getMaxStatementLength() throws SQLException;
1092
1093
/**
1094
* Retrieves the maximum number of active statements to this database
1095
* that can be open at the same time.
1096
*
1097
* @return the maximum number of statements that can be open at one time;
1098
* a result of zero means that there is no limit or the limit
1099
* is not known
1100
* @throws SQLException if a database access error occurs
1101
*/
1102
int getMaxStatements() throws SQLException;
1103
1104
/**
1105
* Retrieves the maximum number of characters this database allows in
1106
* a table name.
1107
*
1108
* @return the maximum number of characters allowed for a table name;
1109
* a result of zero means that there is no limit or the limit
1110
* is not known
1111
* @throws SQLException if a database access error occurs
1112
*/
1113
int getMaxTableNameLength() throws SQLException;
1114
1115
/**
1116
* Retrieves the maximum number of tables this database allows in a
1117
* {@code SELECT} statement.
1118
*
1119
* @return the maximum number of tables allowed in a {@code SELECT}
1120
* statement; a result of zero means that there is no limit or
1121
* the limit is not known
1122
* @throws SQLException if a database access error occurs
1123
*/
1124
int getMaxTablesInSelect() throws SQLException;
1125
1126
/**
1127
* Retrieves the maximum number of characters this database allows in
1128
* a user name.
1129
*
1130
* @return the maximum number of characters allowed for a user name;
1131
* a result of zero means that there is no limit or the limit
1132
* is not known
1133
* @throws SQLException if a database access error occurs
1134
*/
1135
int getMaxUserNameLength() throws SQLException;
1136
1137
//----------------------------------------------------------------------
1138
1139
/**
1140
* Retrieves this database's default transaction isolation level. The
1141
* possible values are defined in {@code java.sql.Connection}.
1142
*
1143
* @return the default isolation level
1144
* @throws SQLException if a database access error occurs
1145
* @see Connection
1146
*/
1147
int getDefaultTransactionIsolation() throws SQLException;
1148
1149
/**
1150
* Retrieves whether this database supports transactions. If not, invoking the
1151
* method {@code commit} is a noop, and the isolation level is
1152
* {@code TRANSACTION_NONE}.
1153
*
1154
* @return {@code true} if transactions are supported;
1155
* {@code false} otherwise
1156
* @throws SQLException if a database access error occurs
1157
*/
1158
boolean supportsTransactions() throws SQLException;
1159
1160
/**
1161
* Retrieves whether this database supports the given transaction isolation level.
1162
*
1163
* @param level one of the transaction isolation levels defined in
1164
* {@code java.sql.Connection}
1165
* @return {@code true} if so; {@code false} otherwise
1166
* @throws SQLException if a database access error occurs
1167
* @see Connection
1168
*/
1169
boolean supportsTransactionIsolationLevel(int level)
1170
throws SQLException;
1171
1172
/**
1173
* Retrieves whether this database supports both data definition and
1174
* data manipulation statements within a transaction.
1175
*
1176
* @return {@code true} if so; {@code false} otherwise
1177
* @throws SQLException if a database access error occurs
1178
*/
1179
boolean supportsDataDefinitionAndDataManipulationTransactions()
1180
throws SQLException;
1181
/**
1182
* Retrieves whether this database supports only data manipulation
1183
* statements within a transaction.
1184
*
1185
* @return {@code true} if so; {@code false} otherwise
1186
* @throws SQLException if a database access error occurs
1187
*/
1188
boolean supportsDataManipulationTransactionsOnly()
1189
throws SQLException;
1190
1191
/**
1192
* Retrieves whether a data definition statement within a transaction forces
1193
* the transaction to commit.
1194
*
1195
* @return {@code true} if so; {@code false} otherwise
1196
* @throws SQLException if a database access error occurs
1197
*/
1198
boolean dataDefinitionCausesTransactionCommit()
1199
throws SQLException;
1200
1201
/**
1202
* Retrieves whether this database ignores a data definition statement
1203
* within a transaction.
1204
*
1205
* @return {@code true} if so; {@code false} otherwise
1206
* @throws SQLException if a database access error occurs
1207
*/
1208
boolean dataDefinitionIgnoredInTransactions()
1209
throws SQLException;
1210
1211
/**
1212
* Retrieves a description of the stored procedures available in the given
1213
* catalog.
1214
* <P>
1215
* Only procedure descriptions matching the schema and
1216
* procedure name criteria are returned. They are ordered by
1217
* {@code PROCEDURE_CAT}, {@code PROCEDURE_SCHEM},
1218
* {@code PROCEDURE_NAME} and {@code SPECIFIC_ NAME}.
1219
*
1220
* <P>Each procedure description has the following columns:
1221
* <OL>
1222
* <LI><B>PROCEDURE_CAT</B> String {@code =>} procedure catalog (may be {@code null})
1223
* <LI><B>PROCEDURE_SCHEM</B> String {@code =>} procedure schema (may be {@code null})
1224
* <LI><B>PROCEDURE_NAME</B> String {@code =>} procedure name
1225
* <LI> reserved for future use
1226
* <LI> reserved for future use
1227
* <LI> reserved for future use
1228
* <LI><B>REMARKS</B> String {@code =>} explanatory comment on the procedure
1229
* <LI><B>PROCEDURE_TYPE</B> short {@code =>} kind of procedure:
1230
* <UL>
1231
* <LI> procedureResultUnknown - Cannot determine if a return value
1232
* will be returned
1233
* <LI> procedureNoResult - Does not return a return value
1234
* <LI> procedureReturnsResult - Returns a return value
1235
* </UL>
1236
* <LI><B>SPECIFIC_NAME</B> String {@code =>} The name which uniquely identifies this
1237
* procedure within its schema.
1238
* </OL>
1239
* <p>
1240
* A user may not have permissions to execute any of the procedures that are
1241
* returned by {@code getProcedures}
1242
*
1243
* @param catalog a catalog name; must match the catalog name as it
1244
* is stored in the database; "" retrieves those without a catalog;
1245
* {@code null} means that the catalog name should not be used to narrow
1246
* the search
1247
* @param schemaPattern a schema name pattern; must match the schema name
1248
* as it is stored in the database; "" retrieves those without a schema;
1249
* {@code null} means that the schema name should not be used to narrow
1250
* the search
1251
* @param procedureNamePattern a procedure name pattern; must match the
1252
* procedure name as it is stored in the database
1253
* @return {@code ResultSet} - each row is a procedure description
1254
* @throws SQLException if a database access error occurs
1255
* @see #getSearchStringEscape
1256
*/
1257
ResultSet getProcedures(String catalog, String schemaPattern,
1258
String procedureNamePattern) throws SQLException;
1259
1260
/**
1261
* Indicates that it is not known whether the procedure returns
1262
* a result.
1263
* <P>
1264
* A possible value for column {@code PROCEDURE_TYPE} in the
1265
* {@code ResultSet} object returned by the method
1266
* {@code getProcedures}.
1267
*/
1268
int procedureResultUnknown = 0;
1269
1270
/**
1271
* Indicates that the procedure does not return a result.
1272
* <P>
1273
* A possible value for column {@code PROCEDURE_TYPE} in the
1274
* {@code ResultSet} object returned by the method
1275
* {@code getProcedures}.
1276
*/
1277
int procedureNoResult = 1;
1278
1279
/**
1280
* Indicates that the procedure returns a result.
1281
* <P>
1282
* A possible value for column {@code PROCEDURE_TYPE} in the
1283
* {@code ResultSet} object returned by the method
1284
* {@code getProcedures}.
1285
*/
1286
int procedureReturnsResult = 2;
1287
1288
/**
1289
* Retrieves a description of the given catalog's stored procedure parameter
1290
* and result columns.
1291
*
1292
* <P>Only descriptions matching the schema, procedure and
1293
* parameter name criteria are returned. They are ordered by
1294
* PROCEDURE_CAT, PROCEDURE_SCHEM, PROCEDURE_NAME and SPECIFIC_NAME. Within this, the return value,
1295
* if any, is first. Next are the parameter descriptions in call
1296
* order. The column descriptions follow in column number order.
1297
*
1298
* <P>Each row in the {@code ResultSet} is a parameter description or
1299
* column description with the following fields:
1300
* <OL>
1301
* <LI><B>PROCEDURE_CAT</B> String {@code =>} procedure catalog (may be {@code null})
1302
* <LI><B>PROCEDURE_SCHEM</B> String {@code =>} procedure schema (may be {@code null})
1303
* <LI><B>PROCEDURE_NAME</B> String {@code =>} procedure name
1304
* <LI><B>COLUMN_NAME</B> String {@code =>} column/parameter name
1305
* <LI><B>COLUMN_TYPE</B> Short {@code =>} kind of column/parameter:
1306
* <UL>
1307
* <LI> procedureColumnUnknown - nobody knows
1308
* <LI> procedureColumnIn - IN parameter
1309
* <LI> procedureColumnInOut - INOUT parameter
1310
* <LI> procedureColumnOut - OUT parameter
1311
* <LI> procedureColumnReturn - procedure return value
1312
* <LI> procedureColumnResult - result column in {@code ResultSet}
1313
* </UL>
1314
* <LI><B>DATA_TYPE</B> int {@code =>} SQL type from java.sql.Types
1315
* <LI><B>TYPE_NAME</B> String {@code =>} SQL type name, for a UDT type the
1316
* type name is fully qualified
1317
* <LI><B>PRECISION</B> int {@code =>} precision
1318
* <LI><B>LENGTH</B> int {@code =>} length in bytes of data
1319
* <LI><B>SCALE</B> short {@code =>} scale - null is returned for data types where
1320
* SCALE is not applicable.
1321
* <LI><B>RADIX</B> short {@code =>} radix
1322
* <LI><B>NULLABLE</B> short {@code =>} can it contain NULL.
1323
* <UL>
1324
* <LI> procedureNoNulls - does not allow NULL values
1325
* <LI> procedureNullable - allows NULL values
1326
* <LI> procedureNullableUnknown - nullability unknown
1327
* </UL>
1328
* <LI><B>REMARKS</B> String {@code =>} comment describing parameter/column
1329
* <LI><B>COLUMN_DEF</B> String {@code =>} default value for the column, which should be interpreted as a string when the value is enclosed in single quotes (may be {@code null})
1330
* <UL>
1331
* <LI> The string NULL (not enclosed in quotes) - if NULL was specified as the default value
1332
* <LI> TRUNCATE (not enclosed in quotes) - if the specified default value cannot be represented without truncation
1333
* <LI> NULL - if a default value was not specified
1334
* </UL>
1335
* <LI><B>SQL_DATA_TYPE</B> int {@code =>} reserved for future use
1336
* <LI><B>SQL_DATETIME_SUB</B> int {@code =>} reserved for future use
1337
* <LI><B>CHAR_OCTET_LENGTH</B> int {@code =>} the maximum length of binary and character based columns. For any other datatype the returned value is a
1338
* NULL
1339
* <LI><B>ORDINAL_POSITION</B> int {@code =>} the ordinal position, starting from 1, for the input and output parameters for a procedure. A value of 0
1340
*is returned if this row describes the procedure's return value. For result set columns, it is the
1341
*ordinal position of the column in the result set starting from 1. If there are
1342
*multiple result sets, the column ordinal positions are implementation
1343
* defined.
1344
* <LI><B>IS_NULLABLE</B> String {@code =>} ISO rules are used to determine the nullability for a column.
1345
* <UL>
1346
* <LI> YES --- if the column can include NULLs
1347
* <LI> NO --- if the column cannot include NULLs
1348
* <LI> empty string --- if the nullability for the
1349
* column is unknown
1350
* </UL>
1351
* <LI><B>SPECIFIC_NAME</B> String {@code =>} the name which uniquely identifies this procedure within its schema.
1352
* </OL>
1353
*
1354
* <P><B>Note:</B> Some databases may not return the column
1355
* descriptions for a procedure.
1356
*
1357
* <p>The PRECISION column represents the specified column size for the given column.
1358
* For numeric data, this is the maximum precision. For character data, this is the length in characters.
1359
* For datetime datatypes, this is the length in characters of the String representation (assuming the
1360
* maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype,
1361
* this is the length in bytes. Null is returned for data types where the
1362
* column size is not applicable.
1363
* @param catalog a catalog name; must match the catalog name as it
1364
* is stored in the database; "" retrieves those without a catalog;
1365
* {@code null} means that the catalog name should not be used to narrow
1366
* the search
1367
* @param schemaPattern a schema name pattern; must match the schema name
1368
* as it is stored in the database; "" retrieves those without a schema;
1369
* {@code null} means that the schema name should not be used to narrow
1370
* the search
1371
* @param procedureNamePattern a procedure name pattern; must match the
1372
* procedure name as it is stored in the database
1373
* @param columnNamePattern a column name pattern; must match the column name
1374
* as it is stored in the database
1375
* @return {@code ResultSet} - each row describes a stored procedure parameter or
1376
* column
1377
* @throws SQLException if a database access error occurs
1378
* @see #getSearchStringEscape
1379
*/
1380
ResultSet getProcedureColumns(String catalog,
1381
String schemaPattern,
1382
String procedureNamePattern,
1383
String columnNamePattern) throws SQLException;
1384
1385
/**
1386
* Indicates that type of the column is unknown.
1387
* <P>
1388
* A possible value for the column
1389
* {@code COLUMN_TYPE}
1390
* in the {@code ResultSet}
1391
* returned by the method {@code getProcedureColumns}.
1392
*/
1393
int procedureColumnUnknown = 0;
1394
1395
/**
1396
* Indicates that the column stores IN parameters.
1397
* <P>
1398
* A possible value for the column
1399
* {@code COLUMN_TYPE}
1400
* in the {@code ResultSet}
1401
* returned by the method {@code getProcedureColumns}.
1402
*/
1403
int procedureColumnIn = 1;
1404
1405
/**
1406
* Indicates that the column stores INOUT parameters.
1407
* <P>
1408
* A possible value for the column
1409
* {@code COLUMN_TYPE}
1410
* in the {@code ResultSet}
1411
* returned by the method {@code getProcedureColumns}.
1412
*/
1413
int procedureColumnInOut = 2;
1414
1415
/**
1416
* Indicates that the column stores OUT parameters.
1417
* <P>
1418
* A possible value for the column
1419
* {@code COLUMN_TYPE}
1420
* in the {@code ResultSet}
1421
* returned by the method {@code getProcedureColumns}.
1422
*/
1423
int procedureColumnOut = 4;
1424
/**
1425
* Indicates that the column stores return values.
1426
* <P>
1427
* A possible value for the column
1428
* {@code COLUMN_TYPE}
1429
* in the {@code ResultSet}
1430
* returned by the method {@code getProcedureColumns}.
1431
*/
1432
int procedureColumnReturn = 5;
1433
1434
/**
1435
* Indicates that the column stores results.
1436
* <P>
1437
* A possible value for the column
1438
* {@code COLUMN_TYPE}
1439
* in the {@code ResultSet}
1440
* returned by the method {@code getProcedureColumns}.
1441
*/
1442
int procedureColumnResult = 3;
1443
1444
/**
1445
* Indicates that {@code NULL} values are not allowed.
1446
* <P>
1447
* A possible value for the column
1448
* {@code NULLABLE}
1449
* in the {@code ResultSet} object
1450
* returned by the method {@code getProcedureColumns}.
1451
*/
1452
int procedureNoNulls = 0;
1453
1454
/**
1455
* Indicates that {@code NULL} values are allowed.
1456
* <P>
1457
* A possible value for the column
1458
* {@code NULLABLE}
1459
* in the {@code ResultSet} object
1460
* returned by the method {@code getProcedureColumns}.
1461
*/
1462
int procedureNullable = 1;
1463
1464
/**
1465
* Indicates that whether {@code NULL} values are allowed
1466
* is unknown.
1467
* <P>
1468
* A possible value for the column
1469
* {@code NULLABLE}
1470
* in the {@code ResultSet} object
1471
* returned by the method {@code getProcedureColumns}.
1472
*/
1473
int procedureNullableUnknown = 2;
1474
1475
1476
/**
1477
* Retrieves a description of the tables available in the given catalog.
1478
* Only table descriptions matching the catalog, schema, table
1479
* name and type criteria are returned. They are ordered by
1480
* {@code TABLE_TYPE}, {@code TABLE_CAT},
1481
* {@code TABLE_SCHEM} and {@code TABLE_NAME}.
1482
* <P>
1483
* Each table description has the following columns:
1484
* <OL>
1485
* <LI><B>TABLE_CAT</B> String {@code =>} table catalog (may be {@code null})
1486
* <LI><B>TABLE_SCHEM</B> String {@code =>} table schema (may be {@code null})
1487
* <LI><B>TABLE_NAME</B> String {@code =>} table name
1488
* <LI><B>TABLE_TYPE</B> String {@code =>} table type. Typical types are "TABLE",
1489
* "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY",
1490
* "LOCAL TEMPORARY", "ALIAS", "SYNONYM".
1491
* <LI><B>REMARKS</B> String {@code =>} explanatory comment on the table (may be {@code null})
1492
* <LI><B>TYPE_CAT</B> String {@code =>} the types catalog (may be {@code null})
1493
* <LI><B>TYPE_SCHEM</B> String {@code =>} the types schema (may be {@code null})
1494
* <LI><B>TYPE_NAME</B> String {@code =>} type name (may be {@code null})
1495
* <LI><B>SELF_REFERENCING_COL_NAME</B> String {@code =>} name of the designated
1496
* "identifier" column of a typed table (may be {@code null})
1497
* <LI><B>REF_GENERATION</B> String {@code =>} specifies how values in
1498
* SELF_REFERENCING_COL_NAME are created. Values are
1499
* "SYSTEM", "USER", "DERIVED". (may be {@code null})
1500
* </OL>
1501
*
1502
* <P><B>Note:</B> Some databases may not return information for
1503
* all tables.
1504
*
1505
* @param catalog a catalog name; must match the catalog name as it
1506
* is stored in the database; "" retrieves those without a catalog;
1507
* {@code null} means that the catalog name should not be used to narrow
1508
* the search
1509
* @param schemaPattern a schema name pattern; must match the schema name
1510
* as it is stored in the database; "" retrieves those without a schema;
1511
* {@code null} means that the schema name should not be used to narrow
1512
* the search
1513
* @param tableNamePattern a table name pattern; must match the
1514
* table name as it is stored in the database
1515
* @param types a list of table types, which must be from the list of table types
1516
* returned from {@link #getTableTypes},to include; {@code null} returns
1517
* all types
1518
* @return {@code ResultSet} - each row is a table description
1519
* @throws SQLException if a database access error occurs
1520
* @see #getSearchStringEscape
1521
*/
1522
ResultSet getTables(String catalog, String schemaPattern,
1523
String tableNamePattern, String types[]) throws SQLException;
1524
1525
/**
1526
* Retrieves the schema names available in this database. The results
1527
* are ordered by {@code TABLE_CATALOG} and
1528
* {@code TABLE_SCHEM}.
1529
*
1530
* <P>The schema columns are:
1531
* <OL>
1532
* <LI><B>TABLE_SCHEM</B> String {@code =>} schema name
1533
* <LI><B>TABLE_CATALOG</B> String {@code =>} catalog name (may be {@code null})
1534
* </OL>
1535
*
1536
* @return a {@code ResultSet} object in which each row is a
1537
* schema description
1538
* @throws SQLException if a database access error occurs
1539
*
1540
*/
1541
ResultSet getSchemas() throws SQLException;
1542
1543
/**
1544
* Retrieves the catalog names available in this database. The results
1545
* are ordered by catalog name.
1546
*
1547
* <P>The catalog column is:
1548
* <OL>
1549
* <LI><B>TABLE_CAT</B> String {@code =>} catalog name
1550
* </OL>
1551
*
1552
* @return a {@code ResultSet} object in which each row has a
1553
* single {@code String} column that is a catalog name
1554
* @throws SQLException if a database access error occurs
1555
*/
1556
ResultSet getCatalogs() throws SQLException;
1557
1558
/**
1559
* Retrieves the table types available in this database. The results
1560
* are ordered by table type.
1561
*
1562
* <P>The table type is:
1563
* <OL>
1564
* <LI><B>TABLE_TYPE</B> String {@code =>} table type. Typical types are "TABLE",
1565
* "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY",
1566
* "LOCAL TEMPORARY", "ALIAS", "SYNONYM".
1567
* </OL>
1568
*
1569
* @return a {@code ResultSet} object in which each row has a
1570
* single {@code String} column that is a table type
1571
* @throws SQLException if a database access error occurs
1572
*/
1573
ResultSet getTableTypes() throws SQLException;
1574
1575
/**
1576
* Retrieves a description of table columns available in
1577
* the specified catalog.
1578
*
1579
* <P>Only column descriptions matching the catalog, schema, table
1580
* and column name criteria are returned. They are ordered by
1581
* {@code TABLE_CAT},{@code TABLE_SCHEM},
1582
* {@code TABLE_NAME}, and {@code ORDINAL_POSITION}.
1583
*
1584
* <P>Each column description has the following columns:
1585
* <OL>
1586
* <LI><B>TABLE_CAT</B> String {@code =>} table catalog (may be {@code null})
1587
* <LI><B>TABLE_SCHEM</B> String {@code =>} table schema (may be {@code null})
1588
* <LI><B>TABLE_NAME</B> String {@code =>} table name
1589
* <LI><B>COLUMN_NAME</B> String {@code =>} column name
1590
* <LI><B>DATA_TYPE</B> int {@code =>} SQL type from java.sql.Types
1591
* <LI><B>TYPE_NAME</B> String {@code =>} Data source dependent type name,
1592
* for a UDT the type name is fully qualified
1593
* <LI><B>COLUMN_SIZE</B> int {@code =>} column size.
1594
* <LI><B>BUFFER_LENGTH</B> is not used.
1595
* <LI><B>DECIMAL_DIGITS</B> int {@code =>} the number of fractional digits. Null is returned for data types where
1596
* DECIMAL_DIGITS is not applicable.
1597
* <LI><B>NUM_PREC_RADIX</B> int {@code =>} Radix (typically either 10 or 2)
1598
* <LI><B>NULLABLE</B> int {@code =>} is NULL allowed.
1599
* <UL>
1600
* <LI> columnNoNulls - might not allow {@code NULL} values
1601
* <LI> columnNullable - definitely allows {@code NULL} values
1602
* <LI> columnNullableUnknown - nullability unknown
1603
* </UL>
1604
* <LI><B>REMARKS</B> String {@code =>} comment describing column (may be {@code null})
1605
* <LI><B>COLUMN_DEF</B> String {@code =>} default value for the column, which should be interpreted as a string when the value is enclosed in single quotes (may be {@code null})
1606
* <LI><B>SQL_DATA_TYPE</B> int {@code =>} unused
1607
* <LI><B>SQL_DATETIME_SUB</B> int {@code =>} unused
1608
* <LI><B>CHAR_OCTET_LENGTH</B> int {@code =>} for char types the
1609
* maximum number of bytes in the column
1610
* <LI><B>ORDINAL_POSITION</B> int {@code =>} index of column in table
1611
* (starting at 1)
1612
* <LI><B>IS_NULLABLE</B> String {@code =>} ISO rules are used to determine the nullability for a column.
1613
* <UL>
1614
* <LI> YES --- if the column can include NULLs
1615
* <LI> NO --- if the column cannot include NULLs
1616
* <LI> empty string --- if the nullability for the
1617
* column is unknown
1618
* </UL>
1619
* <LI><B>SCOPE_CATALOG</B> String {@code =>} catalog of table that is the scope
1620
* of a reference attribute ({@code null} if DATA_TYPE isn't REF)
1621
* <LI><B>SCOPE_SCHEMA</B> String {@code =>} schema of table that is the scope
1622
* of a reference attribute ({@code null} if the DATA_TYPE isn't REF)
1623
* <LI><B>SCOPE_TABLE</B> String {@code =>} table name that this the scope
1624
* of a reference attribute ({@code null} if the DATA_TYPE isn't REF)
1625
* <LI><B>SOURCE_DATA_TYPE</B> short {@code =>} source type of a distinct type or user-generated
1626
* Ref type, SQL type from java.sql.Types ({@code null} if DATA_TYPE
1627
* isn't DISTINCT or user-generated REF)
1628
* <LI><B>IS_AUTOINCREMENT</B> String {@code =>} Indicates whether this column is auto incremented
1629
* <UL>
1630
* <LI> YES --- if the column is auto incremented
1631
* <LI> NO --- if the column is not auto incremented
1632
* <LI> empty string --- if it cannot be determined whether the column is auto incremented
1633
* </UL>
1634
* <LI><B>IS_GENERATEDCOLUMN</B> String {@code =>} Indicates whether this is a generated column
1635
* <UL>
1636
* <LI> YES --- if this a generated column
1637
* <LI> NO --- if this not a generated column
1638
* <LI> empty string --- if it cannot be determined whether this is a generated column
1639
* </UL>
1640
* </OL>
1641
*
1642
* <p>The COLUMN_SIZE column specifies the column size for the given column.
1643
* For numeric data, this is the maximum precision. For character data, this is the length in characters.
1644
* For datetime datatypes, this is the length in characters of the String representation (assuming the
1645
* maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype,
1646
* this is the length in bytes. Null is returned for data types where the
1647
* column size is not applicable.
1648
*
1649
* @param catalog a catalog name; must match the catalog name as it
1650
* is stored in the database; "" retrieves those without a catalog;
1651
* {@code null} means that the catalog name should not be used to narrow
1652
* the search
1653
* @param schemaPattern a schema name pattern; must match the schema name
1654
* as it is stored in the database; "" retrieves those without a schema;
1655
* {@code null} means that the schema name should not be used to narrow
1656
* the search
1657
* @param tableNamePattern a table name pattern; must match the
1658
* table name as it is stored in the database
1659
* @param columnNamePattern a column name pattern; must match the column
1660
* name as it is stored in the database
1661
* @return {@code ResultSet} - each row is a column description
1662
* @throws SQLException if a database access error occurs
1663
* @see #getSearchStringEscape
1664
*/
1665
ResultSet getColumns(String catalog, String schemaPattern,
1666
String tableNamePattern, String columnNamePattern)
1667
throws SQLException;
1668
1669
/**
1670
* Indicates that the column might not allow {@code NULL} values.
1671
* <P>
1672
* A possible value for the column
1673
* {@code NULLABLE}
1674
* in the {@code ResultSet} returned by the method
1675
* {@code getColumns}.
1676
*/
1677
int columnNoNulls = 0;
1678
1679
/**
1680
* Indicates that the column definitely allows {@code NULL} values.
1681
* <P>
1682
* A possible value for the column
1683
* {@code NULLABLE}
1684
* in the {@code ResultSet} returned by the method
1685
* {@code getColumns}.
1686
*/
1687
int columnNullable = 1;
1688
1689
/**
1690
* Indicates that the nullability of columns is unknown.
1691
* <P>
1692
* A possible value for the column
1693
* {@code NULLABLE}
1694
* in the {@code ResultSet} returned by the method
1695
* {@code getColumns}.
1696
*/
1697
int columnNullableUnknown = 2;
1698
1699
/**
1700
* Retrieves a description of the access rights for a table's columns.
1701
*
1702
* <P>Only privileges matching the column name criteria are
1703
* returned. They are ordered by COLUMN_NAME and PRIVILEGE.
1704
*
1705
* <P>Each privilege description has the following columns:
1706
* <OL>
1707
* <LI><B>TABLE_CAT</B> String {@code =>} table catalog (may be {@code null})
1708
* <LI><B>TABLE_SCHEM</B> String {@code =>} table schema (may be {@code null})
1709
* <LI><B>TABLE_NAME</B> String {@code =>} table name
1710
* <LI><B>COLUMN_NAME</B> String {@code =>} column name
1711
* <LI><B>GRANTOR</B> String {@code =>} grantor of access (may be {@code null})
1712
* <LI><B>GRANTEE</B> String {@code =>} grantee of access
1713
* <LI><B>PRIVILEGE</B> String {@code =>} name of access (SELECT,
1714
* INSERT, UPDATE, REFERENCES, ...)
1715
* <LI><B>IS_GRANTABLE</B> String {@code =>} "YES" if grantee is permitted
1716
* to grant to others; "NO" if not; {@code null} if unknown
1717
* </OL>
1718
*
1719
* @param catalog a catalog name; must match the catalog name as it
1720
* is stored in the database; "" retrieves those without a catalog;
1721
* {@code null} means that the catalog name should not be used to narrow
1722
* the search
1723
* @param schema a schema name; must match the schema name as it is
1724
* stored in the database; "" retrieves those without a schema;
1725
* {@code null} means that the schema name should not be used to narrow
1726
* the search
1727
* @param table a table name; must match the table name as it is
1728
* stored in the database
1729
* @param columnNamePattern a column name pattern; must match the column
1730
* name as it is stored in the database
1731
* @return {@code ResultSet} - each row is a column privilege description
1732
* @throws SQLException if a database access error occurs
1733
* @see #getSearchStringEscape
1734
*/
1735
ResultSet getColumnPrivileges(String catalog, String schema,
1736
String table, String columnNamePattern) throws SQLException;
1737
1738
/**
1739
* Retrieves a description of the access rights for each table available
1740
* in a catalog. Note that a table privilege applies to one or
1741
* more columns in the table. It would be wrong to assume that
1742
* this privilege applies to all columns (this may be true for
1743
* some systems but is not true for all.)
1744
*
1745
* <P>Only privileges matching the schema and table name
1746
* criteria are returned. They are ordered by
1747
* {@code TABLE_CAT},
1748
* {@code TABLE_SCHEM}, {@code TABLE_NAME},
1749
* and {@code PRIVILEGE}.
1750
*
1751
* <P>Each privilege description has the following columns:
1752
* <OL>
1753
* <LI><B>TABLE_CAT</B> String {@code =>} table catalog (may be {@code null})
1754
* <LI><B>TABLE_SCHEM</B> String {@code =>} table schema (may be {@code null})
1755
* <LI><B>TABLE_NAME</B> String {@code =>} table name
1756
* <LI><B>GRANTOR</B> String {@code =>} grantor of access (may be {@code null})
1757
* <LI><B>GRANTEE</B> String {@code =>} grantee of access
1758
* <LI><B>PRIVILEGE</B> String {@code =>} name of access (SELECT,
1759
* INSERT, UPDATE, REFERENCES, ...)
1760
* <LI><B>IS_GRANTABLE</B> String {@code =>} "YES" if grantee is permitted
1761
* to grant to others; "NO" if not; {@code null} if unknown
1762
* </OL>
1763
*
1764
* @param catalog a catalog name; must match the catalog name as it
1765
* is stored in the database; "" retrieves those without a catalog;
1766
* {@code null} means that the catalog name should not be used to narrow
1767
* the search
1768
* @param schemaPattern a schema name pattern; must match the schema name
1769
* as it is stored in the database; "" retrieves those without a schema;
1770
* {@code null} means that the schema name should not be used to narrow
1771
* the search
1772
* @param tableNamePattern a table name pattern; must match the
1773
* table name as it is stored in the database
1774
* @return {@code ResultSet} - each row is a table privilege description
1775
* @throws SQLException if a database access error occurs
1776
* @see #getSearchStringEscape
1777
*/
1778
ResultSet getTablePrivileges(String catalog, String schemaPattern,
1779
String tableNamePattern) throws SQLException;
1780
1781
/**
1782
* Retrieves a description of a table's optimal set of columns that
1783
* uniquely identifies a row. They are ordered by SCOPE.
1784
*
1785
* <P>Each column description has the following columns:
1786
* <OL>
1787
* <LI><B>SCOPE</B> short {@code =>} actual scope of result
1788
* <UL>
1789
* <LI> bestRowTemporary - very temporary, while using row
1790
* <LI> bestRowTransaction - valid for remainder of current transaction
1791
* <LI> bestRowSession - valid for remainder of current session
1792
* </UL>
1793
* <LI><B>COLUMN_NAME</B> String {@code =>} column name
1794
* <LI><B>DATA_TYPE</B> int {@code =>} SQL data type from java.sql.Types
1795
* <LI><B>TYPE_NAME</B> String {@code =>} Data source dependent type name,
1796
* for a UDT the type name is fully qualified
1797
* <LI><B>COLUMN_SIZE</B> int {@code =>} precision
1798
* <LI><B>BUFFER_LENGTH</B> int {@code =>} not used
1799
* <LI><B>DECIMAL_DIGITS</B> short {@code =>} scale - Null is returned for data types where
1800
* DECIMAL_DIGITS is not applicable.
1801
* <LI><B>PSEUDO_COLUMN</B> short {@code =>} is this a pseudo column
1802
* like an Oracle ROWID
1803
* <UL>
1804
* <LI> bestRowUnknown - may or may not be pseudo column
1805
* <LI> bestRowNotPseudo - is NOT a pseudo column
1806
* <LI> bestRowPseudo - is a pseudo column
1807
* </UL>
1808
* </OL>
1809
*
1810
* <p>The COLUMN_SIZE column represents the specified column size for the given column.
1811
* For numeric data, this is the maximum precision. For character data, this is the length in characters.
1812
* For datetime datatypes, this is the length in characters of the String representation (assuming the
1813
* maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype,
1814
* this is the length in bytes. Null is returned for data types where the
1815
* column size is not applicable.
1816
*
1817
* @param catalog a catalog name; must match the catalog name as it
1818
* is stored in the database; "" retrieves those without a catalog;
1819
* {@code null} means that the catalog name should not be used to narrow
1820
* the search
1821
* @param schema a schema name; must match the schema name
1822
* as it is stored in the database; "" retrieves those without a schema;
1823
* {@code null} means that the schema name should not be used to narrow
1824
* the search
1825
* @param table a table name; must match the table name as it is stored
1826
* in the database
1827
* @param scope the scope of interest; use same values as SCOPE
1828
* @param nullable include columns that are nullable.
1829
* @return {@code ResultSet} - each row is a column description
1830
* @throws SQLException if a database access error occurs
1831
*/
1832
ResultSet getBestRowIdentifier(String catalog, String schema,
1833
String table, int scope, boolean nullable) throws SQLException;
1834
1835
/**
1836
* Indicates that the scope of the best row identifier is
1837
* very temporary, lasting only while the
1838
* row is being used.
1839
* <P>
1840
* A possible value for the column
1841
* {@code SCOPE}
1842
* in the {@code ResultSet} object
1843
* returned by the method {@code getBestRowIdentifier}.
1844
*/
1845
int bestRowTemporary = 0;
1846
1847
/**
1848
* Indicates that the scope of the best row identifier is
1849
* the remainder of the current transaction.
1850
* <P>
1851
* A possible value for the column
1852
* {@code SCOPE}
1853
* in the {@code ResultSet} object
1854
* returned by the method {@code getBestRowIdentifier}.
1855
*/
1856
int bestRowTransaction = 1;
1857
1858
/**
1859
* Indicates that the scope of the best row identifier is
1860
* the remainder of the current session.
1861
* <P>
1862
* A possible value for the column
1863
* {@code SCOPE}
1864
* in the {@code ResultSet} object
1865
* returned by the method {@code getBestRowIdentifier}.
1866
*/
1867
int bestRowSession = 2;
1868
1869
/**
1870
* Indicates that the best row identifier may or may not be a pseudo column.
1871
* <P>
1872
* A possible value for the column
1873
* {@code PSEUDO_COLUMN}
1874
* in the {@code ResultSet} object
1875
* returned by the method {@code getBestRowIdentifier}.
1876
*/
1877
int bestRowUnknown = 0;
1878
1879
/**
1880
* Indicates that the best row identifier is NOT a pseudo column.
1881
* <P>
1882
* A possible value for the column
1883
* {@code PSEUDO_COLUMN}
1884
* in the {@code ResultSet} object
1885
* returned by the method {@code getBestRowIdentifier}.
1886
*/
1887
int bestRowNotPseudo = 1;
1888
1889
/**
1890
* Indicates that the best row identifier is a pseudo column.
1891
* <P>
1892
* A possible value for the column
1893
* {@code PSEUDO_COLUMN}
1894
* in the {@code ResultSet} object
1895
* returned by the method {@code getBestRowIdentifier}.
1896
*/
1897
int bestRowPseudo = 2;
1898
1899
/**
1900
* Retrieves a description of a table's columns that are automatically
1901
* updated when any value in a row is updated. They are
1902
* unordered.
1903
*
1904
* <P>Each column description has the following columns:
1905
* <OL>
1906
* <LI><B>SCOPE</B> short {@code =>} is not used
1907
* <LI><B>COLUMN_NAME</B> String {@code =>} column name
1908
* <LI><B>DATA_TYPE</B> int {@code =>} SQL data type from {@code java.sql.Types}
1909
* <LI><B>TYPE_NAME</B> String {@code =>} Data source-dependent type name
1910
* <LI><B>COLUMN_SIZE</B> int {@code =>} precision
1911
* <LI><B>BUFFER_LENGTH</B> int {@code =>} length of column value in bytes
1912
* <LI><B>DECIMAL_DIGITS</B> short {@code =>} scale - Null is returned for data types where
1913
* DECIMAL_DIGITS is not applicable.
1914
* <LI><B>PSEUDO_COLUMN</B> short {@code =>} whether this is pseudo column
1915
* like an Oracle ROWID
1916
* <UL>
1917
* <LI> versionColumnUnknown - may or may not be pseudo column
1918
* <LI> versionColumnNotPseudo - is NOT a pseudo column
1919
* <LI> versionColumnPseudo - is a pseudo column
1920
* </UL>
1921
* </OL>
1922
*
1923
* <p>The COLUMN_SIZE column represents the specified column size for the given column.
1924
* For numeric data, this is the maximum precision. For character data, this is the length in characters.
1925
* For datetime datatypes, this is the length in characters of the String representation (assuming the
1926
* maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype,
1927
* this is the length in bytes. Null is returned for data types where the
1928
* column size is not applicable.
1929
* @param catalog a catalog name; must match the catalog name as it
1930
* is stored in the database; "" retrieves those without a catalog;
1931
* {@code null} means that the catalog name should not be used to narrow
1932
* the search
1933
* @param schema a schema name; must match the schema name
1934
* as it is stored in the database; "" retrieves those without a schema;
1935
* {@code null} means that the schema name should not be used to narrow
1936
* the search
1937
* @param table a table name; must match the table name as it is stored
1938
* in the database
1939
* @return a {@code ResultSet} object in which each row is a
1940
* column description
1941
* @throws SQLException if a database access error occurs
1942
*/
1943
ResultSet getVersionColumns(String catalog, String schema,
1944
String table) throws SQLException;
1945
1946
/**
1947
* Indicates that this version column may or may not be a pseudo column.
1948
* <P>
1949
* A possible value for the column
1950
* {@code PSEUDO_COLUMN}
1951
* in the {@code ResultSet} object
1952
* returned by the method {@code getVersionColumns}.
1953
*/
1954
int versionColumnUnknown = 0;
1955
1956
/**
1957
* Indicates that this version column is NOT a pseudo column.
1958
* <P>
1959
* A possible value for the column
1960
* {@code PSEUDO_COLUMN}
1961
* in the {@code ResultSet} object
1962
* returned by the method {@code getVersionColumns}.
1963
*/
1964
int versionColumnNotPseudo = 1;
1965
1966
/**
1967
* Indicates that this version column is a pseudo column.
1968
* <P>
1969
* A possible value for the column
1970
* {@code PSEUDO_COLUMN}
1971
* in the {@code ResultSet} object
1972
* returned by the method {@code getVersionColumns}.
1973
*/
1974
int versionColumnPseudo = 2;
1975
1976
/**
1977
* Retrieves a description of the given table's primary key columns. They
1978
* are ordered by COLUMN_NAME.
1979
*
1980
* <P>Each primary key column description has the following columns:
1981
* <OL>
1982
* <LI><B>TABLE_CAT</B> String {@code =>} table catalog (may be {@code null})
1983
* <LI><B>TABLE_SCHEM</B> String {@code =>} table schema (may be {@code null})
1984
* <LI><B>TABLE_NAME</B> String {@code =>} table name
1985
* <LI><B>COLUMN_NAME</B> String {@code =>} column name
1986
* <LI><B>KEY_SEQ</B> short {@code =>} sequence number within primary key( a value
1987
* of 1 represents the first column of the primary key, a value of 2 would
1988
* represent the second column within the primary key).
1989
* <LI><B>PK_NAME</B> String {@code =>} primary key name (may be {@code null})
1990
* </OL>
1991
*
1992
* @param catalog a catalog name; must match the catalog name as it
1993
* is stored in the database; "" retrieves those without a catalog;
1994
* {@code null} means that the catalog name should not be used to narrow
1995
* the search
1996
* @param schema a schema name; must match the schema name
1997
* as it is stored in the database; "" retrieves those without a schema;
1998
* {@code null} means that the schema name should not be used to narrow
1999
* the search
2000
* @param table a table name; must match the table name as it is stored
2001
* in the database
2002
* @return {@code ResultSet} - each row is a primary key column description
2003
* @throws SQLException if a database access error occurs
2004
*/
2005
ResultSet getPrimaryKeys(String catalog, String schema,
2006
String table) throws SQLException;
2007
2008
/**
2009
* Retrieves a description of the primary key columns that are
2010
* referenced by the given table's foreign key columns (the primary keys
2011
* imported by a table). They are ordered by PKTABLE_CAT,
2012
* PKTABLE_SCHEM, PKTABLE_NAME, and KEY_SEQ.
2013
*
2014
* <P>Each primary key column description has the following columns:
2015
* <OL>
2016
* <LI><B>PKTABLE_CAT</B> String {@code =>} primary key table catalog
2017
* being imported (may be {@code null})
2018
* <LI><B>PKTABLE_SCHEM</B> String {@code =>} primary key table schema
2019
* being imported (may be {@code null})
2020
* <LI><B>PKTABLE_NAME</B> String {@code =>} primary key table name
2021
* being imported
2022
* <LI><B>PKCOLUMN_NAME</B> String {@code =>} primary key column name
2023
* being imported
2024
* <LI><B>FKTABLE_CAT</B> String {@code =>} foreign key table catalog (may be {@code null})
2025
* <LI><B>FKTABLE_SCHEM</B> String {@code =>} foreign key table schema (may be {@code null})
2026
* <LI><B>FKTABLE_NAME</B> String {@code =>} foreign key table name
2027
* <LI><B>FKCOLUMN_NAME</B> String {@code =>} foreign key column name
2028
* <LI><B>KEY_SEQ</B> short {@code =>} sequence number within a foreign key( a value
2029
* of 1 represents the first column of the foreign key, a value of 2 would
2030
* represent the second column within the foreign key).
2031
* <LI><B>UPDATE_RULE</B> short {@code =>} What happens to a
2032
* foreign key when the primary key is updated:
2033
* <UL>
2034
* <LI> importedNoAction - do not allow update of primary
2035
* key if it has been imported
2036
* <LI> importedKeyCascade - change imported key to agree
2037
* with primary key update
2038
* <LI> importedKeySetNull - change imported key to {@code NULL}
2039
* if its primary key has been updated
2040
* <LI> importedKeySetDefault - change imported key to default values
2041
* if its primary key has been updated
2042
* <LI> importedKeyRestrict - same as importedKeyNoAction
2043
* (for ODBC 2.x compatibility)
2044
* </UL>
2045
* <LI><B>DELETE_RULE</B> short {@code =>} What happens to
2046
* the foreign key when primary is deleted.
2047
* <UL>
2048
* <LI> importedKeyNoAction - do not allow delete of primary
2049
* key if it has been imported
2050
* <LI> importedKeyCascade - delete rows that import a deleted key
2051
* <LI> importedKeySetNull - change imported key to NULL if
2052
* its primary key has been deleted
2053
* <LI> importedKeyRestrict - same as importedKeyNoAction
2054
* (for ODBC 2.x compatibility)
2055
* <LI> importedKeySetDefault - change imported key to default if
2056
* its primary key has been deleted
2057
* </UL>
2058
* <LI><B>FK_NAME</B> String {@code =>} foreign key name (may be {@code null})
2059
* <LI><B>PK_NAME</B> String {@code =>} primary key name (may be {@code null})
2060
* <LI><B>DEFERRABILITY</B> short {@code =>} can the evaluation of foreign key
2061
* constraints be deferred until commit
2062
* <UL>
2063
* <LI> importedKeyInitiallyDeferred - see SQL92 for definition
2064
* <LI> importedKeyInitiallyImmediate - see SQL92 for definition
2065
* <LI> importedKeyNotDeferrable - see SQL92 for definition
2066
* </UL>
2067
* </OL>
2068
*
2069
* @param catalog a catalog name; must match the catalog name as it
2070
* is stored in the database; "" retrieves those without a catalog;
2071
* {@code null} means that the catalog name should not be used to narrow
2072
* the search
2073
* @param schema a schema name; must match the schema name
2074
* as it is stored in the database; "" retrieves those without a schema;
2075
* {@code null} means that the schema name should not be used to narrow
2076
* the search
2077
* @param table a table name; must match the table name as it is stored
2078
* in the database
2079
* @return {@code ResultSet} - each row is a primary key column description
2080
* @throws SQLException if a database access error occurs
2081
* @see #getExportedKeys
2082
*/
2083
ResultSet getImportedKeys(String catalog, String schema,
2084
String table) throws SQLException;
2085
2086
/**
2087
* For the column {@code UPDATE_RULE},
2088
* indicates that
2089
* when the primary key is updated, the foreign key (imported key)
2090
* is changed to agree with it.
2091
* For the column {@code DELETE_RULE},
2092
* it indicates that
2093
* when the primary key is deleted, rows that imported that key
2094
* are deleted.
2095
* <P>
2096
* A possible value for the columns {@code UPDATE_RULE}
2097
* and {@code DELETE_RULE} in the
2098
* {@code ResultSet} objects returned by the methods
2099
* {@code getImportedKeys}, {@code getExportedKeys},
2100
* and {@code getCrossReference}.
2101
*/
2102
int importedKeyCascade = 0;
2103
2104
/**
2105
* For the column {@code UPDATE_RULE}, indicates that
2106
* a primary key may not be updated if it has been imported by
2107
* another table as a foreign key.
2108
* For the column {@code DELETE_RULE}, indicates that
2109
* a primary key may not be deleted if it has been imported by
2110
* another table as a foreign key.
2111
* <P>
2112
* A possible value for the columns {@code UPDATE_RULE}
2113
* and {@code DELETE_RULE} in the
2114
* {@code ResultSet} objects returned by the methods
2115
* {@code getImportedKeys}, {@code getExportedKeys},
2116
* and {@code getCrossReference}.
2117
*/
2118
int importedKeyRestrict = 1;
2119
2120
/**
2121
* For the columns {@code UPDATE_RULE}
2122
* and {@code DELETE_RULE}, indicates that
2123
* when the primary key is updated or deleted, the foreign key (imported key)
2124
* is changed to {@code NULL}.
2125
* <P>
2126
* A possible value for the columns {@code UPDATE_RULE}
2127
* and {@code DELETE_RULE} in the
2128
* {@code ResultSet} objects returned by the methods
2129
* {@code getImportedKeys}, {@code getExportedKeys},
2130
* and {@code getCrossReference}.
2131
*/
2132
int importedKeySetNull = 2;
2133
2134
/**
2135
* For the columns {@code UPDATE_RULE}
2136
* and {@code DELETE_RULE}, indicates that
2137
* if the primary key has been imported, it cannot be updated or deleted.
2138
* <P>
2139
* A possible value for the columns {@code UPDATE_RULE}
2140
* and {@code DELETE_RULE} in the
2141
* {@code ResultSet} objects returned by the methods
2142
* {@code getImportedKeys}, {@code getExportedKeys},
2143
* and {@code getCrossReference}.
2144
*/
2145
int importedKeyNoAction = 3;
2146
2147
/**
2148
* For the columns {@code UPDATE_RULE}
2149
* and {@code DELETE_RULE}, indicates that
2150
* if the primary key is updated or deleted, the foreign key (imported key)
2151
* is set to the default value.
2152
* <P>
2153
* A possible value for the columns {@code UPDATE_RULE}
2154
* and {@code DELETE_RULE} in the
2155
* {@code ResultSet} objects returned by the methods
2156
* {@code getImportedKeys}, {@code getExportedKeys},
2157
* and {@code getCrossReference}.
2158
*/
2159
int importedKeySetDefault = 4;
2160
2161
/**
2162
* Indicates deferrability. See SQL-92 for a definition.
2163
* <P>
2164
* A possible value for the column {@code DEFERRABILITY}
2165
* in the {@code ResultSet} objects returned by the methods
2166
* {@code getImportedKeys}, {@code getExportedKeys},
2167
* and {@code getCrossReference}.
2168
*/
2169
int importedKeyInitiallyDeferred = 5;
2170
2171
/**
2172
* Indicates deferrability. See SQL-92 for a definition.
2173
* <P>
2174
* A possible value for the column {@code DEFERRABILITY}
2175
* in the {@code ResultSet} objects returned by the methods
2176
* {@code getImportedKeys}, {@code getExportedKeys},
2177
* and {@code getCrossReference}.
2178
*/
2179
int importedKeyInitiallyImmediate = 6;
2180
2181
/**
2182
* Indicates deferrability. See SQL-92 for a definition.
2183
* <P>
2184
* A possible value for the column {@code DEFERRABILITY}
2185
* in the {@code ResultSet} objects returned by the methods
2186
* {@code getImportedKeys}, {@code getExportedKeys},
2187
* and {@code getCrossReference}.
2188
*/
2189
int importedKeyNotDeferrable = 7;
2190
2191
/**
2192
* Retrieves a description of the foreign key columns that reference the
2193
* given table's primary key columns (the foreign keys exported by a
2194
* table). They are ordered by FKTABLE_CAT, FKTABLE_SCHEM,
2195
* FKTABLE_NAME, and KEY_SEQ.
2196
*
2197
* <P>Each foreign key column description has the following columns:
2198
* <OL>
2199
* <LI><B>PKTABLE_CAT</B> String {@code =>} primary key table catalog (may be {@code null})
2200
* <LI><B>PKTABLE_SCHEM</B> String {@code =>} primary key table schema (may be {@code null})
2201
* <LI><B>PKTABLE_NAME</B> String {@code =>} primary key table name
2202
* <LI><B>PKCOLUMN_NAME</B> String {@code =>} primary key column name
2203
* <LI><B>FKTABLE_CAT</B> String {@code =>} foreign key table catalog (may be {@code null})
2204
* being exported (may be {@code null})
2205
* <LI><B>FKTABLE_SCHEM</B> String {@code =>} foreign key table schema (may be {@code null})
2206
* being exported (may be {@code null})
2207
* <LI><B>FKTABLE_NAME</B> String {@code =>} foreign key table name
2208
* being exported
2209
* <LI><B>FKCOLUMN_NAME</B> String {@code =>} foreign key column name
2210
* being exported
2211
* <LI><B>KEY_SEQ</B> short {@code =>} sequence number within foreign key( a value
2212
* of 1 represents the first column of the foreign key, a value of 2 would
2213
* represent the second column within the foreign key).
2214
* <LI><B>UPDATE_RULE</B> short {@code =>} What happens to
2215
* foreign key when primary is updated:
2216
* <UL>
2217
* <LI> importedNoAction - do not allow update of primary
2218
* key if it has been imported
2219
* <LI> importedKeyCascade - change imported key to agree
2220
* with primary key update
2221
* <LI> importedKeySetNull - change imported key to {@code NULL} if
2222
* its primary key has been updated
2223
* <LI> importedKeySetDefault - change imported key to default values
2224
* if its primary key has been updated
2225
* <LI> importedKeyRestrict - same as importedKeyNoAction
2226
* (for ODBC 2.x compatibility)
2227
* </UL>
2228
* <LI><B>DELETE_RULE</B> short {@code =>} What happens to
2229
* the foreign key when primary is deleted.
2230
* <UL>
2231
* <LI> importedKeyNoAction - do not allow delete of primary
2232
* key if it has been imported
2233
* <LI> importedKeyCascade - delete rows that import a deleted key
2234
* <LI> importedKeySetNull - change imported key to {@code NULL} if
2235
* its primary key has been deleted
2236
* <LI> importedKeyRestrict - same as importedKeyNoAction
2237
* (for ODBC 2.x compatibility)
2238
* <LI> importedKeySetDefault - change imported key to default if
2239
* its primary key has been deleted
2240
* </UL>
2241
* <LI><B>FK_NAME</B> String {@code =>} foreign key name (may be {@code null})
2242
* <LI><B>PK_NAME</B> String {@code =>} primary key name (may be {@code null})
2243
* <LI><B>DEFERRABILITY</B> short {@code =>} can the evaluation of foreign key
2244
* constraints be deferred until commit
2245
* <UL>
2246
* <LI> importedKeyInitiallyDeferred - see SQL92 for definition
2247
* <LI> importedKeyInitiallyImmediate - see SQL92 for definition
2248
* <LI> importedKeyNotDeferrable - see SQL92 for definition
2249
* </UL>
2250
* </OL>
2251
*
2252
* @param catalog a catalog name; must match the catalog name as it
2253
* is stored in this database; "" retrieves those without a catalog;
2254
* {@code null} means that the catalog name should not be used to narrow
2255
* the search
2256
* @param schema a schema name; must match the schema name
2257
* as it is stored in the database; "" retrieves those without a schema;
2258
* {@code null} means that the schema name should not be used to narrow
2259
* the search
2260
* @param table a table name; must match the table name as it is stored
2261
* in this database
2262
* @return a {@code ResultSet} object in which each row is a
2263
* foreign key column description
2264
* @throws SQLException if a database access error occurs
2265
* @see #getImportedKeys
2266
*/
2267
ResultSet getExportedKeys(String catalog, String schema,
2268
String table) throws SQLException;
2269
2270
/**
2271
* Retrieves a description of the foreign key columns in the given foreign key
2272
* 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).
2273
* The number of columns returned from the parent table must match the number of
2274
* columns that make up the foreign key. They
2275
* are ordered by FKTABLE_CAT, FKTABLE_SCHEM, FKTABLE_NAME, and
2276
* KEY_SEQ.
2277
*
2278
* <P>Each foreign key column description has the following columns:
2279
* <OL>
2280
* <LI><B>PKTABLE_CAT</B> String {@code =>} parent key table catalog (may be {@code null})
2281
* <LI><B>PKTABLE_SCHEM</B> String {@code =>} parent key table schema (may be {@code null})
2282
* <LI><B>PKTABLE_NAME</B> String {@code =>} parent key table name
2283
* <LI><B>PKCOLUMN_NAME</B> String {@code =>} parent key column name
2284
* <LI><B>FKTABLE_CAT</B> String {@code =>} foreign key table catalog (may be {@code null})
2285
* being exported (may be {@code null})
2286
* <LI><B>FKTABLE_SCHEM</B> String {@code =>} foreign key table schema (may be {@code null})
2287
* being exported (may be {@code null})
2288
* <LI><B>FKTABLE_NAME</B> String {@code =>} foreign key table name
2289
* being exported
2290
* <LI><B>FKCOLUMN_NAME</B> String {@code =>} foreign key column name
2291
* being exported
2292
* <LI><B>KEY_SEQ</B> short {@code =>} sequence number within foreign key( a value
2293
* of 1 represents the first column of the foreign key, a value of 2 would
2294
* represent the second column within the foreign key).
2295
* <LI><B>UPDATE_RULE</B> short {@code =>} What happens to
2296
* foreign key when parent key is updated:
2297
* <UL>
2298
* <LI> importedNoAction - do not allow update of parent
2299
* key if it has been imported
2300
* <LI> importedKeyCascade - change imported key to agree
2301
* with parent key update
2302
* <LI> importedKeySetNull - change imported key to {@code NULL} if
2303
* its parent key has been updated
2304
* <LI> importedKeySetDefault - change imported key to default values
2305
* if its parent key has been updated
2306
* <LI> importedKeyRestrict - same as importedKeyNoAction
2307
* (for ODBC 2.x compatibility)
2308
* </UL>
2309
* <LI><B>DELETE_RULE</B> short {@code =>} What happens to
2310
* the foreign key when parent key is deleted.
2311
* <UL>
2312
* <LI> importedKeyNoAction - do not allow delete of parent
2313
* key if it has been imported
2314
* <LI> importedKeyCascade - delete rows that import a deleted key
2315
* <LI> importedKeySetNull - change imported key to {@code NULL} if
2316
* its primary key has been deleted
2317
* <LI> importedKeyRestrict - same as importedKeyNoAction
2318
* (for ODBC 2.x compatibility)
2319
* <LI> importedKeySetDefault - change imported key to default if
2320
* its parent key has been deleted
2321
* </UL>
2322
* <LI><B>FK_NAME</B> String {@code =>} foreign key name (may be {@code null})
2323
* <LI><B>PK_NAME</B> String {@code =>} parent key name (may be {@code null})
2324
* <LI><B>DEFERRABILITY</B> short {@code =>} can the evaluation of foreign key
2325
* constraints be deferred until commit
2326
* <UL>
2327
* <LI> importedKeyInitiallyDeferred - see SQL92 for definition
2328
* <LI> importedKeyInitiallyImmediate - see SQL92 for definition
2329
* <LI> importedKeyNotDeferrable - see SQL92 for definition
2330
* </UL>
2331
* </OL>
2332
*
2333
* @param parentCatalog a catalog name; must match the catalog name
2334
* as it is stored in the database; "" retrieves those without a
2335
* catalog; {@code null} means drop catalog name from the selection criteria
2336
* @param parentSchema a schema name; must match the schema name as
2337
* it is stored in the database; "" retrieves those without a schema;
2338
* {@code null} means drop schema name from the selection criteria
2339
* @param parentTable the name of the table that exports the key; must match
2340
* the table name as it is stored in the database
2341
* @param foreignCatalog a catalog name; must match the catalog name as
2342
* it is stored in the database; "" retrieves those without a
2343
* catalog; {@code null} means drop catalog name from the selection criteria
2344
* @param foreignSchema a schema name; must match the schema name as it
2345
* is stored in the database; "" retrieves those without a schema;
2346
* {@code null} means drop schema name from the selection criteria
2347
* @param foreignTable the name of the table that imports the key; must match
2348
* the table name as it is stored in the database
2349
* @return {@code ResultSet} - each row is a foreign key column description
2350
* @throws SQLException if a database access error occurs
2351
* @see #getImportedKeys
2352
*/
2353
ResultSet getCrossReference(
2354
String parentCatalog, String parentSchema, String parentTable,
2355
String foreignCatalog, String foreignSchema, String foreignTable
2356
) throws SQLException;
2357
2358
/**
2359
* Retrieves a description of all the data types supported by
2360
* this database. They are ordered by DATA_TYPE and then by how
2361
* closely the data type maps to the corresponding JDBC SQL type.
2362
*
2363
* <P>If the database supports SQL distinct types, then getTypeInfo() will return
2364
* a single row with a TYPE_NAME of DISTINCT and a DATA_TYPE of Types.DISTINCT.
2365
* If the database supports SQL structured types, then getTypeInfo() will return
2366
* a single row with a TYPE_NAME of STRUCT and a DATA_TYPE of Types.STRUCT.
2367
*
2368
* <P>If SQL distinct or structured types are supported, then information on the
2369
* individual types may be obtained from the getUDTs() method.
2370
*
2371
*
2372
* <P>Each type description has the following columns:
2373
* <OL>
2374
* <LI><B>TYPE_NAME</B> String {@code =>} Type name
2375
* <LI><B>DATA_TYPE</B> int {@code =>} SQL data type from java.sql.Types
2376
* <LI><B>PRECISION</B> int {@code =>} maximum precision
2377
* <LI><B>LITERAL_PREFIX</B> String {@code =>} prefix used to quote a literal
2378
* (may be {@code null})
2379
* <LI><B>LITERAL_SUFFIX</B> String {@code =>} suffix used to quote a literal
2380
* (may be {@code null})
2381
* <LI><B>CREATE_PARAMS</B> String {@code =>} parameters used in creating
2382
* the type (may be {@code null})
2383
* <LI><B>NULLABLE</B> short {@code =>} 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{@code =>} is it case sensitive.
2390
* <LI><B>SEARCHABLE</B> short {@code =>} 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 {@code =>} is it unsigned.
2398
* <LI><B>FIXED_PREC_SCALE</B> boolean {@code =>} can it be a money value.
2399
* <LI><B>AUTO_INCREMENT</B> boolean {@code =>} can it be used for an
2400
* auto-increment value.
2401
* <LI><B>LOCAL_TYPE_NAME</B> String {@code =>} localized version of type name
2402
* (may be {@code null})
2403
* <LI><B>MINIMUM_SCALE</B> short {@code =>} minimum scale supported
2404
* <LI><B>MAXIMUM_SCALE</B> short {@code =>} maximum scale supported
2405
* <LI><B>SQL_DATA_TYPE</B> int {@code =>} unused
2406
* <LI><B>SQL_DATETIME_SUB</B> int {@code =>} unused
2407
* <LI><B>NUM_PREC_RADIX</B> int {@code =>} 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} object in which each row is an SQL
2418
* type description
2419
* @throws SQLException if a database access error occurs
2420
*/
2421
ResultSet getTypeInfo() throws SQLException;
2422
2423
/**
2424
* Indicates that a {@code NULL} value is NOT allowed for this
2425
* data type.
2426
* <P>
2427
* A possible value for column {@code NULLABLE} in the
2428
* {@code ResultSet} object returned by the method
2429
* {@code getTypeInfo}.
2430
*/
2431
int typeNoNulls = 0;
2432
2433
/**
2434
* Indicates that a {@code NULL} value is allowed for this
2435
* data type.
2436
* <P>
2437
* A possible value for column {@code NULLABLE} in the
2438
* {@code ResultSet} object returned by the method
2439
* {@code getTypeInfo}.
2440
*/
2441
int typeNullable = 1;
2442
2443
/**
2444
* Indicates that it is not known whether a {@code NULL} value
2445
* is allowed for this data type.
2446
* <P>
2447
* A possible value for column {@code NULLABLE} in the
2448
* {@code ResultSet} object returned by the method
2449
* {@code getTypeInfo}.
2450
*/
2451
int typeNullableUnknown = 2;
2452
2453
/**
2454
* Indicates that {@code WHERE} search clauses are not supported
2455
* for this type.
2456
* <P>
2457
* A possible value for column {@code SEARCHABLE} in the
2458
* {@code ResultSet} object returned by the method
2459
* {@code getTypeInfo}.
2460
*/
2461
int typePredNone = 0;
2462
2463
/**
2464
* Indicates that the data type
2465
* can be only be used in {@code WHERE} search clauses
2466
* that use {@code LIKE} predicates.
2467
* <P>
2468
* A possible value for column {@code SEARCHABLE} in the
2469
* {@code ResultSet} object returned by the method
2470
* {@code getTypeInfo}.
2471
*/
2472
int typePredChar = 1;
2473
2474
/**
2475
* Indicates that the data type can be only be used in {@code WHERE}
2476
* search clauses
2477
* that do not use {@code LIKE} predicates.
2478
* <P>
2479
* A possible value for column {@code SEARCHABLE} in the
2480
* {@code ResultSet} object returned by the method
2481
* {@code getTypeInfo}.
2482
*/
2483
int typePredBasic = 2;
2484
2485
/**
2486
* Indicates that all {@code WHERE} search clauses can be
2487
* based on this type.
2488
* <P>
2489
* A possible value for column {@code SEARCHABLE} in the
2490
* {@code ResultSet} object returned by the method
2491
* {@code getTypeInfo}.
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 {@code =>} table catalog (may be {@code null})
2502
* <LI><B>TABLE_SCHEM</B> String {@code =>} table schema (may be {@code null})
2503
* <LI><B>TABLE_NAME</B> String {@code =>} table name
2504
* <LI><B>NON_UNIQUE</B> boolean {@code =>} Can index values be non-unique.
2505
* false when TYPE is tableIndexStatistic
2506
* <LI><B>INDEX_QUALIFIER</B> String {@code =>} index catalog (may be {@code null});
2507
* {@code null} when TYPE is tableIndexStatistic
2508
* <LI><B>INDEX_NAME</B> String {@code =>} index name; {@code null} when TYPE is
2509
* tableIndexStatistic
2510
* <LI><B>TYPE</B> short {@code =>} index type:
2511
* <UL>
2512
* <LI> tableIndexStatistic - this identifies table statistics that are
2513
* returned in conjunction 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 {@code =>} column sequence number
2519
* within index; zero when TYPE is tableIndexStatistic
2520
* <LI><B>COLUMN_NAME</B> String {@code =>} column name; {@code null} when TYPE is
2521
* tableIndexStatistic
2522
* <LI><B>ASC_OR_DESC</B> String {@code =>} column sort sequence, "A" {@code =>} ascending,
2523
* "D" {@code =>} descending, may be {@code null} if sort sequence is not supported;
2524
* {@code null} when TYPE is tableIndexStatistic
2525
* <LI><B>CARDINALITY</B> long {@code =>} 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> long {@code =>} When TYPE is tableIndexStatistic 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 {@code =>} Filter condition, if any.
2532
* (may be {@code null})
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} 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} 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} - each row is an index column description
2551
* @throws 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} in the
2562
* {@code ResultSet} object returned by the method
2563
* {@code getIndexInfo}.
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} in the
2571
* {@code ResultSet} object returned by the method
2572
* {@code getIndexInfo}.
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} in the
2580
* {@code ResultSet} object returned by the method
2581
* {@code getIndexInfo}.
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} in the
2591
* {@code ResultSet} object returned by the method
2592
* {@code getIndexInfo}.
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}
2602
* @return {@code true} if so; {@code false} otherwise
2603
* @throws 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}
2614
* @param concurrency type defined in {@code java.sql.ResultSet}
2615
* @return {@code true} if so; {@code false} otherwise
2616
* @throws 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} object,
2626
* the result set's own updates are visible.
2627
*
2628
* @param type the {@code ResultSet} type; one of
2629
* {@code ResultSet.TYPE_FORWARD_ONLY},
2630
* {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or
2631
* {@code ResultSet.TYPE_SCROLL_SENSITIVE}
2632
* @return {@code true} if updates are visible for the given result set type;
2633
* {@code false} otherwise
2634
* @throws 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} type; one of
2643
* {@code ResultSet.TYPE_FORWARD_ONLY},
2644
* {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or
2645
* {@code ResultSet.TYPE_SCROLL_SENSITIVE}
2646
* @return {@code true} if deletes are visible for the given result set type;
2647
* {@code false} otherwise
2648
* @throws 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} type; one of
2657
* {@code ResultSet.TYPE_FORWARD_ONLY},
2658
* {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or
2659
* {@code ResultSet.TYPE_SCROLL_SENSITIVE}
2660
* @return {@code true} if inserts are visible for the given result set type;
2661
* {@code false} otherwise
2662
* @throws 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} type; one of
2671
* {@code ResultSet.TYPE_FORWARD_ONLY},
2672
* {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or
2673
* {@code ResultSet.TYPE_SCROLL_SENSITIVE}
2674
* @return {@code true} if updates made by others
2675
* are visible for the given result set type;
2676
* {@code false} otherwise
2677
* @throws 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} type; one of
2686
* {@code ResultSet.TYPE_FORWARD_ONLY},
2687
* {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or
2688
* {@code ResultSet.TYPE_SCROLL_SENSITIVE}
2689
* @return {@code true} if deletes made by others
2690
* are visible for the given result set type;
2691
* {@code false} otherwise
2692
* @throws 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} type; one of
2701
* {@code ResultSet.TYPE_FORWARD_ONLY},
2702
* {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or
2703
* {@code ResultSet.TYPE_SCROLL_SENSITIVE}
2704
* @return {@code true} if inserts made by others
2705
* are visible for the given result set type;
2706
* {@code false} otherwise
2707
* @throws 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}.
2715
*
2716
* @param type the {@code ResultSet} type; one of
2717
* {@code ResultSet.TYPE_FORWARD_ONLY},
2718
* {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or
2719
* {@code ResultSet.TYPE_SCROLL_SENSITIVE}
2720
* @return {@code true} if changes are detected by the result set type;
2721
* {@code false} otherwise
2722
* @throws 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}. If the method
2730
* {@code deletesAreDetected} returns {@code false}, it means that
2731
* deleted rows are removed from the result set.
2732
*
2733
* @param type the {@code ResultSet} type; one of
2734
* {@code ResultSet.TYPE_FORWARD_ONLY},
2735
* {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or
2736
* {@code ResultSet.TYPE_SCROLL_SENSITIVE}
2737
* @return {@code true} if deletes are detected by the given result set type;
2738
* {@code false} otherwise
2739
* @throws 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}.
2747
*
2748
* @param type the {@code ResultSet} type; one of
2749
* {@code ResultSet.TYPE_FORWARD_ONLY},
2750
* {@code ResultSet.TYPE_SCROLL_INSENSITIVE}, or
2751
* {@code ResultSet.TYPE_SCROLL_SENSITIVE}
2752
* @return {@code true} if changes are detected by the specified result
2753
* set type; {@code false} otherwise
2754
* @throws 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} if this database supports batch updates;
2763
* {@code false} otherwise
2764
* @throws 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 STRUCT},
2773
* or {@code DISTINCT}.
2774
*
2775
* <P>Only types matching the catalog, schema, type name and type
2776
* criteria are returned. They are ordered by {@code DATA_TYPE},
2777
* {@code TYPE_CAT}, {@code TYPE_SCHEM} and
2778
* {@code TYPE_NAME}. 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 {@code =>} the type's catalog (may be {@code null})
2785
* <LI><B>TYPE_SCHEM</B> String {@code =>} type's schema (may be {@code null})
2786
* <LI><B>TYPE_NAME</B> String {@code =>} type name
2787
* <LI><B>CLASS_NAME</B> String {@code =>} Java class name
2788
* <LI><B>DATA_TYPE</B> int {@code =>} type value defined in java.sql.Types.
2789
* One of JAVA_OBJECT, STRUCT, or DISTINCT
2790
* <LI><B>REMARKS</B> String {@code =>} explanatory comment on the type
2791
* <LI><B>BASE_TYPE</B> short {@code =>} 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} 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} 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} 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} returns all types
2813
* @return {@code ResultSet} object in which each row describes a UDT
2814
* @throws 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
*
2825
* @return the connection that produced this metadata object
2826
* @throws 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} if savepoints are supported;
2837
* {@code false} otherwise
2838
* @throws 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} if named parameters are supported;
2848
* {@code false} otherwise
2849
* @throws 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} objects
2856
* returned from a {@code CallableStatement} object
2857
* simultaneously.
2858
*
2859
* @return {@code true} if a {@code CallableStatement} object
2860
* can return multiple {@code ResultSet} objects
2861
* simultaneously; {@code false} otherwise
2862
* @throws SQLException if a database 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} if auto-generated keys can be retrieved
2872
* after a statement has executed; {@code false} otherwise
2873
* <p>If {@code true} is returned, the JDBC driver must support the
2874
* returning of auto-generated keys for at least SQL INSERT statements
2875
*
2876
* @throws 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} 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 {@code =>} the UDT's catalog (may be {@code null})
2898
* <LI><B>TYPE_SCHEM</B> String {@code =>} UDT's schema (may be {@code null})
2899
* <LI><B>TYPE_NAME</B> String {@code =>} type name of the UDT
2900
* <LI><B>SUPERTYPE_CAT</B> String {@code =>} the direct super type's catalog
2901
* (may be {@code null})
2902
* <LI><B>SUPERTYPE_SCHEM</B> String {@code =>} the direct super type's schema
2903
* (may be {@code null})
2904
* <LI><B>SUPERTYPE_NAME</B> String {@code =>} 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} 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} 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 {@code =>} the type's catalog (may be {@code null})
2940
* <LI><B>TABLE_SCHEM</B> String {@code =>} type's schema (may be {@code null})
2941
* <LI><B>TABLE_NAME</B> String {@code =>} type name
2942
* <LI><B>SUPERTABLE_NAME</B> String {@code =>} 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} 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} 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} values might not be allowed.
2964
* <P>
2965
* A possible value for the column
2966
* {@code NULLABLE} in the {@code ResultSet} object
2967
* returned by the method {@code getAttributes}.
2968
*/
2969
short attributeNoNulls = 0;
2970
2971
/**
2972
* Indicates that {@code NULL} values are definitely allowed.
2973
* <P>
2974
* A possible value for the column {@code NULLABLE}
2975
* in the {@code ResultSet} object
2976
* returned by the method {@code getAttributes}.
2977
*/
2978
short attributeNullable = 1;
2979
2980
/**
2981
* Indicates that whether {@code NULL} values are allowed is not
2982
* known.
2983
* <P>
2984
* A possible value for the column {@code NULLABLE}
2985
* in the {@code ResultSet} object
2986
* returned by the method {@code getAttributes}.
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 TYPE_SCHEM},
2998
* {@code TYPE_NAME} and {@code ORDINAL_POSITION}. This description
2999
* does not contain inherited attributes.
3000
* <P>
3001
* The {@code ResultSet} object that is returned has the following
3002
* columns:
3003
* <OL>
3004
* <LI><B>TYPE_CAT</B> String {@code =>} type catalog (may be {@code null})
3005
* <LI><B>TYPE_SCHEM</B> String {@code =>} type schema (may be {@code null})
3006
* <LI><B>TYPE_NAME</B> String {@code =>} type name
3007
* <LI><B>ATTR_NAME</B> String {@code =>} attribute name
3008
* <LI><B>DATA_TYPE</B> int {@code =>} attribute type SQL type from java.sql.Types
3009
* <LI><B>ATTR_TYPE_NAME</B> String {@code =>} 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 {@code =>} 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 {@code =>} 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 {@code =>} Radix (typically either 10 or 2)
3018
* <LI><B>NULLABLE</B> int {@code =>} 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 {@code =>} comment describing column (may be {@code null})
3025
* <LI><B>ATTR_DEF</B> String {@code =>} default value (may be {@code null})
3026
* <LI><B>SQL_DATA_TYPE</B> int {@code =>} unused
3027
* <LI><B>SQL_DATETIME_SUB</B> int {@code =>} unused
3028
* <LI><B>CHAR_OCTET_LENGTH</B> int {@code =>} for char types the
3029
* maximum number of bytes in the column
3030
* <LI><B>ORDINAL_POSITION</B> int {@code =>} index of the attribute in the UDT
3031
* (starting at 1)
3032
* <LI><B>IS_NULLABLE</B> String {@code =>} 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 {@code =>} catalog of table that is the
3041
* scope of a reference attribute ({@code null} if DATA_TYPE isn't REF)
3042
* <LI><B>SCOPE_SCHEMA</B> String {@code =>} schema of table that is the
3043
* scope of a reference attribute ({@code null} if DATA_TYPE isn't REF)
3044
* <LI><B>SCOPE_TABLE</B> String {@code =>} table name that is the scope of a
3045
* reference attribute ({@code null} if the DATA_TYPE isn't REF)
3046
* <LI><B>SOURCE_DATA_TYPE</B> short {@code =>} source type of a distinct type or user-generated
3047
* Ref type,SQL type from java.sql.Types ({@code null} 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} 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} 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} object in which each row is an
3063
* attribute description
3064
* @throws 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} or
3077
* {@code ResultSet.CLOSE_CURSORS_AT_COMMIT}
3078
* @return {@code true} if so; {@code false} otherwise
3079
* @throws 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}
3087
* objects.
3088
*
3089
* @return the default holdability; either
3090
* {@code ResultSet.HOLD_CURSORS_OVER_COMMIT} or
3091
* {@code ResultSet.CLOSE_CURSORS_AT_COMMIT}
3092
* @throws 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
* @throws 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
* @throws 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
* @throws 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
* @throws 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} which is used to indicate
3138
* whether the value returned by the method
3139
* {@code SQLException.getSQLState} is an
3140
* X/Open (now know as Open Group) SQL CLI SQLSTATE value.
3141
*
3142
* @since 1.4
3143
*/
3144
int sqlStateXOpen = 1;
3145
3146
/**
3147
* A possible return value for the method
3148
* {@code DatabaseMetaData.getSQLStateType} which is used to indicate
3149
* whether the value returned by the method
3150
* {@code SQLException.getSQLState} is an SQLSTATE value.
3151
*
3152
* @since 1.6
3153
*/
3154
int sqlStateSQL = 2;
3155
3156
/**
3157
* A possible return value for the method
3158
* {@code DatabaseMetaData.getSQLStateType} which is used to indicate
3159
* whether the value returned by the method
3160
* {@code SQLException.getSQLState} 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} instead.
3164
*
3165
* @since 1.4
3166
*/
3167
int sqlStateSQL99 = sqlStateSQL;
3168
3169
/**
3170
* Indicates whether the SQLSTATE returned by {@code SQLException.getSQLState}
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} if updates are made to a copy of the LOB;
3184
* {@code false} 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} if so; {@code false} 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 this data source supports the SQL {@code ROWID} type,
3203
* and the lifetime for which a {@link RowId} object remains valid.
3204
*
3205
* @return the status indicating the lifetime of a {@code RowId}
3206
* @throws SQLException if a database access error occurs
3207
* @since 1.6
3208
*/
3209
RowIdLifetime getRowIdLifetime() throws SQLException;
3210
3211
/**
3212
* Retrieves the schema names available in this database. The results
3213
* are ordered by {@code TABLE_CATALOG} and
3214
* {@code TABLE_SCHEM}.
3215
*
3216
* <P>The schema columns are:
3217
* <OL>
3218
* <LI><B>TABLE_SCHEM</B> String {@code =>} schema name
3219
* <LI><B>TABLE_CATALOG</B> String {@code =>} catalog name (may be {@code null})
3220
* </OL>
3221
*
3222
*
3223
* @param catalog a catalog name; must match the catalog name as it is stored
3224
* in the database;"" retrieves those without a catalog; null means catalog
3225
* name should not be used to narrow down the search.
3226
* @param schemaPattern a schema name; must match the schema name as it is
3227
* stored in the database; null means
3228
* schema name should not be used to narrow down the search.
3229
* @return a {@code ResultSet} object in which each row is a
3230
* schema description
3231
* @throws SQLException if a database access error occurs
3232
* @see #getSearchStringEscape
3233
* @since 1.6
3234
*/
3235
ResultSet getSchemas(String catalog, String schemaPattern) throws SQLException;
3236
3237
/**
3238
* Retrieves whether this database supports invoking user-defined or vendor functions
3239
* using the stored procedure escape syntax.
3240
*
3241
* @return {@code true} if so; {@code false} otherwise
3242
* @throws SQLException if a database access error occurs
3243
* @since 1.6
3244
*/
3245
boolean supportsStoredFunctionsUsingCallSyntax() throws SQLException;
3246
3247
/**
3248
* Retrieves whether a {@code SQLException} while autoCommit is {@code true} indicates
3249
* that all open ResultSets are closed, even ones that are holdable. When a {@code SQLException} occurs while
3250
* autocommit is {@code true}, it is vendor specific whether the JDBC driver responds with a commit operation, a
3251
* rollback operation, or by doing neither a commit nor a rollback. A potential result of this difference
3252
* is in whether or not holdable ResultSets are closed.
3253
*
3254
* @return {@code true} if so; {@code false} otherwise
3255
* @throws SQLException if a database access error occurs
3256
* @since 1.6
3257
*/
3258
boolean autoCommitFailureClosesAllResultSets() throws SQLException;
3259
/**
3260
* Retrieves a list of the client info properties
3261
* that the driver supports. The result set contains the following columns
3262
*
3263
* <ol>
3264
* <li><b>NAME</b> String{@code =>} The name of the client info property<br>
3265
* <li><b>MAX_LEN</b> int{@code =>} The maximum length of the value for the property<br>
3266
* <li><b>DEFAULT_VALUE</b> String{@code =>} The default value of the property<br>
3267
* <li><b>DESCRIPTION</b> String{@code =>} A description of the property. This will typically
3268
* contain information as to where this property is
3269
* stored in the database.
3270
* </ol>
3271
* <p>
3272
* The {@code ResultSet} is sorted by the NAME column
3273
*
3274
* @return A {@code ResultSet} object; each row is a supported client info
3275
* property
3276
*
3277
* @throws SQLException if a database access error occurs
3278
*
3279
* @since 1.6
3280
*/
3281
ResultSet getClientInfoProperties()
3282
throws SQLException;
3283
3284
/**
3285
* Retrieves a description of the system and user functions available
3286
* in the given catalog.
3287
* <P>
3288
* Only system and user function descriptions matching the schema and
3289
* function name criteria are returned. They are ordered by
3290
* {@code FUNCTION_CAT}, {@code FUNCTION_SCHEM},
3291
* {@code FUNCTION_NAME} and
3292
* {@code SPECIFIC_ NAME}.
3293
*
3294
* <P>Each function description has the following columns:
3295
* <OL>
3296
* <LI><B>FUNCTION_CAT</B> String {@code =>} function catalog (may be {@code null})
3297
* <LI><B>FUNCTION_SCHEM</B> String {@code =>} function schema (may be {@code null})
3298
* <LI><B>FUNCTION_NAME</B> String {@code =>} function name. This is the name
3299
* used to invoke the function
3300
* <LI><B>REMARKS</B> String {@code =>} explanatory comment on the function
3301
* <LI><B>FUNCTION_TYPE</B> short {@code =>} kind of function:
3302
* <UL>
3303
* <LI>functionResultUnknown - Cannot determine if a return value
3304
* or table will be returned
3305
* <LI> functionNoTable- Does not return a table
3306
* <LI> functionReturnsTable - Returns a table
3307
* </UL>
3308
* <LI><B>SPECIFIC_NAME</B> String {@code =>} the name which uniquely identifies
3309
* this function within its schema. This is a user specified, or DBMS
3310
* generated, name that may be different then the {@code FUNCTION_NAME}
3311
* for example with overload functions
3312
* </OL>
3313
* <p>
3314
* A user may not have permission to execute any of the functions that are
3315
* returned by {@code getFunctions}
3316
*
3317
* @param catalog a catalog name; must match the catalog name as it
3318
* is stored in the database; "" retrieves those without a catalog;
3319
* {@code null} means that the catalog name should not be used to narrow
3320
* the search
3321
* @param schemaPattern a schema name pattern; must match the schema name
3322
* as it is stored in the database; "" retrieves those without a schema;
3323
* {@code null} means that the schema name should not be used to narrow
3324
* the search
3325
* @param functionNamePattern a function name pattern; must match the
3326
* function name as it is stored in the database
3327
* @return {@code ResultSet} - each row is a function description
3328
* @throws SQLException if a database access error occurs
3329
* @see #getSearchStringEscape
3330
* @since 1.6
3331
*/
3332
ResultSet getFunctions(String catalog, String schemaPattern,
3333
String functionNamePattern) throws SQLException;
3334
/**
3335
* Retrieves a description of the given catalog's system or user
3336
* function parameters and return type.
3337
*
3338
* <P>Only descriptions matching the schema, function and
3339
* parameter name criteria are returned. They are ordered by
3340
* {@code FUNCTION_CAT}, {@code FUNCTION_SCHEM},
3341
* {@code FUNCTION_NAME} and
3342
* {@code SPECIFIC_ NAME}. Within this, the return value,
3343
* if any, is first. Next are the parameter descriptions in call
3344
* order. The column descriptions follow in column number order.
3345
*
3346
* <P>Each row in the {@code ResultSet}
3347
* is a parameter description, column description or
3348
* return type description with the following fields:
3349
* <OL>
3350
* <LI><B>FUNCTION_CAT</B> String {@code =>} function catalog (may be {@code null})
3351
* <LI><B>FUNCTION_SCHEM</B> String {@code =>} function schema (may be {@code null})
3352
* <LI><B>FUNCTION_NAME</B> String {@code =>} function name. This is the name
3353
* used to invoke the function
3354
* <LI><B>COLUMN_NAME</B> String {@code =>} column/parameter name
3355
* <LI><B>COLUMN_TYPE</B> Short {@code =>} kind of column/parameter:
3356
* <UL>
3357
* <LI> functionColumnUnknown - nobody knows
3358
* <LI> functionColumnIn - IN parameter
3359
* <LI> functionColumnInOut - INOUT parameter
3360
* <LI> functionColumnOut - OUT parameter
3361
* <LI> functionColumnReturn - function return value
3362
* <LI> functionColumnResult - Indicates that the parameter or column
3363
* is a column in the {@code ResultSet}
3364
* </UL>
3365
* <LI><B>DATA_TYPE</B> int {@code =>} SQL type from java.sql.Types
3366
* <LI><B>TYPE_NAME</B> String {@code =>} SQL type name, for a UDT type the
3367
* type name is fully qualified
3368
* <LI><B>PRECISION</B> int {@code =>} precision
3369
* <LI><B>LENGTH</B> int {@code =>} length in bytes of data
3370
* <LI><B>SCALE</B> short {@code =>} scale - null is returned for data types where
3371
* SCALE is not applicable.
3372
* <LI><B>RADIX</B> short {@code =>} radix
3373
* <LI><B>NULLABLE</B> short {@code =>} can it contain NULL.
3374
* <UL>
3375
* <LI> functionNoNulls - does not allow NULL values
3376
* <LI> functionNullable - allows NULL values
3377
* <LI> functionNullableUnknown - nullability unknown
3378
* </UL>
3379
* <LI><B>REMARKS</B> String {@code =>} comment describing column/parameter
3380
* <LI><B>CHAR_OCTET_LENGTH</B> int {@code =>} the maximum length of binary
3381
* and character based parameters or columns. For any other datatype the returned value
3382
* is a NULL
3383
* <LI><B>ORDINAL_POSITION</B> int {@code =>} the ordinal position, starting
3384
* from 1, for the input and output parameters. A value of 0
3385
* is returned if this row describes the function's return value.
3386
* For result set columns, it is the
3387
* ordinal position of the column in the result set starting from 1.
3388
* <LI><B>IS_NULLABLE</B> String {@code =>} ISO rules are used to determine
3389
* the nullability for a parameter or column.
3390
* <UL>
3391
* <LI> YES --- if the parameter or column can include NULLs
3392
* <LI> NO --- if the parameter or column cannot include NULLs
3393
* <LI> empty string --- if the nullability for the
3394
* parameter or column is unknown
3395
* </UL>
3396
* <LI><B>SPECIFIC_NAME</B> String {@code =>} the name which uniquely identifies
3397
* this function within its schema. This is a user specified, or DBMS
3398
* generated, name that may be different then the {@code FUNCTION_NAME}
3399
* for example with overload functions
3400
* </OL>
3401
*
3402
* <p>The PRECISION column represents the specified column size for the given
3403
* parameter or column.
3404
* For numeric data, this is the maximum precision. For character data, this is the length in characters.
3405
* For datetime datatypes, this is the length in characters of the String representation (assuming the
3406
* maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype,
3407
* this is the length in bytes. Null is returned for data types where the
3408
* column size is not applicable.
3409
* @param catalog a catalog name; must match the catalog name as it
3410
* is stored in the database; "" retrieves those without a catalog;
3411
* {@code null} means that the catalog name should not be used to narrow
3412
* the search
3413
* @param schemaPattern a schema name pattern; must match the schema name
3414
* as it is stored in the database; "" retrieves those without a schema;
3415
* {@code null} means that the schema name should not be used to narrow
3416
* the search
3417
* @param functionNamePattern a procedure name pattern; must match the
3418
* function name as it is stored in the database
3419
* @param columnNamePattern a parameter name pattern; must match the
3420
* parameter or column name as it is stored in the database
3421
* @return {@code ResultSet} - each row describes a
3422
* user function parameter, column or return type
3423
*
3424
* @throws SQLException if a database access error occurs
3425
* @see #getSearchStringEscape
3426
* @since 1.6
3427
*/
3428
ResultSet getFunctionColumns(String catalog,
3429
String schemaPattern,
3430
String functionNamePattern,
3431
String columnNamePattern) throws SQLException;
3432
3433
3434
/**
3435
* Indicates that type of the parameter or column is unknown.
3436
* <P>
3437
* A possible value for the column
3438
* {@code COLUMN_TYPE}
3439
* in the {@code ResultSet}
3440
* returned by the method {@code getFunctionColumns}.
3441
*/
3442
int functionColumnUnknown = 0;
3443
3444
/**
3445
* Indicates that the parameter or column is an IN parameter.
3446
* <P>
3447
* A possible value for the column
3448
* {@code COLUMN_TYPE}
3449
* in the {@code ResultSet}
3450
* returned by the method {@code getFunctionColumns}.
3451
* @since 1.6
3452
*/
3453
int functionColumnIn = 1;
3454
3455
/**
3456
* Indicates that the parameter or column is an INOUT parameter.
3457
* <P>
3458
* A possible value for the column
3459
* {@code COLUMN_TYPE}
3460
* in the {@code ResultSet}
3461
* returned by the method {@code getFunctionColumns}.
3462
* @since 1.6
3463
*/
3464
int functionColumnInOut = 2;
3465
3466
/**
3467
* Indicates that the parameter or column is an OUT parameter.
3468
* <P>
3469
* A possible value for the column
3470
* {@code COLUMN_TYPE}
3471
* in the {@code ResultSet}
3472
* returned by the method {@code getFunctionColumns}.
3473
* @since 1.6
3474
*/
3475
int functionColumnOut = 3;
3476
/**
3477
* Indicates that the parameter or column is a return value.
3478
* <P>
3479
* A possible value for the column
3480
* {@code COLUMN_TYPE}
3481
* in the {@code ResultSet}
3482
* returned by the method {@code getFunctionColumns}.
3483
* @since 1.6
3484
*/
3485
int functionReturn = 4;
3486
3487
/**
3488
* Indicates that the parameter or column is a column in a result set.
3489
* <P>
3490
* A possible value for the column
3491
* {@code COLUMN_TYPE}
3492
* in the {@code ResultSet}
3493
* returned by the method {@code getFunctionColumns}.
3494
* @since 1.6
3495
*/
3496
int functionColumnResult = 5;
3497
3498
3499
/**
3500
* Indicates that {@code NULL} values are not allowed.
3501
* <P>
3502
* A possible value for the column
3503
* {@code NULLABLE}
3504
* in the {@code ResultSet} object
3505
* returned by the method {@code getFunctionColumns}.
3506
* @since 1.6
3507
*/
3508
int functionNoNulls = 0;
3509
3510
/**
3511
* Indicates that {@code NULL} values are allowed.
3512
* <P>
3513
* A possible value for the column
3514
* {@code NULLABLE}
3515
* in the {@code ResultSet} object
3516
* returned by the method {@code getFunctionColumns}.
3517
* @since 1.6
3518
*/
3519
int functionNullable = 1;
3520
3521
/**
3522
* Indicates that whether {@code NULL} values are allowed
3523
* is unknown.
3524
* <P>
3525
* A possible value for the column
3526
* {@code NULLABLE}
3527
* in the {@code ResultSet} object
3528
* returned by the method {@code getFunctionColumns}.
3529
* @since 1.6
3530
*/
3531
int functionNullableUnknown = 2;
3532
3533
/**
3534
* Indicates that it is not known whether the function returns
3535
* a result or a table.
3536
* <P>
3537
* A possible value for column {@code FUNCTION_TYPE} in the
3538
* {@code ResultSet} object returned by the method
3539
* {@code getFunctions}.
3540
* @since 1.6
3541
*/
3542
int functionResultUnknown = 0;
3543
3544
/**
3545
* Indicates that the function does not return a table.
3546
* <P>
3547
* A possible value for column {@code FUNCTION_TYPE} in the
3548
* {@code ResultSet} object returned by the method
3549
* {@code getFunctions}.
3550
* @since 1.6
3551
*/
3552
int functionNoTable = 1;
3553
3554
/**
3555
* Indicates that the function returns a table.
3556
* <P>
3557
* A possible value for column {@code FUNCTION_TYPE} in the
3558
* {@code ResultSet} object returned by the method
3559
* {@code getFunctions}.
3560
* @since 1.6
3561
*/
3562
int functionReturnsTable = 2;
3563
3564
//--------------------------JDBC 4.1 -----------------------------
3565
3566
/**
3567
* Retrieves a description of the pseudo or hidden columns available
3568
* in a given table within the specified catalog and schema.
3569
* Pseudo or hidden columns may not always be stored within
3570
* a table and are not visible in a ResultSet unless they are
3571
* specified in the query's outermost SELECT list. Pseudo or hidden
3572
* columns may not necessarily be able to be modified. If there are
3573
* no pseudo or hidden columns, an empty ResultSet is returned.
3574
*
3575
* <P>Only column descriptions matching the catalog, schema, table
3576
* and column name criteria are returned. They are ordered by
3577
* {@code TABLE_CAT},{@code TABLE_SCHEM}, {@code TABLE_NAME}
3578
* and {@code COLUMN_NAME}.
3579
*
3580
* <P>Each column description has the following columns:
3581
* <OL>
3582
* <LI><B>TABLE_CAT</B> String {@code =>} table catalog (may be {@code null})
3583
* <LI><B>TABLE_SCHEM</B> String {@code =>} table schema (may be {@code null})
3584
* <LI><B>TABLE_NAME</B> String {@code =>} table name
3585
* <LI><B>COLUMN_NAME</B> String {@code =>} column name
3586
* <LI><B>DATA_TYPE</B> int {@code =>} SQL type from java.sql.Types
3587
* <LI><B>COLUMN_SIZE</B> int {@code =>} column size.
3588
* <LI><B>DECIMAL_DIGITS</B> int {@code =>} the number of fractional digits. Null is returned for data types where
3589
* DECIMAL_DIGITS is not applicable.
3590
* <LI><B>NUM_PREC_RADIX</B> int {@code =>} Radix (typically either 10 or 2)
3591
* <LI><B>COLUMN_USAGE</B> String {@code =>} The allowed usage for the column. The
3592
* value returned will correspond to the enum name returned by {@link PseudoColumnUsage#name PseudoColumnUsage.name()}
3593
* <LI><B>REMARKS</B> String {@code =>} comment describing column (may be {@code null})
3594
* <LI><B>CHAR_OCTET_LENGTH</B> int {@code =>} for char types the
3595
* maximum number of bytes in the column
3596
* <LI><B>IS_NULLABLE</B> String {@code =>} ISO rules are used to determine the nullability for a column.
3597
* <UL>
3598
* <LI> YES --- if the column can include NULLs
3599
* <LI> NO --- if the column cannot include NULLs
3600
* <LI> empty string --- if the nullability for the column is unknown
3601
* </UL>
3602
* </OL>
3603
*
3604
* <p>The COLUMN_SIZE column specifies the column size for the given column.
3605
* For numeric data, this is the maximum precision. For character data, this is the length in characters.
3606
* For datetime datatypes, this is the length in characters of the String representation (assuming the
3607
* maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype,
3608
* this is the length in bytes. Null is returned for data types where the
3609
* column size is not applicable.
3610
*
3611
* @param catalog a catalog name; must match the catalog name as it
3612
* is stored in the database; "" retrieves those without a catalog;
3613
* {@code null} means that the catalog name should not be used to narrow
3614
* the search
3615
* @param schemaPattern a schema name pattern; must match the schema name
3616
* as it is stored in the database; "" retrieves those without a schema;
3617
* {@code null} means that the schema name should not be used to narrow
3618
* the search
3619
* @param tableNamePattern a table name pattern; must match the
3620
* table name as it is stored in the database
3621
* @param columnNamePattern a column name pattern; must match the column
3622
* name as it is stored in the database
3623
* @return {@code ResultSet} - each row is a column description
3624
* @throws SQLException if a database access error occurs
3625
* @see PseudoColumnUsage
3626
* @since 1.7
3627
*/
3628
ResultSet getPseudoColumns(String catalog, String schemaPattern,
3629
String tableNamePattern, String columnNamePattern)
3630
throws SQLException;
3631
3632
/**
3633
* Retrieves whether a generated key will always be returned if the column
3634
* name(s) or index(es) specified for the auto generated key column(s)
3635
* are valid and the statement succeeds. The key that is returned may or
3636
* may not be based on the column(s) for the auto generated key.
3637
* Consult your JDBC driver documentation for additional details.
3638
* @return {@code true} if so; {@code false} otherwise
3639
* @throws SQLException if a database access error occurs
3640
* @since 1.7
3641
*/
3642
boolean generatedKeyAlwaysReturned() throws SQLException;
3643
3644
//--------------------------JDBC 4.2 -----------------------------
3645
3646
/**
3647
*
3648
* Retrieves the maximum number of bytes this database allows for
3649
* the logical size for a {@code LOB}.
3650
*<p>
3651
* The default implementation will return {@code 0}
3652
*
3653
* @return the maximum number of bytes allowed; a result of zero
3654
* means that there is no limit or the limit is not known
3655
* @throws SQLException if a database access error occurs
3656
* @since 1.8
3657
*/
3658
default long getMaxLogicalLobSize() throws SQLException {
3659
return 0;
3660
}
3661
3662
/**
3663
* Retrieves whether this database supports REF CURSOR.
3664
*<p>
3665
* The default implementation will return {@code false}
3666
*
3667
* @return {@code true} if this database supports REF CURSOR;
3668
* {@code false} otherwise
3669
* @throws SQLException if a database access error occurs
3670
* @since 1.8
3671
*/
3672
default boolean supportsRefCursors() throws SQLException{
3673
return false;
3674
}
3675
3676
// JDBC 4.3
3677
3678
/**
3679
* Retrieves whether this database supports sharding.
3680
* @implSpec
3681
* The default implementation will return {@code false}
3682
*
3683
* @return {@code true} if this database supports sharding;
3684
* {@code false} otherwise
3685
* @throws SQLException if a database access error occurs
3686
* @since 9
3687
*/
3688
default boolean supportsSharding() throws SQLException {
3689
return false;
3690
}
3691
}
3692
3693