Pergunta

Eu tive realmente um problema enorme recentemente que me levou muito tempo para depurar. Eu tenho uma instrução de atualização que atualiza 32 colunas na tabela. Eu fiz isso com PreparedStatement. Acidentalmente eu apaguei chamada um setParameter () para atualização não pôde ser concluído com êxito.

Eu tenho exceção de JDBC (Apache Derby) dizendo: "No leas um parâmetro não for inicializado" e não foi capaz de descobrir qual parâmetro não está definido desde motorista não dizer nada sobre o nome ou o número ordinal de pelo menos primeiro parâmetro que não está definido ...

Eu estava googleing sem sucesso por algum utilitário que irá produzir planície SQL idade fora da declaração preparada (quase-acabado). Ajudaria muito em situações como esta, desde que eu será capaz de ver o que não está definido.

tem ninguém enfrentou esse problema? Tem alguma solução?

Foi útil?

Solução

Uma vez que os parâmetros em uma declaração preparada são apenas uma lista ou mapa no objeto PreparedStatement você deve ser capaz de inspecionar os valores.

Além disso, você poderia escrever um wrapper muito simples ao seu redor driver JDBC que cria PreparedStatements embrulhadas e registra todos os parâmetros e definições de lá antes de realmente executar a instrução.

Outras dicas

Tenha um olhar em P6Spy . Ele pode interceptar todas as chamadas JDBC e registrá-los antes de encaminhá-los para o seu banco de dados.

Como alternativa, pensar em usar molas JDBCTemplate que pode tirar um monte de seu clichê JDBC codificação e ajudar a evitar este tipo de erros. Você não precisa do resto do framework Spring para usar este bit.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top