# mit Werten aus einer mysql datenbank in java rechnen



## Naz (26. Okt 2012)

Hallo allerseits,

wie eigentlich schon der Titel sagt suche ich nach Hilfe, um mit Werte aus einer Datenbank für eine berechnung in java zu integrieren. 
Ich habe bereits in mysql eine datenbank angelegt, mit entsprechenden tabellen. Jetzt müsste ich Werte aus der Datenbank holen um berechnungen durchzuführen. 
Wie z.B. :
In der Tabelle sind Werte wie Artikelnummer, Preis, gewicht, menge etc drin. Meine Absicht ist z.B. für die Artikelnummer 1234 gewicht für die angegebene menge zu berechnen und diesen dann in einer neuen Tabelle abzuspeichern. Eine Tabelle in java kann ich bereits abfragen und anzeigen, dafür nutze ich die result.next() Methode. Allerdings kann ich sie nur anzeigen lassen. Weiss aber nicht, wie ich dann die Werte nutzen kann.

Da ich ziemlich neu in Java Programmierung bin, wäre super, wenn ihr mir weiterhelfen würdet.

Bedanke mich schonmal im Voraus.


----------



## faetzminator (26. Okt 2012)

Täusch ich mich da, oder kann die Aufgabe komplett als SQL-Statement geschrieben werden? Ansonsten kannst du natürlich in Java über die Resultate iterieren, Infos sammeln und eine zweite Query absetzen.


----------



## c_sidi90 (26. Okt 2012)

Ich versteh nur nicht, wo dein Problem ist. Wie du sagst kannst du bereits Werte aus einem ResultSet auslesen. Da du dich schon mit SQL in Verbindung mit Java befasst, gehe ich davon aus, du hast bereits ein fundiertes Wissen über Variablen. Also wäre der logische Schritt ja dir die Werte aus dem ResultSet in temporäre Variablen zu speichern und diese für die Berechnung zu nutzen.

Die Klasse ResultSet verfügt über get-Methoden über die du deine Werte in Variablen beliebiger Datentypen speichern kannst. So kannst du z.B.


```
int value = resultset.getInt(Index);
int value2 = resultset.getInt(Index);

int result =  value + value2;
```


----------



## Naz (26. Okt 2012)

Genau richtig, würde gern ein SQL-fähiges Java Programm erstellen. Das ist erstmal noch ein Bruchteil von dem Programm. Später brauche ich diese Werte, um weitere Berechnungen durchzuführen und mit anderen Werten zu vergleichen.
Danach habe ich die Idee das ganze in GUI darzustellen, also den Code in GUI einzubinden, so dass es für den Anwender praktisch einfacher einsehbarer ist. Das heisst also, wenn z.b. der Anwender eine Abfrage für einen bestimmten Wert benötigt, oder selbst ein wert eingibt um eine Berechnung durchzuführen. Ich hoffe ich konnte es etwas besser erklären.

Also die Werte sind eigentlich soweit gespeichert:

