У меня есть приложение, которое использует простой ванильный код JDBC для доступа к различным свойствам из базы данных. Это агностик базы данных под.
Однако одна из функций, которые он использует, требует, чтобы драйвер был совместим с JDBC4 (в частности, он пытается определить, автоинкрементен ли столбец, получая доступ к значению IS_AUTOINCREMENT для результата getColumns в метаданных соединения)
Дело в том, что даже при использовании Oracle oracle.jdbc.OracleDriver, содержащегося в ojdbc6.jar, который утверждает, что является JDBC 4-совместимым, он не возвращает столбец IS_AUTOINCREMENT, добавленный в спецификацию в JDBC 4. Это создает исключение SQLEx для неизвестный столбец и делает приложение непригодным для Oracle dbs.
SELECT NULL AS table_cat,
t.owner AS table_schem,
t.table_name AS table_name,
t.column_name AS column_name,
DECODE (t.data_type, 'CHAR', 1, 'VARCHAR2', 12, 'NUMBER', 3,
«LONG», -1, «DATE», 93, «RAW», -3, «LONG RAW», -4,
«BLOB», 2004, «CLOB», 2005, «BFILE», -13, «FLOAT», 6,
«TIMESTAMP (6)», 93, «TIMESTAMP (6) с зоной времени», -101,
«TIMESTAMP (6) с локальной зоной времени», -102,
«ИНТЕРВАЛЬНЫЙ ГОД (2) ДО МЕСЯЦА», -103,
«ДЕНЬ ИНТЕРВАЛА (2) ДО ВТОРОГО (6)», -104,
«BINARY_FLOAT», 100, «BINARY_DOUBLE», 101,
«XMLTYPE», 2007,
1111)
AS data_type,
t.data_type AS type_name,
DECODE (t.data_precision, null, DECODE (t.data_type, 'CHAR',
t.char_length
'VARCHAR', t.char_length,
'VARCHAR2', t.char_length,
'NVARCHAR2', t.char_length,
'NCHAR', t.char_length,
'NUMBER', 0, t.data_length),
t.data_precision)
AS column_size,
0 AS buffer_length,
DECODE (t.data_type, 'NUMBER', DECODE (t.data_precision,
ноль, -127,
t.data_scale), * * тысяча двадцать-одна
t.data_scale) AS decimal_digits,
10 AS num_prec_radix,
DECODE (t.nullable, 'N', 0, 1) AS обнуляется,
NULL AS замечания,
t.data_default AS column_def,
0 AS sql_data_type,
0 AS sql_datetime_sub,
t.data_length AS char_octet_length,
t.column_id AS ordinal_position,
DECODE (t.nullable, 'N', 'NO', 'YES') AS is_nullable ОТ
all_tab_columns t ГДЕ t.owner НРАВИТСЯ
: 1 ESCAPE '/' AND t.table_name LIKE
: 2 ESCAPE '/' AND t.column_name LIKE
: 3 ESCAPE '/' ORDER BY table_schem,
имя_таблицы, порядковое_значение