Tach!
- Sollte man Try-Catch-Blöcke bei jeder Aktion auf die Databank machen? Ene Aktion meine ich
prepare()
,execute()
,setAttribute()
,fetch()
)?Es empfiehlt sich überall da, wo Fehler auftreten können, mit ihnen zu rechnen und eine Behandlung einzubauen. Bei voneinander abhängigen Geschichten ist es wenig sinnvoll, jede einzelne in ein eigenes try-catch einzurahmen, weil man ja beim Auftreten eines Fehler sowieso nicht fortfahren kann.
Nachtrag: Die Frage ist dabei, wo man am besten die Behandlung einbaut. Das geht einher mit der Frage, was man im Falle eines Falles zu tun gedenkt. Prinzipiell kann der Code, der die Datenbankabfrage durchführt, die Exception fangen. Aber was macht er dann damit? Der soll sich um die Datenbankabfrage kümmern und keine Ahnung von der Ausgabe haben. Also sollte der Code auch keine Ausgabe produzieren. Das Programm per die() abbrechen soll er auch nicht, weil die Prgrammablaufsteuerung nicht zu seinen Aufgeben gehört. Kann er dann überhaupt was sinnvolles mit der Exception machen, als sie nur an den Aufrufer durchzureichen, damit der sich angemessen darum kümmern kann? Der Aufrufer muss ja wissen, warum er die Daten braucht und was er zu tun gedenkt, wenn er keine bekommt. Das liefe dann darauf hinaus, dass man die Exception lediglich fängt und neu wirft.
Man könnte als Aufgabe sehen, dass die Exception geloggt wird, bevor sie erneut in Richtung Aufrufer geworfen wird. Aber warum sollte sich der Datenbank-Code darum kümmern? Der muss nicht wissen, welches Logging-Management der Verwender benutzt.
Gegebenenfalls kann man die Exception ändern, wenn man dafür einen Grund findet, oder ein weiteres Exception-Objekt erstellen mit der ursprünglichen als Previous Exception. Sowas kann man machen, wenn man die Exceptions verschiedener Datenbanktreiber vereinheitlichen möchte. Also wenn man eine zusammenfassende DBException statt MysqlException nebst PostgresException nebst OracleException oder dem zu allgemeinen Objekt der Klasse Exception haben möchte, falls man gedenkt, all diese DBMSe zu unterstützen (jetzt mal so als Beispiel gesagt, unabhängig davon, ob die entsprechenden Treiber Exceptions werfen oder nicht).
dedlfix.