Pergunta

Eu quero saber se é uma boa idéia para exceção captura com base no índice exclusivo do SQL em Java.

Eu quero pegar uma exceção como 'entrada duplicada para 1-0' Se sim, então lidar com exceção de outra forma inserir corretamente na tabela de banco de dados?

Foi útil?

Solução

Eu digo que você não faça isso, por duas razões:

  • as mensagens de erro são um pouco claro: ERRO 1062 (23000): Duplicate entry 'xxx' para a chave 1 . Você é sempre 100% de certeza que chave é 1?
  • encaixar em você para um fornecedor de banco de dados específico

Acho que é mais simples de transactionally :

  • verificação da existência de linha;
  • lançar uma exceção se a linha já existe;
  • inserir a nova linha.

problemas Desempenho :

Eu digo medida duas vezes, corte uma vez . Perfil o uso para o seu caso de uso específico. Topo da minha cabeça, eu diria que o desempenho não será um problema, exceto para os cenários de uso pesado db.

A razão é que uma vez que você executar uma SELECT sobre essa linha específica, seus dados serão colocados nos caches de banco de dados e imediatamente usado para verificação de inserção feita no índice para a instrução INSERT. Também tendo em mente que este acesso é apoiado por um índice leva à conclusão de que o desempenho não será um problema.

Mas, como sempre, fazer medida.

Outras dicas

Eu não vejo por que não. Provavelmente é mais eficiente do que executar uma consulta antes da inserção. É provavelmente melhor para pegar o código de erro da exceção em vez de reconhecer a mensagem de erro, no entanto.

Você pode usar o comando REPLACE. Ele insere atualizações / baseados na existência do registro. E sua atômica também enquanto consulta, em seguida, inserir / atualizar não é. Depende do que você quer fazer se você detectar a violação de chave?

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