# SQL: Kann die AUfgabe nicht lösen!



## babuschka (31. Jan 2010)

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:


```
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?


----------



## eRaaaa (31. Jan 2010)

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


----------



## babuschka (31. Jan 2010)

eRaaaa hat gesagt.:


> 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




```
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?


----------



## SlaterB (31. Jan 2010)

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


----------



## babuschka (31. Jan 2010)

SlaterB hat gesagt.:


> 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?
> ...




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.!


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


----------



## eRaaaa (31. Jan 2010)

FBI_1907 hat gesagt.:


> Ob mit dieser Code: Die werte ausgegeben werden war die frage!



JA!
(kannst du das eig. nicht testen? ;( )


----------



## babuschka (31. Jan 2010)

SlaterB hat gesagt.:


> 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?
> ...




```
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?


----------



## babuschka (31. Jan 2010)

eRaaaa hat gesagt.:


> JA!
> (kannst du das eig. nicht testen? ;( )



nein kann ich nicht ich kann kein datenbank mit java besser gesagt mit netbeans verbinden ich hab dazu kein programm! Das war ne Prüfungsaufgabe während der Prüfng haben wir auch keine PC wird schriftlich durchgeführt!


----------



## eRaaaa (31. Jan 2010)

FBI_1907 hat gesagt.:


> [XML]
> try {
> Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/uni_db", "root", "12345");
> Statement stmt = con.createStatement();
> ...



Nein!!! DU sollst doch die Werte in eine Datei schreiben!
Und beim Zweiten: Nicht [c]getDouble(i);[/c] sondern 
	
	
	
	





```
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....


----------



## babuschka (31. Jan 2010)

eRaaaa hat gesagt.:


> Nein!!! DU sollst doch die Werte in eine Datei schreiben!
> Und beim Zweiten: Nicht [c]getDouble(i);[/c] sondern
> 
> 
> ...



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?


----------



## babuschka (31. Jan 2010)

```
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?


----------



## SlaterB (31. Jan 2010)

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)


----------



## eRaaaa (31. Jan 2010)

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


----------



## babuschka (31. Jan 2010)

SlaterB hat gesagt.:


> 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
> ...



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?


----------



## babuschka (31. Jan 2010)

eRaaaa hat gesagt.:


> Du solltest die Tipps die man dir gibt aufmerksam lesen und dann vorher überlegen!
> 
> summe+=rslt.getDouble(4)/rslt.getDouble(4);
> 
> ...



ciao bello!


----------



## babuschka (31. Jan 2010)

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???


----------



## eRaaaa (31. Jan 2010)

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!--

```
double noten=0;
	int anzahlNoten=0;
	while (rslt.next()) {
	    noten += rslt.getDouble(4);
	    anzahlNoten++;
	}
	System.out.println("Notendurchschnitt: "+noten/anzahlNoten);
```


----------



## babuschka (31. Jan 2010)

eRaaaa hat gesagt.:


> 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!--
> 
> ```
> ...



aha und das ist jetzt die Lösung? War ja nah dran!


----------



## babuschka (31. Jan 2010)

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?


----------



## babuschka (31. Jan 2010)

ach hat sich erledigT ENDLICH 

UND NÄCHSTES MAL BISSLE RUHIGER UND FREUNDLICHER SLATERB
DANKE FÜR DIE LÖSUNG ERRA!


----------

