Согласно спецификация языка 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
.
В oracle Connection.getMetaData ()
возвращает метаданные для всей базы данных, а не только для схемы, к которой вы случайно подключились. Поэтому, когда вы предоставляете null
в качестве первых двух аргументов для meta.getColumns ()
, вы не фильтруете результаты только для своей схемы.
Вам необходимо указать имя схемы Oracle одному из первых двух параметров meta.getColumns ()
, возможно, второму, например,
meta.getColumns(null, "myuser", "EMPLOYEES", null);
Это немного раздражает. , но именно так люди из Oracle решили реализовать свой драйвер JDBC.
Это не дает прямого ответа на ваш вопрос, но другой подход заключается в выполнить запрос:
select * from tablename where 1 = 0
Это вернет ResultSet, даже если он не выберет никаких строк. Метаданные набора результатов будут соответствовать таблице, из которой вы выбрали. В зависимости от того, что вы делаете, это может быть удобнее. tablename
может быть любым, что вы можете выбрать - вам не нужно указывать правильный регистр или беспокоиться о том, в какой схеме он находится.