# JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into)



## Onigh (6. Jun 2016)

Hi!

Ich verzweifele jetzt seit ein paar Tagen an folgendem Problem:

Es gibt in meinem Testprogramm Aufträge, welche wiederum Auftragpositionen enthalten, also zwei Klassen.

Ich habe eine Methode saveAuftraegeTest erstellt, die die Aufträge sowie deren zugehörige Auftragspositionen in zwei Datenbanktabellen speichern soll.

Dazu erhält diese Methode über einen Parameter eine Collection von Aufträgen. Diese wird dann über eine foreach-Schleife durchlaufen. Für jeden einzelnen Auftrag dieser Collection wird zusätzlich dessen Auftragspositions-Collection durchlaufen.

Zum Testen habe ich dann ein Auftrags-Objekt (enthält eine Collection an Auftragspositionen) und mehrere Auftragspositions-Objekte erstellt. Diese dann in ArrayLists eingefügt und die ArrayList mit dem Auftrags-Objekt an die saveAuftraegeTest-Methode übergeben.

Das Problem ist, dass der erstellte Auftrag problemlos in die richtige Datenbanktabelle eingefügt wird, jedoch nur EINE Auftragsposition in die Auftragspositionstabelle eingefügt wird. Danach wird nichts mehr in die Tabellen eingefügt, obwohl noch weitere Auftragspositionen erscheinen sollten.

Die SQL-Statements sollten eigentlich richtig zusammengesetzt werden, da ja eine Auftragsposition korrekt eingefügt wird und die Konsole auch die richtigen SQL-Befehle ausgibt.

Folgend der Code meiner saveAuftraegeTest-Methode:


```
public void saveAuftraegeTest(Collection<Auftrag> auftragsListe){

        Connection aConnection = Persistence.getConnection();
        for(Auftrag auftrag:auftragsListe) {
            try {
                Persistence.executeUpdateStatement(
                        aConnection,
                        "INSERT INTO auftrag VALUES (" +
                        auftrag.getId() + "," +
                        "'" + auftrag.getaDatum() + "')");
            } catch (SQLException e1) {
                e1.printStackTrace();
                System.err.println("Probleme beim Speichern der Auftraege!");
            }

            for(Auftragsposition auftragsposition:auftrag.getPositionen())
                try {
                    Persistence.executeUpdateStatement(
                            aConnection,
                            "INSERT INTO auftragsposition (id,nrinauftrag,text,menge,preis) VALUES (" +
                            auftragsposition.getId() + "," +
                            auftragsposition.getNrInAuftrag() + "," +
                            "'" + auftragsposition.getText() + "'," +
                            auftragsposition.getMenge() + "," +
                            auftragsposition.getPreis() + ")");
                } catch (SQLException e) {
                    e.printStackTrace();
                    System.err.println("Probleme beim Speichern der Auftraege!");;
                } finally {

                    Persistence.closeConnection(aConnection);
                }
           
        }
       

    }
```

Bin gerade bei diesem Problem etwas am verzweifeln, da es ja an sich gar nichts kompliziertes ist............ die gesamte Auftrags-Collection wird durchgegangen und währenddessen für jeden Auftrag dessen Auftragspositions-Collection.

Verstehe einfach nicht, wieso er nur eine Auftragsposition einfügt -.- -.- -.-

Hat jemand eine Idee?

Die SQL-Statements, die er zusammenbaut (bei einem Auftrag und drei Auftragspositionen):


```
INSERT INTO auftrag VALUES (2,'01012000')
INSERT INTO auftragsposition (id,nrinauftrag,text,menge,preis) VALUES (1,1002,'hjijijiijikj',10,3000)
INSERT INTO auftragsposition (id,nrinauftrag,text,menge,preis) VALUES (2,2022,'esfunktioniertnicht',1001,3006450)
INSERT INTO auftragsposition (id,nrinauftrag,text,menge,preis) VALUES (3,2052,'esfaasdfasdfrtsr',1021,33456)
```

Vllt hat ja jemand eine Idee, woran es liegen könnte.


----------



## Onigh (6. Jun 2016)

Hat sich erledigt ^^ Connection wurde immer geschlossen während des Durchlaufens der For-Schleife.


----------

