В JDBC ResultSet, что должно произойти, когда getLong () или getShort () называют на международном столбце результата?

Скажите, что у меня есть JDBC ResultSet, и я называю getLong () или getshort () метод.

Для какого из следующих типов SQL {SMALLINT, INT, BIGINT} я должен стать длинным, и для которых типов я должен получить ошибку?

Другими словами, если бы у меня есть INT, и я хочу SMALLINT (Короткое), я получил бы его, или я получу ошибку? Точно так же, если бы я имею INT и хочу BIGINT (длинное), я получил бы его, или я получу ошибку?

Javadoc (упомянули ниже), не говорит ничто.

общедоступный длинный getLong (интервал columnIndex) бросает SQLException

Retrieves the value of the designated column in the current row

из этого ResultSet возражают как длинное на языке программирования Java.

Parameters:
    columnIndex - the first column is 1, the second is 2, ... 
Returns:
    the column value; if the value is SQL NULL, the value returned is 0 
Throws:
    SQLException - if a database access error occurs
8
задан Uri 13 May 2010 в 18:52
поделиться

4 ответа

Из раздела Извлечение значений из наборов результатов учебников по Java:

JDBC допускает большую свободу действий в отношении того, какие методы getXXX вы можете использовать для извлечения различных типов SQL. Например, метод getInt можно использовать для получения любого из числовых или символьных типов. Данные, которые он получит, будут преобразованы в int; то есть, если тип SQL - VARCHAR, JDBC попытается разобрать целое число из VARCHAR. Метод getInt рекомендуется использовать только для получения типов SQL INTEGER, однако он не может быть использован для типов SQL BINARY, VARBINARY, LONGVARBINARY, DATE, TIME или TIMESTAMP.

Я интерпретирую это как то, что данные будут принудительно обработаны. Это должно работать нормально, если это апкаст, но я ожидаю потенциальной потери точности (естественно), если, например, вы читаете значение LONG, используя getInt(). Я ожидаю, что при попытке прочитать текст с помощью getInt() будет выброшено исключение.

10
ответ дан 5 December 2019 в 12:08
поделиться

Он превратит его в длинный, и все будет в порядке.

Вы получите сообщение об ошибке, если попытаетесь получить длинное значение из строки, содержащей «Боб», или какого-либо другого поля, которое не может быть легко преобразовано в длинное.

2
ответ дан 5 December 2019 в 12:08
поделиться

В спецификации ничего не говорится об этом поведении. Это полностью зависит от реализации драйверов.

С помощью MySQL Connector вы можете получить почти что угодно, похожее на число, если оно имеет допустимый числовой формат и находится в диапазоне от long. Null / False также возвращаются как 0.

1
ответ дан 5 December 2019 в 12:08
поделиться

Это зависит от реализации. В спецификации сказано, что реализация ResultSet может поддерживать такое преобразование, и вы можете проверить это, вызвав DataBaseMetaData.supportsConvert(int fromType, int toType) (раздел 15.2.3.1 спецификации для реализаторов 4.0).

Лучше всего не полагаться на это поведение, а проверить ResultSetMetaData на правильный тип.

1
ответ дан 5 December 2019 в 12:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: