2013-05-06 6 views
5

Ich habe eine SQL-Anweisung, von der ich erwarte, dass sie eine Zeile zurückgibt, weil ich den Primärschlüssel übergebe. So sind meine Entscheidungen zuSollte ich EmptyResultDataAccessException abfangen?

  1. Wickeln Sie das queryForObject in einem try/catch, fangen EmptyResultDataAccessException und Rückkehr null
  2. Ändern Sie den Aufruf von queryForList und auspacken der Liste und (hoffentlich) Rückkehr die erste Element oder null.

Ich habe irgendwo gelesen die cathing eine EmptyResultDataAccessException, da es Laufzeitausnahme verlängert, ist eine schlechte Praxis.

Aber ich kann nichts falsches damit sehen.

Ich würde zu hören, Meinungen

+0

Wenn Sie einen Primärschlüssel übergeben, wie kommt es dann leer zurück? –

+1

Nun, es ist nicht, und es sollte nie so sein. "Sollte" das Schlüsselwort hier sein. – EdgeCase

Antwort

1

Die meiste Zeit habe ich in diese (mvc/ws) Ich lasse die Ausnahme ausgelöst werden, sondern die Ausnahme in einem Ausnahme-Resolver behandeln. Das Problem bei der Rückgabe von null ist, dass eine Anwendung davon abhängig ist und weiter unten, und Sie müssten später einen Null-Check durchführen, anstatt zu der Zeit, zu der erwartet wird, dass sie da ist. Dies kann zu Problemen führen, da möglicherweise nicht alle Entwickler die NULL-Prüfung durchführen, wenn dies erforderlich ist, und Sie dann später mit NPE arbeiten können. Je nachdem, welchen Anwendungstyp Sie schreiben, gibt es mehrere Möglichkeiten, die Ausnahme mithilfe eines Ausnahme-Resolvers abzufangen und zu behandeln. Mit einem Ausnahme-Resolver können Sie jede Ausnahme anders behandeln und dem Benutzer Feedback geben.

Hier ist eine Möglichkeit, es mit Feder mvc zu tun. Auf diese Weise können Sie einem Benutzer eine allgemeine Nachricht hinzufügen, wenn das Objekt mit dem Primärschlüssel nicht existiert. http://www.mkyong.com/spring-mvc/spring-mvc-exception-handling-example/

1

interessiert sein Ich denke, es ist durchaus akzeptabel ist diese Ausnahme zu fangen. Es ist die einzige Spring-Ausnahme, an der ich mich erinnern kann, aber ich habe gültige Anwendungsfälle, um einen Datensatz zu finden, der möglicherweise nicht existiert.