Как получить эквивалент ResultSetMetaData без ResultSet - PullRequest
3 голосов
/ 02 апреля 2010

Мне нужно разрешить несколько имен столбцов в индексах столбцов (чтобы использовать некоторые из хороших ResultSetMetaData методов). Однако единственный способ, которым я знаю, как получить объект ResultSetMetaData, - это вызвать getMetaData() для некоторых ResultSet.

.

Проблема, с которой я столкнулся, заключается в том, что захват ResultSet забирает у меня ненужные ресурсы - мне не нужно запрашивать данные в таблице, я просто хочу получить некоторую информацию о таблице.

Кто-нибудь знает, как получить объект ResultSetMetaData, не получив сначала ResultSet (из потенциально огромной таблицы)?

Ответы [ 3 ]

4 голосов
/ 02 апреля 2010

Может быть, вы могли бы использовать

DatabaseMetaData databaseMetaData = connection.getMetaData();
databaseMetaData.getColumns(null, null, tableName, "%");

Возвращает одну строку для каждого столбца таблицы.

В этом случае вы будете использовать сам возвращенный ResultSet, а не его ResultSetMetaData.

Одним из преимуществ этого подхода является то, что он не мешает блокировке базы данных и транзакциям.

2 голосов
/ 02 апреля 2010

Если вы делаете select * from mytable, вы можете просто добавить предложение where, которое гарантирует, что записи не будут возвращены и ResultSet будет пустым?

Таким образом, вы по-прежнему просто получаете метаданные для интересующей вас таблицы вместо всей базы данных.

0 голосов
/ 05 июля 2016

Другое решение

выберите * из mytable limit 0;

Тогда запрос не получает никаких данных.

...