SQL: Kann die AUfgabe nicht lösen!

babuschka

Top Contributor
Hallo Community,
ich bin absoluter anfänger deshalb habe ich sehr viele Schwierigkeiten, konnte die Aufgabe nicht richtig lösen.

folgende Aufgabe ist gestellt:

Sie haben in einer Datenbank-Tabelle Students Datensätze, die für jeden Studenten Name,Vorname,MatrikelNr und Note beinhalten. Schreiben Sie ein syntaktisch korrektes Programm, das

-Eine Verbindung zur Datenbank herstellt (erledigt)

-Mittels SELECT NAME,VORNAME,MATNR, NOTE FROM STUDENTS alle Datensätze ausliest und in eine Datei students.out ausgibt (teilweise erledigt)

-Den Durchschnitt aller Noten berechnet und auf dem Bildschirm ausgibt

Meine Lösung:

Java:
package sql2;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class Main {

    public static void main(String[] args) {
        datenAusgeben();
        
    }
    
    public static void datenAusgeben() {

    try {
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/uni_db", "root", "12345");
Statement stmt = con.createStatement();
ResultSet rslt = stmt.executeQuery("SELECT Name,Vorname,MatNr,Note FROM Students");

stmt.close();
con.close();
}
catch (Exception e) {
System.out.println(e.getMessage());
}
}
}


zu 2.) wie kann ich die Daten Name,Vorname,MatNr, Noten etc. von allen Studenten auslesen lassen?

zu 3.) Wie kann ich die Notenberechnen lassen? Wo müssen die Anweisungen genau hin? Wie sieht es aus also wie tut man programmieren, damit alle Noten addiert werden?
 
Zuletzt bearbeitet von einem Moderator:
Ich würde sagen du solltest das ResultSet durchlaufen 😀

Hier ein Beispiel:
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 23.4 Eine Beispielabfrage

Java:
package sql2;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class Main {

    public static void main(String[] args) {
        datenAusgeben();
        
    }
    
    public static void datenAusgeben() {

    try {
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/uni_db", "root", "12345");
Statement stmt = con.createStatement();
ResultSet rslt = stmt.executeQuery("SELECT Name,Vorname,MatNr,Note FROM Students");

while(rslt.next()){
    System.out.println("Name"+rslt.getString(1)+" Vorname: "+rslt.getString(2)+" MatNr: "+rslt.getInt(3)+" Note: "+rslt.getDouble(4));
}
stmt.close();
con.close();
}
catch (Exception e) {
System.out.println(e.getMessage());
}
}
}

stimmt es so?
 
was soll daran stimmen, was ist deine Frage?
ob der Code funktioniert kannst du doch hoffentlich selber ausprobieren, vorhandene DB-Verbindung vorausgesetzt,
ob er der Aufgabenstellung entspricht ist Interpretation, bisschen selber nachdenken,
ist da nicht von einer Datei die Rede?

und zu den Noten, 'also wie tut man programmieren', hmm, keinerlei Ideen? du hast da eine Schleife in der je eine Note drankommt,
ist doch nun kein Thema, etwa diese Noten zusammenzuaddieren ( summe += aktuellerWert) , dazu die Anzahl zu zählen, am Ende teilen,
oder auch die Noten erstmal in eine Liste einzufügen, um später damit zu arbeiten,

du sollst nicht zaubern sondern einfache Dinge umsetzen, das ist oft nicht mehr als Lego für einen 5jährigen, nur eben in Java-Sprache formuliert
 
was soll daran stimmen, was ist deine Frage?
ob der Code funktioniert kannst du doch hoffentlich selber ausprobieren, vorhandene DB-Verbindung vorausgesetzt,
ob er der Aufgabenstellung entspricht ist Interpretation, bisschen selber nachdenken,
ist da nicht von einer Datei die Rede?

und zu den Noten, 'also wie tut man programmieren', hmm, keinerlei Ideen? du hast da eine Schleife in der je eine Note drankommt,
ist doch nun kein Thema, etwa diese Noten zusammenzuaddieren ( summe += aktuellerWert) , dazu die Anzahl zu zählen, am Ende teilen,
oder auch die Noten erstmal in eine Liste einzufügen, um später damit zu arbeiten,

