ich habe in meinem Programm ein Textfeld, die Eingaben werden nach drücken eines Buttons in eine Datenbank geschrieben. Das Ganze habe ich in einen try/catch Block geschrieben:
Falls der Datensatz bereits vorhanden ist, wird eine Fehlermeldung ausgegeben. Ich möchte aber meine eigene Fehlermeldung ausgeben und habe den Code deshalb so umgeschrieben:
try {
eventDataProvider.commitChanges();
eventDataProvider.refresh();
}
catch (Exception ex) {
log("Error Description", ex); error("There is already a record at this time! ");
}
Funktioniert auch, das Problem ist nur, dass wenn garnichts in das Feld eingegeben wird auch diese Fehlermeldung ausgegeben wird. Für diesen Fall möchte ich aber eine andere Fehlermeldung ausgeben.
Kann mir jemand sagen wie ich eigene Fehlermeldungen erstelle? Ist es möglich die Standard-Fehlermeldung zu überschreiben? Oder kann ich eine Abfrage machen um welchen Fehler es sich handelt und dann die entsprechende Fehlermeldung ausgeben lassen?
Falls der Datensatz bereits vorhanden ist, wird eine Fehlermeldung ausgegeben.
[...]
Funktioniert auch, das Problem ist nur, dass wenn garnichts in das Feld eingegeben wird auch diese Fehlermeldung ausgegeben wird. Für diesen Fall möchte ich aber eine andere Fehlermeldung ausgeben.
Da diese beiden Situationen (Datensatz bereits vorhanden, Textfeld leer) aber durchaus nicht außergewöhnlich sind,
wäre es hier ohnehin angebrachter, dein Problem statt mit Exceptions mit einer einfachen if-else-Abfrage zu lösen.
Außerdem weißt du dann auch ganz genau, was nicht stimmt und kannst die Fehlermeldung dementsprechend anpassen.
was das pattern verhindern soll ist, dass die datenbank u.U. teure ausnahmen bei constraint violations durchlaufen muss. es gibt öfters mal fälle, in denen man daten eigentlich updaten will, aber den derzeitigen stand in der DB nicht kennt und im zweifel neu einfügen muss. daher erst ein update, dann ein insert.
wenn man irgendwelche frameworks wie hibernate o.ä. verwendet, hat man mit so basalen geschichten meißt eh nichts zu tun.
was das pattern verhindern soll ist, dass die datenbank u.U. teure ausnahmen bei constraint violations durchlaufen muss. es gibt öfters mal fälle, in denen man daten eigentlich updaten will, aber den derzeitigen stand in der DB nicht kennt und im zweifel neu einfügen muss. daher erst ein update, dann ein insert.
Weiss nicht ob es "sparsamer" ist erst ein Update auf einen Record zu versuchen denn es vielleicht gar nicht gibt, nur um danach ein Insert zu machen welcher fehlschlagen kann, weil der Record gerade von wem anders angelegt wurde.
wenn man irgendwelche frameworks wie hibernate o.ä. verwendet, hat man mit so basalen geschichten meißt eh nichts zu tun.
Das man einen doppelten UniqueContraint einfügen will und damit einen Fehler provoziert gibt es auch bei ORM.
Zumindest weiss ein ORM genau ob ein Update oder ein Insert nötig wäre.
es ist zumindest sparsamer, als der umgekehrte weg. erst ein insert zu versuchen, alle fehler aufzufangen und dann ein update zu fahren. fehlschlagen kanns dann immer noch, aber das ist halt pech.