while (result.next()) {
                    int nummer_id = result.getInt("nummer_id"); // Alternativ: result.Int(1);
                    int teilenummer_id = result.getInt("teilenummer_id"); // Alternativ: result.getInt(2);
                    String bezeichnung = result.getString("bezeichnung");
                    int menge = result.getInt("menge");


                    System.out.println( nummer_id + "   " + teilenummer_id + "  " + bezeichnung + " " + menge);

Allerdings kann ich diese erstmal in einer test klasse nur ausgeben.

Ich denke statt System.out.println( nummer_id + "   " + teilenummer_id + "  " + bezeichnung + " " + menge); kann ich hier doch eine weitere Methode einfügen um die Berechnung zu machen oder?


----------



## Naz (26. Okt 2012)

```
while (result.next()) {
int nummer_id = result.getInt("nummer_id"); // Alternativ: result.Int(1);
int teilenummer_id = result.getInt("teilenummer_id"); // Alternativ: result.getInt(2);
String bezeichnung = result.getString("bezeichnung");
int menge = result.getInt("menge");


System.out.println( nummer_id + " " + teilenummer_id + " " + bezeichnung + " " + menge);
```

so ist es besser zu erkennen denke ich


----------



## achillesat (26. Okt 2012)

faetzminator hat gesagt.:


> Täusch ich mich da, oder kann die Aufgabe komplett als SQL-Statement geschrieben werden? Ansonsten kannst du natürlich in Java über die Resultate iterieren, Infos sammeln und eine zweite Query absetzen.





```
SELECT (SPALTE1) * (SPALTE2) AS ERGEBNISS FROM TABELLE;
```



So funktioniert es auch.


----------



## Naz (26. Okt 2012)

```
SELECT (SPALTE1 * SPALTE2) + (SPALTE3) AS ERGEBNISS FROM TABELLE;
```

Die Berechnung würde ich dann in eine neue Tabelle einfügen. Also kann ich vorher eine leere tabelle erstellen und die ergebnisse dort abspeichern und die Spalten als ergebnis1, ergebnis2 etc benennen oder?
Beispiel: Ich erzeuge die neue Tabelle mit dem Namen Tabelle1 mit den spalten ergebnis1, ergebnis2 etc., ist dann der code so richtig?

```
SELECT (SPALTE1 * SPALTE2) + (SPALTE3) AS ergebnis1 FROM TABELLE1;
```

Ich galube nicht oder? Ich müsste die Tabelle wählen von der ich auch die Daten hole. Ich denke ich müsste dannach INSERT ausführen, um in die neue Tabelle einzufügen.


----------



## SlaterB (26. Okt 2012)

du brauchst keine neue Tabelle mit Insert, wie richtig als Hilfsmittel erkannt, 

SELECT (SPALTE1 * SPALTE2) + (SPALTE3) AS ERGEBNISS FROM TABELLE;

wäre eine Abfrage die bestimmte berechnete Daten ins ResultSet liefert,
oder die normalen Spalten abfragen und in Java zusammenrechnen

in deinen Beispielen 10:47 + 10:49  gibt es nur die Menge als int, keinen Preis oder sonstwas,
da kann man nicht viel zu sagen, nichts ist zu berechnen

wenn es in verschiedenen Tabellen steht dann in SQL ein Join oder in Java die Daten zusammenbringen,
das sind alles gewisse Denk- und Programmieraufwände, nicht ganz leicht falls du bisher von allem Bahnhof verstehen solltest?


----------



## Naz (26. Okt 2012)

So ich habe die Werte aus ResultSet ausgelesen und die Berechnung damit ausgeführt. Allerdings habe ich eine while Schleife benutzt und habe die Bedingung gegeben 
	
	
	
	





```
while (id<=20) {}
```
, damit die Berechnung für jede id ausgerechnet werden soll, quasi für jedes Artikel einzeln. Allerdings besteht hier das Problem, dass ich 20mal die gleiche Ausgabe für die gleiche id habe und danach springt er erst zum nächsten. Ist hier die while Schleife nicht korrekt? Oder habe ich die Bedingung falsch eingegeben? Ich habs mit for auch versucht klappt irgendwie auch nicht.


----------



## SlaterB (26. Okt 2012)

weder ist dein konkretes Problem ersichtlich, noch warum eine Schleife bis 20 für 'Berechnung für jede id' nützlich ist

du musst mehr Code und Erklärungen liefern,

immer helfen auch Beispiele, 20 ist vielleicht etwas viel, aber nenne z.B. 5 fiktive Werteeinträge und was da einzeln, oder z.B. im 3er-Pack berechnet werden soll,
was passiert wenn die Schleife nicht da ist, was soll sich ändern


----------



## Naz (7. Nov 2012)

Hallo nochmals,

soweit habe ich das Problem gelöst 

Jez habe ich eine weitere Frage. Wie kann ich die Daten die in Java berechnet sind wieder in die Datenbank einfügen?
Ich glaube ich habe es mir auch etwas kompliziert gemacht denke ich, ich glaube das ganze direkt in SQL zu schreiben wäre etwas einfacher gewesen. 

Also zurück zu meiner Frage. Die Spalten sind in der Datenbank eingefügt, allerdings fehlen die in Java gerechneten Werte noch.
Könnt ihr mir sagen wie ich das machen kann? Bzw. mit welcher Methode?

Danke vielmals


----------



## SlaterB (7. Nov 2012)

JDBC Statement executeUpdate(stringSQLmitInsert);
?


----------



## BuckRogers (7. Nov 2012)

Hi,

so hier mal mein erster Beitrag 

zum Thema:

[JAVA=10]ResultSet rs1;

// Werte aus DB per Statement ziehen

int wert_1 = rs1.getInt("derIntWert");

// Dann machst du einfach einen zusammengesetzten Query:

Statement stmt;
stmt.executeQuery("INSERT INTO table_1 " + wert_1 + ";");

// Im Grunde musst du nur einen zusammengesetzten String aus Statement und Variablen basteln[/code]


----------



## Naz (9. Nov 2012)

Also ich habs mal ausprobiert klappt leider nicht 


```
private static Connection getInstance()
    {
        if(conn == null)
            new Datenbank();
        return conn;
    }
 
    /**
     * Schreibt die Eingangsdatenliste in die Konsole
     */
    public static void eingangsdaten()
    {
        conn = getInstance();
         
        if(conn != null)
        {
            // Anfrage-Statement erzeugen.
            Statement query;
           
            try {
                query = conn.createStatement();
 
                // Ergebnistabelle erzeugen und abholen.
                String sql = "SELECT * FROM db.daten";
                ResultSet result = query.executeQuery(sql);
                System.out.println("nr \t | bezeichnung \t | menge \t | gewicht \t | fuellmenge \t | art \t | typ \t | laenge \t | breite \t | gewicht_neu \t | verbrauch \t ");
                System.out.println("-----------------------------------------------------------------------------------------------");
                
                // Ergebnissätze durchfahren.
                while (result.next()) {  
                    int nr = result.getInt("nr");
                    int menge = result.getInt("menge");
                    float gewicht = result.getFloat("gewicht");
int fuellmenge = result.getInt("fuellmenge");
                    
                    
                    if (nr > 0) {
                        float kg;
                        kg = gewicht;
                        
                        int fm;
                        fm = fuellmenge;
                        
                        float kglt;
                        kglt = kg * fm;
                                              
                                            
                                        
                        System.out.print(result.getInt("nummer") + "\t | ");
			
			System.out.print(result.getString("bezeichnung") + "\t | ");
			System.out.print(result.getInt("menge") + "   | ");
			System.out.print(result.getDouble("gewicht")+ "\t | ");
                        System.out.print(result.getInt("fuellmenge")+ "\t | ");
                        System.out.print(kglt + "\t | " );
                        System.out.println();

                    }
                    
                                    }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
```

ich habe hinter der letzten Ausgabe 

```
Statement stmt = null;
                        stmt.executeQuery("INSERT INTO db.daten (gewicht_neu) VALUE" +kglt ";");
```

eingefügt, klappt nicht. Weiss nicht wo mein Fehler liegt.???:L


----------



## Naz (9. Nov 2012)

also ich habe bereits eine leere spalte in die Datenbank eingefügt, jetzt möchte ich nur noch die Werte, die ich in java berechnet habe, in die neue Spalte in der Datenbank einfügen, weill ich diese Werte immer wieder gebrauchen werde.


----------



## ARadauer (9. Nov 2012)

> neu) VALUE" +kglt ";");


da fehlt ein +

neu) VALUE" +kglt + ";"); 

ich würd aber trotzdem mit prepared statements arbeiten...


----------



## Volvagia (9. Nov 2012)

SELECT sind Queries, INSERT sind Updates.
Das was du machst ist sehr unsicher. Schau dir (nach dem es läuft) PreparedStatements an.


----------



## Michael... (9. Nov 2012)

Naz hat gesagt.:


> ```
> Statement stmt = null;
> stmt.executeQuery("INSERT INTO db.daten (gewicht_neu) VALUE" +kglt ";");
> ```


Naja, 
	
	
	
	





```
stmt = null
```
 ist ja wohl Schmarrn. An nichts kann man eben nichts aufrufen.
Etwas eine Datenbankfeld eintragen geht mit einem 
	
	
	
	





```
Update ....
```
 Statement.

Besser - und einfacher - wäre es überigens mit PreparedStatments zu arbeiten.


----------