du sollst nicht zaubern sondern einfache Dinge umsetzen, das ist oft nicht mehr als Lego für einen 5jährigen, nur eben in Java-Sprache formuliert


Ob mit dieser Code: Die werte ausgegeben werden war die frage! Ja mit For/while schleife kann man das berechnen lassen aber SQL habe ich zum ERSTEN mal gemacht ich weis nicht wie das in diesem FALL geht. Ist ja kein normales JAVA das alles in SQL umzusetzen fällt mir natürlich schwer da ich ANFÄNGER BIN! Es gibt halt Menschen die das schneller begreifen und manche brauchen halt LÄNGER wie ich z.b.!

Java:
while(rslt.next()){
    System.out.println("Name"+rslt.getString(1)+" Vorname: "+rslt.getString(2)+" MatNr: "+rslt.getInt(3)+" Note: "+rslt.getDouble(4));
}
 
Zuletzt bearbeitet von einem Moderator:
was soll daran stimmen, was ist deine Frage?
ob der Code funktioniert kannst du doch hoffentlich selber ausprobieren, vorhandene DB-Verbindung vorausgesetzt,
ob er der Aufgabenstellung entspricht ist Interpretation, bisschen selber nachdenken,
ist da nicht von einer Datei die Rede?

und zu den Noten, 'also wie tut man programmieren', hmm, keinerlei Ideen? du hast da eine Schleife in der je eine Note drankommt,
ist doch nun kein Thema, etwa diese Noten zusammenzuaddieren ( summe += aktuellerWert) , dazu die Anzahl zu zählen, am Ende teilen,
oder auch die Noten erstmal in eine Liste einzufügen, um später damit zu arbeiten,

du sollst nicht zaubern sondern einfache Dinge umsetzen, das ist oft nicht mehr als Lego für einen 5jährigen, nur eben in Java-Sprache formuliert

Java:
    try {
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/uni_db", "root", "12345");
Statement stmt = con.createStatement();
ResultSet rslt = stmt.executeQuery("SELECT Name,Vorname,MatNr,Note FROM Students");


while(rslt.next())
    System.out.println("Name"+rslt.getString(1)+" Vorname: "+rslt.getString(2)+" MatNr: "+rslt.getInt(3)+" Note: "+rslt.getDouble(4));

double summe=0;
int i=0;

while(rslt.next()){
    summe+=rslt.getDouble(i);
    System.out.println(summe);
    i++;
}

stmt.close();
con.close();
}
catch (Exception e) {
System.out.println(e.getMessage());
}
}
}


Werden damit nun die oben genannte Punkte erfüllt?
 
[XML]
try {
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/uni_db", "root", "12345");
Statement stmt = con.createStatement();
ResultSet rslt = stmt.executeQuery("SELECT Name,Vorname,MatNr,Note FROM Students");


while(rslt.next())
System.out.println("Name"+rslt.getString(1)+" Vorname: "+rslt.getString(2)+" MatNr: "+rslt.getInt(3)+" Note: "+rslt.getDouble(4));

double summe=0;
int i=0;

while(rslt.next()){
summe+=rslt.getDouble(i);
System.out.println(summe);
i++;
}

stmt.close();
con.close();
}
catch (Exception e) {
System.out.println(e.getMessage());
}
}
}[/XML]


Werden damit nun die oben genannte Punkte erfüllt?

Nein!!! DU sollst doch die Werte in eine Datei schreiben!
Und beim Zweiten: Nicht [c]getDouble(i);[/c] sondern
Code:
getDouble(4);
<-- Die Note ist ja schließlich immer in Spalte 4 !!
Aber ich würde beides in einer Schleife erledigen *g* (so wird in die zweite ja gar nicht erst reingegangen)
Des weiteren sollst du nicht die einzelnen Noten oder die Summe ausgeben, sondern am Ende den Durchschnitt....
 
Nein!!! DU sollst doch die Werte in eine Datei schreiben!
Und beim Zweiten: Nicht [c]getDouble(i);[/c] sondern
Code:
getDouble(4);
<-- Die Note ist ja schließlich immer in Spalte 4 !!
Aber ich würde beides in einer Schleife erledigen *g* (so wird in die zweite ja gar nicht erst reingegangen)
Des weiteren sollst du nicht die einzelnen Noten oder die Summe ausgeben, sondern am Ende den Durchschnitt....

