Функция getMetaData () или getString () не прослушивает псевдонимы, указанные в моем SQL-запросе. Запрос SQL выполняется успешно.
Это часть моего запроса: SELECT o.id as o_id, o.package_id as o_package_id, o.client_id as o_client_id, o.reciever_id as o_reciever_id,
resultSet.getString(fieldname) работает только с id, package_id, client_id и т. д., Он не работает с o.id, o.package_id, o.client_id или именами полей, которые я дал им в запросе o_id, o_package_id, o_client_id.
Это вызывает проблему, у меня есть запрос с несколькими JOIN с двойными именами полей.
Как я могу получать данные по псевдонимам?
o.id не может работать как имя столбца, потому что столбец по-прежнему называется id. Работает ли JDBC Водитель (не "Java") с псевдонимом столбца, зависит от Водитель (а иногда и от драйвера версия)
@Kayaman InnoDB, JConnector 5.1
Используйте ResultSetMetadata.getColumnLabel, чтобы проверить возвращаемое "имя" столбца. Это будет псевдоним или имя столбца, если не указан псевдоним (AS), как определено в javadoc. И для информации в документации указано, что ResultSet.getString(String) будет использовать метку (то есть псевдоним, если он указан) для получения правильного столбца. Так что, если InnoDB не реализовал интерфейс полностью, это должно быть нормально.
Пожалуйста, покажите код, который вы используете. Как указывает AxelH, вы, вероятно, используете getColumnName вместо getColumnLabel. Значения извлекаются из набора результатов по метке столбца (!), А не по имени столбца.
Спасибо, @AxelH. getColumnLabel () не предоставляет никаких псевдонимов ... он возвращает все имена столбцов по умолчанию.
@MarkRotteveel Я использую getString() для получения данных, я не использую getColumnName() или getColumnLabel(). У меня уже есть названия / метки столбцов
Пожалуйста, предоставьте отрывок вашего кода. Этого не должно происходить (если JConnector правильно реализует интерфейс ResultSet). Обратите внимание, что ResultSet будет использовать ResultSetMetaData для получения индекса имени столбца. Поэтому, если ResultSetMetadata.getColumnLabel не показывает правильное имя, вы вообще не можете использовать псевдоним. Как было сказано ранее, вы все равно можете использовать вместо него индекс.
@axeH Я уже пробовал ResultSetMetadata.getColumnLabel. См. Мой предыдущий комментарий. Он не предоставляет никаких псевдонимов. Я не могу использовать индекс, как я сказал ранее: «Это вызывает проблему, у меня есть запрос с несколькими JOIN с двойными именами полей». Вот отрывок из моего кода: DBWrapper DBWrapper = new DBWrapper(); DBWrapper.initialize(); ResultSet resultSet = DBWrapper.executeQuery(query); System.out.println(resultSet.getString("co_rp_name")));
Пожалуйста, разместите весь соответствующий код в вашем вопросе. Размещение его в комментариях делает его нечитаемым, также учтите, что показанный запрос не содержит столбца с псевдонимом co_rp_name, поэтому получить такой столбец будет невозможно. До сих пор вам не удалось опубликовать воспроизводимый код, и вы не указали такие вещи, как версия точный драйвера MySQL Connector / J и MySQL, которые вы используете.




Это как-то связано с JConnector. заставить URL-адрес драйвера использовать useOldAliasMetadataBehavior как true (который имеет значение по умолчанию false в v5.1.6)
Должно получиться так:
url = "jdbc:mysql://localhost:3306/mydb?useOldAliasMetadataBehavior=true"
Какая база данных и драйвер? Конечно, вы всегда можете получить по позиционному атрибуту.