Die Aufgabe
10) JDBC: Gegeben sei folgende Methode eines Servlets. (12 Punkte)
public static void tuwas (int x[], PrintStream out) { try { Connection cn = DBClass.openNewConnection(); // Hilfsklasse for (int i = 0; i < x.length; i++) { String query = "SELECT * FROM Auftritt WHERE anr=" + x[i]; Statement s = cn.createStatement(); ResultSet rs = s.executeQuery(query); while (rs.next()) { out.println(rs.getString("ort")+","+rs.getDate("datum")); String de = "DELETE FROM Buchung WHERE anr=" + x[i]; if ( check(rs.getInt("dauer" )) ) { Statement s2 = cn.createStatement(); s2.executeUpdate(de); } } } } catch (Exception e) { System.out.println("Error: "+ e); }}a) Welche Informationen können Sie dem Code entnehmen? Welche Aufgabe erfüllt diese Methode?
b) Welchen unbedingt zu vermeidenden Fehler enthält der angegebene Code?
c) Darüber hinaus hat der Entwickler eine ganze Reihe weiterer unschöner/problematischer Dinge im Code eingebaut. Welche?
d) Lösen Sie das Problem etwas besser! – Die Schnittstelle der Methode muss aber erhalten bleiben. Es sollen auch keine weiteren Methoden/Klassen erzeugt werden.
JDBC (Java Database Connectivity) ist die Java-Schnittstelle zu Datenbanken. Die Methode benutzt drei ihrer Typen: Connection (Verbindung), Statement (Anweisung) und ResultSet (Ergebnis einer Abfrage).
Gefragt ist: (a) was die Methode tut, (b) ihr schlimmster Fehler, (c) weitere Schwächen, (d) eine bessere Fassung mit demselben Kopf und ohne neue Methoden oder Klassen.
Zwei kleine Abweichungen von der Musterlösung in (d): Die Ausgabe bleibt bei "," wie im Original (die Musterlösung schreibt ", "), und gefangen wird nur SQLException statt Exception. Beides ist in Schritt 15 und 16 begründet.
- Den Code von oben nach unten lesen.
- Den schwersten Fehler benennen.
- Weitere Schwächen sammeln.
- Die Methode neu schreiben.