JDBC DatabaseMetaData.getColumns () возвращает дублирующиеся столбцы

Согласно спецификация языка C#:

А foreach оператор формы

foreach (V v in x) embedded-statement

тогда расширен до:

{
    E e = ((C)(x)).GetEnumerator();
    try {
            V v;
            while (e.MoveNext()) {
                    v = (V)(T)e.Current;
                    embedded-statement
            }
    }
    finally {
            ... // Dispose e
    }
}

сущность Ваших двух примеров является тем же, но существуют некоторые важные различия, прежде всего try / finally.

17
задан Community 23 May 2017 в 11:54
поделиться

2 ответа

В oracle Connection.getMetaData () возвращает метаданные для всей базы данных, а не только для схемы, к которой вы случайно подключились. Поэтому, когда вы предоставляете null в качестве первых двух аргументов для meta.getColumns () , вы не фильтруете результаты только для своей схемы.

Вам необходимо указать имя схемы Oracle одному из первых двух параметров meta.getColumns () , возможно, второму, например,

meta.getColumns(null, "myuser", "EMPLOYEES", null);

Это немного раздражает. , но именно так люди из Oracle решили реализовать свой драйвер JDBC.

25
ответ дан 30 November 2019 в 11:08
поделиться

Это не дает прямого ответа на ваш вопрос, но другой подход заключается в выполнить запрос:

select * from tablename where 1 = 0

Это вернет ResultSet, даже если он не выберет никаких строк. Метаданные набора результатов будут соответствовать таблице, из которой вы выбрали. В зависимости от того, что вы делаете, это может быть удобнее. tablename может быть любым, что вы можете выбрать - вам не нужно указывать правильный регистр или беспокоиться о том, в какой схеме он находится.

15
ответ дан 30 November 2019 в 11:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: