Informatik Quellcode?

1 Antwort

Die Funktion zeigt die schlechtestmögliche Art und Weise, die Anzahl von gesuchten Datensätzen zu zählen. Also im großen und ganzen zählt die Funktion, wie oft der Wert, der als "pID" übergeben wird, in der Spalte "bahnlinieID" in der Tabelle "gehoertZu" vorkommt.

Allerdings, wenn die Bahnlinie gefunden wird, gibt die Funktion die Anzahl + 1 zurück und wenn die Bahnlinie nicht gefunden wird, ist das Ergebnis -1.

Bei den gefragten Werten "L1", "L3" und "L5" kommt also 4, 2 und -1 raus.

Und man kann die Abfrage natürlich auch so umschreiben, dass der SQL-Server selbst zählt, wie oft der Wert in der Tabelle steht.

db.executeStatement("SELECT COUNT(*) AS Anzahl FROM gehoertZu WHERE bahnlinieID = '" + pID + "');

Optimalerweise solltest du die pID nicht direkt in den Abfragestring schreiben, weil die Abfrage dadurch anfällig für SQL-injections wird. Ich glaube aber nicht, dass ihr schon PreparedStatements drangenommen habt.

Rischke 
Fragesteller
 05.04.2024, 17:36

Danke dir, das war echt meega hilfreich, hab jetzt eigentlich fast alles verstanden.

Eine Frage hab ich noch, und zwar da wo du die neue SQL-Anweisung aufgeschrieben hast, wozu ist der Teil nach "bahnlinieID =", also warum schreibt man " ' " + pID + " ' " und nicht einfach nur "pID"? Oder soll ich noch was einfügen in die Anführungszeichen vor und nach dem pID?

Sorry, bin manchmal echt lost in Informatik

0
daCypher  08.04.2024, 07:57
@Rischke

Die SQL-Anweisung ist so erstmal nur ein String. Wenn du dem Server eine Anfrage mit der jeweiligen bahnlinieID schicken willst, musst du sie in den String einfügen. (Ich sehe grad, dass ich noch Anführungszeichen vergessen hab. Die müssten da noch rein, damit das funktioniert

Also die Bedingung, die du an den SQL-Server schickst, sieht erstmal so aus:

WHERE bahnlinieID = '';

Jetzt willst du zwischen die einfachen Anführungsstriche noch die Bahnlinie einfügen, nach der gesucht wird. Wenn du da jetzt einfach pID reinschreiben würdest, also so:

WHERE bahnlinieID = 'pID';

würde der Server nach dem Wort "pID" suchen, aber eben nicht nach dem Wert, der in der Variablen pID steht, also z.B. "L1" oder "L3". Deshalb muss man nach dem einfachen Anführungszeichen den String beenden (das geht mit doppelten Anführungszeichen) und mit plus den Wert von pID einfügen.

"... WHERE bahnlinieID = '" + pID + "';"

Alternativ kannst du in Java auch mit String.format() eine Stelle im String bestimmen, wo ein Wert eingefügt werden soll:

db.executeStatement(String.format("SELECT COUNT(*) AS Anzahl FROM gehoertZu WHERE bahnlinieID = '%s';", pID));

Dadurch wird das %s ausgetauscht durch pID.

Oder was im Fall von SQL noch besser wäre, sind preparedStatements, die ähnlich funktionieren, wie String.format, nur dass die Abfrage auf dem SQL-Server zusammengefügt wird. Dadurch kann man keine SQL-Injections mehr machen (eine SQL-Injection ist, wenn man den Wert von pID so ändert, dass noch eine andere Abfrage ausgeführt wird, mit der man evtl. Zugriff auf das System kriegen kann)

var prep = db.prepareStatement("SELECT COUNT(*) AS Anzahl FROM gehoertZu WHERE bahnlinieID = ?;");
prep.setString(1, pID); // Das ? in der Abfrage wird durch die pID getauscht
prep.executeQuery();
0