Question

Je souhaite savoir s'il est judicieux de capturer une exception basée sur un index unique de SQL en Java.

Je veux intercepter une exception telle que "entrée en double pour 1-0" si c'est le cas, puis gérer l'exception, sinon insérer correctement dans la table de la base de données?

Était-ce utile?

La solution

Je dis que vous ne faites pas cela, pour deux raisons:

  • les messages d'erreur ne sont pas clairs: ERREUR 1062 (23000): entrée en double 'xxx' pour la clé 1 . Êtes-vous toujours sûr à 100% de la clé 1?
  • il vous verrouille chez un fournisseur de base de données spécifique

Je trouve plus simple de transiger :

  • vérifier l'existence de la ligne;
  • lève une exception si la ligne existe déjà;
  • insérez la nouvelle ligne.

Problèmes de performances :

Je dis mesurer deux fois, couper une fois . Profil de l'utilisation pour votre cas d'utilisation spécifique. Tout d'abord, je dirais que les performances ne seront pas un problème, sauf dans les scénarios d'utilisation intensive de la base de données.

La raison en est qu'une fois que vous effectuez un SELECT sur cette ligne spécifique, ses données sont placées dans les caches de la base de données et immédiatement utilisées pour le contrôle d'insertion effectué sur l'index. pour l'instruction INSERT . Gardez également à l'esprit que cet accès est soutenu par un index, ce qui permet de conclure que les performances ne seront pas un problème.

Mais, comme toujours, mesurez.

Autres conseils

Je ne vois pas pourquoi pas. C'est probablement plus efficace que de lancer une requête avant l'insertion. Il est probablement préférable de détecter le code d'erreur de l'exception plutôt que de reconnaître le message d'erreur.

Vous pouvez utiliser la commande REPLACE. Il insère / met à jour en fonction de l'existence de l'enregistrement. Et son atomique aussi alors que requête puis insérer / mettre à jour ne est pas Cela dépend de ce que vous voulez faire si vous détectez la violation de clé?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top