2009-06-22 8 views
2

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

Ich möchte eine Ausnahme wie 'doppelten Eintrag für 1-0' fangen, wenn ja, dann handle Exception ansonsten in der Datenbanktabelle richtig einfügen?

+0

Sie versuchen also, eine Einfügung für eine eindeutige Spalte zu erstellen, ohne zu überprüfen, ob der Wert bereits vorhanden ist. Wenn Sie eine Ausnahme erhalten, wissen Sie, dass ein Duplikat vorhanden ist. Ist das richtig ? – Babar

+0

ja. Ich möchte überprüfen, ob nur –

Antwort

2

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

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

Ich finde es einfacher zu transaktions:

  • Scheck auf der Existenz der Zeile;
  • eine Ausnahme auslösen, wenn die Zeile bereits existiert;
  • Die neue Zeile einfügen.

Performance-Probleme:

ich sagen zweimal messen, einmal schneiden. Profilieren Sie die Nutzung für Ihren spezifischen Anwendungsfall. Top of my head würde ich sagen, dass die Leistung kein Problem sein wird, außer für die 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-Caches und sofort zum Einsetzen Überprüfung der Index für die INSERT Aussage gemacht verwendet werden darf. Wenn man bedenkt, dass dieser Zugang durch einen Index unterstützt wird, führt dies zu der Schlussfolgerung, dass die Leistung kein Problem darstellt.

Aber wie immer messen.

+0

Ich stimme dir zu Robert. gut, aber wird es nicht die Leistung beeinflussen, wie jedes Mal, obwohl der Datensatz nicht existiert, muss es überprüfen und dann einfügen. Auch auf der anderen Seite, wie Skaffman sagte, wird es leicht sein, die Ausnahme zu fangen, da ich Java nicht kenne, kann mir jemand erklären, dass das eine einfache Möglichkeit sein wird, Ausnahme zu fangen, weil die mehr Indizierung die Leistung reduzieren wird. –

+0

Bitte beachten Sie mein Update. –

+0

Danke für Ihre Eingabe. –

1

Ich sehe nicht warum nicht. Es ist wahrscheinlich effizienter als eine Abfrage vor dem Einfügen auszuführen. Es ist wahrscheinlich besser, den Fehlercode der Ausnahme abzufangen, als die Fehlermeldung zu erkennen.

+0

Wenn Sie Spring verwenden, übersetzt der JDBC-Xception-Translator die SQLException in eine DataIntegrityViolationException. Es könnte netter sein, das anstelle der rohen Ausnahme zu erfassen. – skaffman

1

Sie könnten den REPLACE-Befehl verwenden. Es fügt/aktualisiert basierend auf der Existenz des Datensatzes. Und seine atomare auch, während Abfrage dann einfügen/aktualisieren ist nicht. Es hängt davon ab, was Sie tun möchten, wenn Sie die Schlüsselverletzung feststellen?