База данных — схема столбцов, выбранных в запросе с использованием Java

Постановка проблемы:

Каков оптимальный способ получить схему столбцов в предложении select (имена столбцов, типы) запроса с использованием java?

Параметры

  1. Один из вариантов — запустить запрос, а затем использовать ResultSetMetadata для получения имени столбца и типа, но я не уверен, будет ли это оптимальным, поскольку будет выполняться весь запрос. Даже с предложением limit он может выполнить весь запрос до того, как результаты будут ограничены. Будет ли разница в производительности между запросами с предложением limit и без него?

  2. Другой вариант — по ссылке, т.е. дает ложное условие запроса и использовать ResultSetMetaData.

Например, выберите * из A, где 1=0;

Какой другой способ лучше или вариант 2 самый оптимальный во всех случаях? у меня может быть запрос, который объединяет несколько таблиц, будет ли вариант 2 иметь смысл и в этом случае, когда я добавлю ложное условие в конце?

Примечание. Требуется решение для DB2 и SqlServer.

РЕДАКТИРОВАТЬ: Кроме того, будет ли порядок, в котором извлекается схема, соответствовать порядку столбцов в данных? т. е. если я выберу * из A, скажем, я получу 5 столбцов. Будет ли этот порядок совпадать с тем, когда я получаю схему, используя ResultSetMetadata, используя тот же запрос?


person Manikandan Kannan    schedule 25.05.2016    source источник
comment
Не рекомендуется кодировать select * на Java. Вы всегда должны готовить свой оператор и явно указывать возвращаемые столбцы. Таким образом, вам даже не нужно проверять метаданные. (источник: blog.jooq.org/2013/08/12/)   -  person Stavr00    schedule 25.05.2016
comment
Но мне нужны все столбцы   -  person Manikandan Kannan    schedule 25.05.2016
comment
из java вы используете набор результатов JDBC. Таким образом, ваш второй вариант, похоже, работает с любой базой данных.   -  person danny117    schedule 25.05.2016
comment
Хорошо, а как насчет порядка, в котором я получаю схему, будет ли он соответствовать порядку, в котором я получаю данные?   -  person Manikandan Kannan    schedule 06.06.2016