Hallo! Bin gerade in der Vorbereitungsphase für eine Datenbank klausur . bei folgender aufgabe komm ich nicht mehr weiter, bitte um hilfe! vielen dank im voraus!
In SQL hat man die Anweisungen INSERT und UPDATE. In einem Programm möchte man diesen Unterschied oft verbergen. Hat man etwa eine Klasse Kunde mit den Attributen KNr und KName, dann möchte man eine Methode save der Klasse Kunde zum Speichern von Objekten programmieren, die selbst überprüft ob in der Datenbank ein INSERT oder ein UPDATE nötig ist. Wir nehmen an, dass in der DB eine Tabelle Kunde mit den Feldern KNr (Primärschlüssel) KName angelegt ist. Neulich habe ich zu diesem Thema in einer Multiuser-Anwendung folgenden Code gesehen (vereinfachter Pseudocode)
Pseudo code für Methode save der Klasse Kunde:
Connection con=Driver Manager.getConnection(...);
Statement stmt=con.createStatement();
ResultSet rs=stmt.execute Query ( „SELECT Knr FROM Kunde WHERE Knr=“this.Knr);
boolean found=
...wenn in rs die Knr gefunden wird, wird die Variable found auf true gesetzt
if (found) {
stmt.execute Update („Update Kunde set Kname=“ + this.kName + „WHERE Knr=“ + this.KNr);
} else {
stmt.execute Update („INSERT into Kunde values („ + this.KNr + „ ‚ ’“ + this.KName + „ ’ ) “);
}con.Close();
1. Worin besteht konzeptioneller Fehler im Vorgehen?
2. Wie kann man das Vorgehen verbessern?
In SQL hat man die Anweisungen INSERT und UPDATE. In einem Programm möchte man diesen Unterschied oft verbergen. Hat man etwa eine Klasse Kunde mit den Attributen KNr und KName, dann möchte man eine Methode save der Klasse Kunde zum Speichern von Objekten programmieren, die selbst überprüft ob in der Datenbank ein INSERT oder ein UPDATE nötig ist. Wir nehmen an, dass in der DB eine Tabelle Kunde mit den Feldern KNr (Primärschlüssel) KName angelegt ist. Neulich habe ich zu diesem Thema in einer Multiuser-Anwendung folgenden Code gesehen (vereinfachter Pseudocode)
Pseudo code für Methode save der Klasse Kunde:
Connection con=Driver Manager.getConnection(...);
Statement stmt=con.createStatement();
ResultSet rs=stmt.execute Query ( „SELECT Knr FROM Kunde WHERE Knr=“this.Knr);
boolean found=
...wenn in rs die Knr gefunden wird, wird die Variable found auf true gesetzt
if (found) {
stmt.execute Update („Update Kunde set Kname=“ + this.kName + „WHERE Knr=“ + this.KNr);
} else {
stmt.execute Update („INSERT into Kunde values („ + this.KNr + „ ‚ ’“ + this.KName + „ ’ ) “);
}con.Close();
1. Worin besteht konzeptioneller Fehler im Vorgehen?
2. Wie kann man das Vorgehen verbessern?
Comment