Frage

Ich möchte wissen, ob es eine gute Idee ist Ausnahme zu fangen basierend auf eindeutigen Index von SQL in Java.

ich will ‚für 1-0 doppelten Eintrag‘ eine Ausnahme wie fangen, wenn ja, dann ansonsten ordnungsgemäß in Datenbanktabelle behandelt Ausnahme einfügen?

War es hilfreich?

Lösung

ich sagen, dass Sie das nicht tun, aus zwei Gründen:

  • die Fehlermeldungen sind ein wenig unklar: ERROR 1062 (23000): Doppelte Eintrag 'xxx' für die Taste 1 . Sind Sie immer 100% sicher sind, welche Taste 1?
  • es sperrt in Dir zu einem bestimmten Datenbank-Anbieter

Ich finde es einfacher zu transaktions :

  • prüfen für Zeile Existenz;
  • eine Ausnahme aus, wenn die Zeile bereits vorhanden ist;
  • legen Sie die neue Zeile.

Leistungsprobleme :

Ich sage zweimal messen, einmal schneiden . Profil die Nutzung für Ihren spezifischen Anwendungsfall. Spitze von meinem Kopf Ich würde sagen, dass die Leistung wird kein Problem sein, mit Ausnahme der schweren db Nutzungsszenarien.

Der Grund dafür ist, dass, sobald Sie eine SELECT über diese bestimmte Zeile durchführen, werden seine Daten in der Datenbank Cache-Speicher platziert werden und sofort verwendet zum Einsetzen Überprüfung der Index für die INSERT Aussage gemacht. Auch wenn man bedenkt, dass dieser Zugang durch einen Index führt zu dem Schluss gesichert wird, die Leistung wird kein Problem sein.

Aber, wie immer, tun messen.

Andere Tipps

Ich sehe nicht, warum nicht. Es ist wahrscheinlich effizienter als eine Abfrage vor dem Einsatz ausgeführt wird. Es ist wahrscheinlich besser, um den Fehlercode der Ausnahme zu fangen, anstatt die Fehlermeldung zu erkennen, though.

Sie können den Befehl REPLACE verwenden. Es fügt / Updates auf die Existenz des Datensatzes basiert. Und sein Atom auch während Abfrage dann insert / update nicht. Es hängt davon ab, was wollen Sie tun, wenn Sie die Schlüsselverletzung erkennen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top