Могу ли я получить имя таблицы из метаданных набора результатов объединения? - PullRequest
1 голос
/ 06 мая 2010

Ниже мой код пытается получить форму имени таблицы Resultset

ResultSet rs = stmt.executeQuery("select * from product");

ResultSetMetaData meta = rs.getMetaData();
int count = meta.getColumnCount();
for (int i=0; i<count; i++) {
  System.out.println(meta.getTableName(i));
}

Но он возвращает пустой, не говоря уже о том, что это набор результатов выбора соединения. Существуют ли другие способы получения имени таблицы из метаданных reusltset?

Ответы [ 3 ]

0 голосов
/ 29 ноября 2013

Получение имен таблиц из ResultSetMetaData - это то, что большинство JDBC-драйверов СУБД (Oracle, DB2, ...) не реализуют, поскольку во многих ситуациях спецификация не определяет, что должно быть возвращено - например, в случае представлений (view-name или base-table-name), наличия псевдонимов (table-alias или real table-name), результатов функций, которые принимают несколько параметров или не имеют их и т. д.

Так что я боюсь, что нет способа получить то, что вы хотите для большинства СУБД, реже всего независимо от СУБД.

0 голосов
/ 23 апреля 2015

Когда вы создаете выписку, попробуйте установить типы прокрутки / параллелизма следующим образом: conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY)

Некоторые драйверы требуют эти настройки для возврата имени таблицы.

Подробнее см. Здесь

0 голосов
/ 06 мая 2010

Индексы столбцов, переданные getTableName (), начинаются с 1. Измените цикл на:

for (int i=1; i<=count; i++) {
  System.out.println(meta.getTableName(i));
}
...