Есть ли способ получить имя приведенного столбца в драйвере SAP Hana jdbc?

#java #sql #jdbc #hana

#java #sql #jdbc #hana

Вопрос:

Учитывая следующий запрос: SELECT fc as A, sc as B, TO_BIGINT(tc) as C from....

Я хочу получить имена столбцов fc , sc , tc из результирующего набора.
Я делаю следующее:

 ResultSet rs = statment.executeQuery(query);
ResultSetMetData rsmd = rs.getMetaData();
for(int i = 1; i <= rsmd.getColumnCount(); i  ){
  System.out.println(rsmd.getColumnName(i)   " "   rsmd.getColumnLabel(i);
}
 

Однако, когда я распечатываю значения, я получаю следующее:

fc a

sc B

TO_BIGINT(tc) c

Нет ли способа игнорировать приведение с помощью jdbc и получить фактическое имя из запроса?

Комментарии:

1. Вы можете поместить любое допустимое выражение в список выбора SQL, а общее выражение позволяет вычислять результат из нескольких входных параметров, включая подзапрос в списке выбора (где вы будете использовать некоторый столбец из таблиц, не входящих в from join предложение or основного запроса). Таким образом, нет практической причины иметь такую возможность. Пожалуйста, опишите, какую задачу вам нужно выполнить в итоге? Просто зная столбец, вы не сможете определить его источник. Может быть, есть другой способ.

2. «Нет ли способа игнорировать приведение с помощью jdbc и получить фактическое имя из запроса?» Что вы считаете «фактическим именем»? getColumnName() возвращает исходное имя столбца (или, для этой базы данных, выражение), в то время getColumnLabel как возвращает ‘label’ (псевдоним или исходное имя столбца, если псевдоним не используется). В JDBC почти во всех случаях вы должны использовать getColumnLabel .

Ответ №1:

Для выражений меткой столбца по умолчанию является полное выражение.

В примере показано выражение (оно же производный столбец *) с пользовательской меткой ( as C ), и это то, что возвращается клиенту. Это стандартное поведение SQL.

В связи с этим все выражения обрабатываются одинаково, а приведения типов не имеют специальной обработки, которая позволила бы «увеличить исходный столбец».

Короче говоря: вы должны рассматривать ColumnLabel в качестве предполагаемого имени столбца.

Если вы абсолютно хотите / должны получить базовый столбец из результирующего набора, и вас устраивают все ограничения, тогда вы можете вручную проанализировать результат getColumnName и выбрать все, что находится в скобках любой функции приведения.

Например, если вы получаете TO_BIGINT( abc ) , вы ищете все, что находится между ( и ) . Это количество деталей, которые вы можете извлечь из результирующего набора.