Если смотреть со 100% формальной точки зрения, возможно, небезопасно использовать setLong
для столбца INTEGER
. Спецификация JDBC 4.3 гласит, что setXXX
-методы (за исключением setObject
) соответствуют отображениям приложения B.2, в котором говорится, что Java long
отображается на SQL BIGINT
. Это зависит от того, может ли драйвер или база данных использовать значение BIGINT
со столбцом INTEGER
.
Спецификация JDBC 1.20 по этому вопросу гласит:
7.2.1 Соответствие типа данных параметрам IN
Методы PreparedStatement.setXXX не выполняют никаких общих данных.
преобразования типов. Вместо этого значение Java просто отображается на
соответствующий тип SQL (в соответствии с отображением, указанным в таблице 3 на
стр. 28) и это значение отправляется в базу данных.
Программист должен убедиться, что тип Java
каждого аргумента отображается на тип SQL, который совместим с SQL
тип данных, ожидаемый базой данных. Для максимальной мобильности
программисты, должны использовать типы Java, которые соответствуют точному SQL
типы, ожидаемые базой данных.
Если программистам требуются преобразования типов данных для параметров IN, они
может использовать метод PreparedStatement.setObject, который преобразует Java
Объект для указанного типа SQL перед отправкой значения в
базы данных.
Эта формулировка больше не присутствует в последних спецификациях JDBC, но ее намерение все еще применяется и определено в приложении B.2 в JDBC 4.3.
Однако на практике многие драйверы JDBC, включая MySQL Connector / J, поддерживают более широкий диапазон преобразований, аналогичный тому, который определен для setObject
в приложении B.5, хотя каждый драйвер имеет свои предостережения и причуды. Вот. Для Long
это означает, что getObject
может предназначаться TINYINT
, SMALLINT
, INTEGER
, BIGINT
, REAL
, FLOAT
, DOUBLE
, DECIMAL
, NUMERIC
, BIT
, BOOLEAN
, CHAR
, VARCHAR
, LONGVARCHAR
, и это - обычно - означает, что вы можете сделать то же самое с setLong
.
Это также обеспечивает единообразие с преобразованиями для getLong
, определенными в приложении B.6.
Есть ли у него какие-либо недостатки, зависит от реализации. Драйвер MySQL Connector / J имеет открытый исходный код, поэтому, если вы хотите узнать мельчайшие подробности: посмотрите на источник.
Однако если ваше приложение на самом деле использует long
, почему тип базы данных INTEGER
? Либо используйте BIGINT
в вашей базе данных, чтобы соответствовать вашему приложению, либо используйте int
в вашем приложении, чтобы соответствовать базе данных.