while(rslt.next()){
System.out.println("Name: "+rslt.getString(1)+" Vorname: "+rslt.getString(2)+" MatNr: "+rslt.getInt(3)+" Note: "+rslt.getDouble(4));
System.out.println("Notendurchschnitt: ");
summe+=rslt.getDouble(4)/ANZAHL DER NOTEN;
System.out.println(summe);

}

So??? woher kriege ich die anzahl der noten? Was für Methoden kann ich dazu nehmen?
 
Java:
while(rslt.next()){
System.out.println("Name: "+rslt.getString(1)+" Vorname: "+rslt.getString(2)+" MatNr: "+rslt.getInt(3)+" Note: "+rslt.getDouble(4));
System.out.println("Notendurchschnitt: ");
summe+=rslt.getDouble(4)/rslt.getDouble(4);
System.out.println(summe);

}

vielleicht so?
 
na das i++ war dazu schon gar nicht schlecht, welchen Wert wird i haben, wenn 5 Ergebnisse in der Schleife durchgearbeitet wurden?

generell verabschiede ich mich aber, du fragst ja wirklich alles was dir gerade in den Kopf kommt,
so einen Service gibts nicht 😉


edit:
> rslt.getDouble(4)/rslt.getDouble(4)
dieser Code macht quasi nie Sinn, eine Zahl durch sich selber ist 1 wenn nicht schlimmeres (Division durch 0)
 
Du solltest die Tipps die man dir gibt aufmerksam lesen und dann vorher überlegen!

summe+=rslt.getDouble(4)/rslt.getDouble(4);

Was ist denn rslt.getDouble(4)/rslt.getDouble(4) ??
Macht das Sinn?

/edit: zu spät, aber ich bin nu auch raus 😀
 
na das i++ war dazu schon gar nicht schlecht, welchen Wert wird i haben, wenn 5 Ergebnisse in der Schleife durchgearbeitet wurden?

generell verabschiede ich mich aber, du fragst ja wirklich alles was dir gerade in den Kopf kommt,
so einen Service gibts nicht 😉


edit:
> rslt.getDouble(4)/rslt.getDouble(4)
dieser Code macht quasi nie Sinn, eine Zahl durch sich selber ist 1 wenn nicht schlimmeres (Division durch 0)

geht das hier nicht freundlicher mit Ihnen? Natürlich frage ich alles nach was ich nicht kann! Muss ja am ende alles Lernen oder? Kann ja nicht alles auf mich zukommen lassen! Jeder fragt hier! Ist doch ganz normal?
 
Mein problem ist:
Wie kann man die einzelnen noten zusammen zählen? Und wie kann ich dieses durch anzahl der noten teilen wenn ich nicht weis wieviele noten in datenbank vorhanden ist!!!!!!!!!!!!!!!!!!!!!!?????????????????
ACH NOCH WAS ICH WEIS AUCH NICHT WELCHE METHODEN DAZIU GEEIGNET SIND OK?

ICH ANFÄNGER NIX KAPIEREN???
 
Du warst doch anfangs schon dicht dran?!?! (nur dass du halt nicht getDouble(i) sondern getDouble(4) schreiben solltest....aber lesen musst du schon selber!
--Ach was solls!--
Java:
	double noten=0;
	int anzahlNoten=0;
	while (rslt.next()) {
	    noten += rslt.getDouble(4);
	    anzahlNoten++;
	}
	System.out.println("Notendurchschnitt: "+noten/anzahlNoten);
 
Du warst doch anfangs schon dicht dran?!?! (nur dass du halt nicht getDouble(i) sondern getDouble(4) schreiben solltest....aber lesen musst du schon selber!
--Ach was solls!--
Java:
	double noten=0;
	int anzahlNoten=0;
	while (rslt.next()) {
	    noten += rslt.getDouble(4);
	    anzahlNoten++;
	}
	System.out.println("Notendurchschnitt: "+noten/anzahlNoten);

aha und das ist jetzt die Lösung? War ja nah dran!
 
was ist eigentlich mit alle Datensätze auslesen lassen und in eine Datei students.out ausgeben lassen?

wurde das auch erfüllt? Wenn ja in welche Zeile?
 

Zurück
Oben