JDBC setObject только с типом String

Я работаю с шаблоном JDBC (SPRING), который обертывает JDBC. во время выполнения все мои значения переменных (связываемые переменные) хранятся в виде строк (с некоторым распознаванием их фактического типа: bigint \ varchar и т. д.). Пока я использую setObject, я не уверен, нужно ли мне преобразовать значение переменной в ее реальный тип, или я могу отправить переменную в виде строки в setObject, и база данных преобразует ее в соответствии с именем столбца в базе данных (т. Е. если он сравнивается с BigInt, он преобразует строку в большой int, а затем запрос и т. д.)

Спасибо,


person user    schedule 03.08.2015    source источник
comment
Какая версия Spring?   -  person Jose Martinez    schedule 03.08.2015
comment
В настоящее время 4.2. почему это имеет значение?   -  person user    schedule 03.08.2015
comment
Скорее всего, нет, просто хочу убедиться, что это не очень старая версия, прежде чем я дам ответ.   -  person Jose Martinez    schedule 03.08.2015
comment
В каком классе вы вызываете setObject?   -  person Jose Martinez    schedule 03.08.2015
comment
На самом деле я не использую setObject, потому что использую SPRING API: public <T> T query(String sql, Object[] args, ResultSetExtractor<T> rse) throws DataAccessException надеюсь, что это имеет смысл   -  person user    schedule 03.08.2015
comment
Вы запускали какой-либо sql, чтобы увидеть, действительно ли переменная привязки String преобразуется в соответствующие ей значения db?   -  person Ankit    schedule 03.08.2015
comment
Вот реальный ответ: stackoverflow.com/a/32238912/3228998 По крайней мере, setObject (int, Object, java.sql. Типы. ДРУГОЕ) работает.   -  person op op opself    schedule 16.06.2021


Ответы (1)


Если я правильно понимаю ваш вопрос, я думаю, вы НЕ МОЖЕТЕ использовать setObject для передачи String, который будет преобразован в тип SQL, отличный от String (int, bigint).

Просмотрите этот вопрос. Ниже приведен ответ на этот вопрос.

Задача setObject - определить правильное преобразование в тип столбца. В документации setObject javadoc говорится: «Спецификация JDBC определяет стандартное отображение типов объектов Java в типы SQL. Данный аргумент будет преобразован в соответствующий тип SQL перед отправкой в ​​базу данных». Таким образом, он смотрит исключительно на тип Java переданного ему объекта и преобразует его в тип SQL. Таким образом, вы передаете ему String, и он преобразует его в подходящую varchar. Если вы хотите, чтобы setObject выполнял преобразование в другой тип, это является причиной дополнительного варианта setObject, который принимает целевой тип sql для преобразования, но это не помогает вашей ситуации, когда вы не знаете, какой целевой тип является.

person Jose Martinez    schedule 03.08.2015