2015-08-27 1 views
3

Я использую Oracle 11g, а также создать таблицу, как это:DatabaseMetaData.getColumns() возвращает пустую ResultSet, когда имя использование таблицы в нижнем регистре, но правая ResultSet в верхних

create table test1(
id int, 
name varchar(10), 
inserttime date 
) 

Затем я использую метод JDBC

DatabaseMetaData.getColumns(null, null, "test1", null) 

и получите пустые результаты. , но когда я использую

DatabaseMetaData.getColumns(null, null, "TEST1", null) 

я могу получить право ResultSet.

Почему?

+0

, вероятно, потому, что Java чувствительна к регистру, а Oracle не является – thatjeffsmith

ответ

1

Это потому, что внутри, OracleDatabaseMetaData.getColumns() выполняет запрос к представлению слова данных данных all_tab_columns, где он соответствует шаблону имени таблицы против all_tab_columns.table_name.

По соглашению Oracle хранит идентификаторы (такие как имя таблицы здесь) в словарях данных в формате верхнего регистра. Вы можете проверить это, выполнив следующий запрос в БД:

SELECT * FROM all_tab_columns t where t.table_name = 'TEST1'; 

Чувствительность к регистру идентификатора таблицы здесь действительно нелогичным, особенно потому, что идентификаторы таблиц нечувствительны к регистру в Oracle SQL.