Melvin Cowznofski: try-catch Block bei Dateanbank-Interaktionen

Hallo,

wenn ich an einem Skript schreibe, wo via PDO auf eine MySQL Datenbank zugegriffen wird, soll ja mit try-catch Blöcken gearbeitet werden, um Fehler abzufangen.

Wenn ich mit dem Schreiben einer Anwendung fertig bin, alles funktioniert und der Code nicht mehr verändert wird, spricht dann irgend etwas dagegen, den catch-Block zu entfernen und dieses Procedere nur in der Entwicklungsphase einzusetzen? Oder gibt es ein Argument dafür, diesen "Notausstieg" dauerhaft im Skript zu belassen?

Mit lieben Grüßen

Melvin Cowznofski

--

Melvin Cowznofski
What – me worry?
  1. Hallo,

    try-catch Blöcke

    sind nur bedingt Methoden für das Debuggen von Programmen, sondern sind gedacht für stabile Programme. Z.B. um sicherzustellen, dass auf die DB nur zugriffen wird, wenn sie auch erreichbar ist. Das kann ja auch nach der Entwicklungsphase mal der Fall sein.

    Gruß
    Kalk

    1. Hallo Kalk,

      Z.B. um sicherzustellen, dass auf die DB nur zugriffen wird, wenn sie auch erreichbar ist.

      OK, das kann ich nachvollziehen. Dies würde dann aber nur einen try-catch-Block bei der Verbindung zur Datenbank betreffen, nicht aber zB. einen try-catch-Block um eine Datenbankinteraktion, wo zB. via PDO irgend ein SQL Query ausgeführt wird, oder?

      Mit lieben Grüßen

      Melvin Cowznofski

      --

      Melvin Cowznofski
      What – me worry?
      1. Tach!

        Z.B. um sicherzustellen, dass auf die DB nur zugriffen wird, wenn sie auch erreichbar ist.
        OK, das kann ich nachvollziehen. Dies würde dann aber nur einen try-catch-Block bei der Verbindung zur Datenbank betreffen, nicht aber zB. einen try-catch-Block um eine Datenbankinteraktion, wo zB. via PDO irgend ein SQL Query ausgeführt wird, oder?

        Bei oder vor jeder Aktion kann die Datenbank aussteigen. Ein erfolgreiches Connect gibt keine Sicherheit, dass danach nicht irgendwas kaputtgeht. Und es können Fehler auftreten, mit denen du gar nicht gerechnet hast.

        dedlfix.

        1. Hallo

          Und es können Fehler auftreten, mit denen du gar nicht gerechnet hast.

          Und wahrscheinlicher sogar: vermutlich sollen _Benutzer_ dein Programm verwenden!

          Gruß
          Kalk

        2. Hallo dedlfix, hallo Kalk,

          OK, also drin lassen. Ich werde Euren Ratschlag befolgen!
          Danke für die Antwort und die Hilfe!

          Mit lieben Grüßen

          Melvin Cowznofski

          --

          Melvin Cowznofski
          What – me worry?
  2. hi,

    wenn ich an einem Skript schreibe, wo via PDO auf eine MySQL Datenbank zugegriffen wird, soll ja mit try-catch Blöcken gearbeitet werden, um Fehler abzufangen.

    Wenn ich mit dem Schreiben einer Anwendung fertig bin, alles funktioniert und der Code nicht mehr verändert wird, spricht dann irgend etwas dagegen, den catch-Block zu entfernen

    Ooopsala, hier müsstest Du ja den Code ändern ;)

    (Und dann knallts nach dem Deployment)

    MfG

  3. Hallo,

    wenn ich an einem Skript schreibe, wo via PDO auf eine MySQL Datenbank zugegriffen wird, soll ja mit try-catch Blöcken gearbeitet werden, um Fehler abzufangen.

    Wenn ich mit dem Schreiben einer Anwendung fertig bin, alles funktioniert und der Code nicht mehr verändert wird, spricht dann irgend etwas dagegen, den catch-Block zu entfernen und dieses Procedere nur in der Entwicklungsphase einzusetzen? Oder gibt es ein Argument dafür, diesen "Notausstieg" dauerhaft im Skript zu belassen?

    Hallo erstmal.
    Ich möchte hier noch etwas ergänzen: Exceptions sind - wie der Name sagt - Ausnahmen, die du behandeln kannst, aber nicht musst. Je nach Sprache bist du möglicherweise leider gezwungen, Exceptions zu behandeln z.B. bei Checked Exceptions in Java. In diesem Fall hast du entweder die Möglichkeit, die Exception sofort wieder zu schmeißen, oder etwas wie sneaky rethrow zu verwenden.

    Generell sei gesagt: Exceptions sind eigentlich dafür, dass man sich NICHT um sie kümmern muss. Sonst wären es Rückgabewerte der aufgerufenen Funktion. Soll heißen: entweder der Programmierer (also du), weiß ganz genau, wie er mit dem Auftreten einer Exception umzugehen hat, oder er weiß es nicht.
    Wenn er es weiß, sollte er die Exception mit try/catch fangen und reagieren. In deinem Fall wäre das also beispielsweise im Falle eines fehlgeschlagenen Verbindungsaufbaus oder bei einem fehlerhaften Absetzen einer Aktion (z.B. Insert oder Update) weil die Datenbank z.B. down ist, könntest du das per try/catch diese Exception abfangen und dann im catch Block eine neue Verbindung zu einer Backup-Datenbank aufmachen und mit dieser weiterarbeiten. Das wäre _eine_ Möglichkeit.

    Wenn du aber - und so liest es sich - keinen "Backup-Plan" hast und das Programm in dem Fall einfach nen Fehler ausspucken und abbrechen soll, dann solltest du gar kein try/catch verwenden. Genau dafür sind Exceptions nämlich da: wenn du an dieser Stelle nicht weißt, wie du mit dieser Ausnahmesituation umzugehen hast, dann wird sie sofort weiter an die nächst höhere aufrufende Funktoion weitergereicht. Solange, bis am Ende beispielsweise bei Java die JVM die Exception handelt und das Programm mit einer entsprechenden Fehlermeldung abbricht. Es ist dir also geraten, auf der höchsten Ebene deines Programms alle Exceptions abzufangen und darauf zu reagieren, indem du den Fehler loggst, eine Meldung an den Nutzer ausgibst und das Programm kontrolliert beendest.

    Wichtig ist übrigens, dass es z.B. bei Java einige Typen von Fehlern (Typ Error) und Exceptions gibt (beide gehören zu den sogenannten Throwables), die teilweise kaum zu handeln sind, z.B. OutOfMemoryError. Solche solltest du am besten nicht abfangen, außer du weißt, was du tust.