Генерация SQL в JDBC в PreparedStatement - PullRequest
0 голосов
/ 23 марта 2009

Недавно у меня была действительно огромная проблема, которая заняла у меня много времени на отладку. У меня есть заявление об обновлении, которое обновляет 32 столбца в таблице. Я сделал это с PreparedStatement. Случайно я удалил один вызов setParameter (), поэтому обновление не может быть успешно завершено.

Я получил исключение из JDBC (Apache Derby), говорящего: «По крайней мере, один параметр не инициализирован» и не смог выяснить, какой параметр не установлен, так как драйвер не скажет вам ничего об имени или порядковом номере по крайней мере первый параметр, который не установлен ...

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

Кто-нибудь сталкивался с этой проблемой? Есть какое-нибудь решение?

Ответы [ 2 ]

2 голосов
/ 23 марта 2009

Посмотрите на P6Spy . Он может перехватывать все ваши вызовы JDBC и регистрировать их перед пересылкой в ​​вашу базу данных.

В качестве альтернативы, подумайте об использовании Springs JDBCTemplate, который может убрать многие из ваших стандартных JDBC-кодировок и помочь избежать подобных ошибок. Вам не нужна остальная часть среды Spring, чтобы использовать этот бит.

0 голосов
/ 23 марта 2009

Поскольку параметры в подготовленном операторе - это просто List или Map в PreparedStatement Object, вы должны иметь возможность проверять значения.

Также вы можете написать очень простой Wrapper вокруг вашего драйвера jdbc, который создает упакованные PreparedStatements и записывает все параметры и настройки перед тем, как фактически выполнить оператор.

...