Определяет ли спецификация JDBC, что происходит, если вы вызываете `ResultSet.getObject (String)` для запроса с конфликтующими именами столбцов? - PullRequest
2 голосов
/ 25 сентября 2019

Я нашел SQL-запрос в некотором коде Java, который выглядит следующим образом:

SELECT * FROM tableA JOIN tableB ON ...

И tableA, и tableB содержат поле с именем id и код Java, который выполняет этот запросэто:

Integer id = (Integer)rs.getObject("id");

Есть ли в спецификации JDBC что-нибудь сказать о том, какое значение поля будет возвращено?Я не смог найти ничего, что говорит так или иначе.Я вижу, что некоторые базы данных выдают ошибку , но MySQL / MariaDB (база данных используется здесь) не жалуются, и возвращаемое значение кажется tableA.id, или "крайним левым" полем с именем "id ".

Я спрашиваю, есть ли определенное поведение в этом случае, или это зависит от базы данных и / или драйвера JDBC, чтобы решить, как себя вести.

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

1 Ответ

4 голосов
/ 25 сентября 2019

Документация API ResultSet отвечает на ваш вопрос:

Имена столбцов, используемые в качестве входных данных для методов получения, чувствительны к регистру.Когда метод получателя вызывается с именем столбца и несколько столбцов имеют одинаковое имя, будет возвращено значение первого соответствующего столбца.

Документ Спецификация JDBC 4.3 в документераздел 15.2.3 Извлечение значений также говорит:

Столбцы нумеруются слева направо, как они появляются в списке выбора запроса, начиная с 1.

Метки столбцовМетоды-получатели не чувствительны к регистру.Если список выбора содержит один и тот же столбец более одного раза, будет возвращен первый экземпляр столбца.

Индекс первого экземпляра метки столбца можно получить с помощью метода findColumn.Если указанный столбец не найден, метод findColumn выдает SQLException.

Итак, если в наборе результатов есть несколько столбцов с одинаковым (без учета регистра (!)) Именем, товозвращается значение первого соответствующего столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...