batchupdate, es wird nur der letzte Eintrag eingetragen

nieselfriem

Bekanntes Mitglied
Hallo!

In meiner Einfügemethode wird eine ArrayListe vom Typ BewerberBeruf übergeben. Die Daten dieser Liste sollen durch eine Schleife und mit einem Batchupdate in die Datenbank eingefügt werden. Die Daten in der Liste kommen auch so weit an, jedoch wird immer nur der letzte Eintrag der ArrayListe in die Datenbank eingetragen. Das heißt für mich, es gibt eine Fehler in meine Programmierung des Batchupdates. Bisher kann ich ihn jedoch nicht so richtig eingrenzen. Bitte werft mal ein Auge auf meine Methode. Vielleicht könnt ihr mir den Fehler zeigen. Danke!

Java:
 public boolean addBatch(ArrayList<BewerberBeruf> bewBer) throws SQLException, ClassNotFoundException {
        int[] updateCount = null;
        boolean isUpdated = false;
        conn = AllowConnect.driver(this.user, this.password, this.dburl, this.className);
        for (int i = 0; i < bewBer.size(); i++) {
                     stmt = conn.prepareStatement("INSERT INTO `Arbeitnehmer-Berufe` "
                            + "(`Arbeitnehmer-Berufe`.`AN-ID`, "
                            + "`Arbeitnehmer-Berufe`.`Wertigkeit`, "
                            + "`Arbeitnehmer-Berufe`.`Beruf`, "
                            + "`Arbeitnehmer-Berufe`.`Spez`) "
                            + "VALUES (?,?,?,?)");
                    stmt.setInt(1, bewBer.get(i).getBewBerufPId());
                    stmt.setInt(2, bewBer.get(i).getWertigkeit());
                    stmt.setString(3, bewBer.get(i).getBeruf());
                    stmt.setString(4, bewBer.get(i).getSpez());
                    stmt.addBatch();
                }
                    updateCount = stmt.executeBatch();
                    conn.commit();
                    if (updateCount.length > 0) {
                        isUpdated = true;
                        System.out.println("Updatecount"+updateCount.length);
                    }//if
                    //stmt.executeUpdate();
    
            } catch (BatchUpdateException e) {
                e.printStackTrace();
                conn.rollback();
                return false;
            }

        }//if
        conn.close();
        return isUpdated;
    }//addBatch
 
gib doch in der Java-Schleife und davor erstmal aus, wie groß die Size der Liste ist,
und vorallem dann alle Werte pro i, vielleicht sind es immer dieselben, ein häufiger Fehler,

ansonsten vereinfachen, gehe auf eine Testtabelle, gehe auf ein einzelnes Attribut, speichere nur den Wert i, das macht die Liste überflüssig,
verzichte temporär komplett auf die Schleife und schreibe einfach nur 2x hintereinander

stmt.setString(1, "test1");
stmt.addBatch();
stmt.setString(1, "test2");
stmt.addBatch();

usw., immer arbeiten wenn noch direkt möglich,
nicht nur ein großes Programm posten und fragend davor stehen


edit:
oh Mist, das nächste Post enthält natürlich einen besserer Fund 😉
 
Zuletzt bearbeitet von einem Moderator:
Das du das PreparedStatement in der Schleife immer wieder aufbaust kommt mir spanisch vor...


Edit: Aha, das Statement wird immer wieder aufgebaut - das letzte gewinnt 🙂
 
Zuletzt bearbeitet:
gib doch in der Java-Schleife und davor erstmal aus, wie groß die Size der Liste ist,
und vorallem dann alle Werte pro i, vielleicht sind es immer dieselben, ein häufiger Fehler,

dies habe ich bereits getan.
Java:
for (int i = 0; i < bewBer.size(); i++) {

              System.out.println("In Addbatch "+bewBer.get(i).getBeruf() + "," + bewBer.get(i).getSpez() + "," + bewBer.get(i).getWertigkeit());
         }
Es kommen alle werte so an wie sie sollen.

Diesen Fehler kann ich also ausschliessen.

Gruß niesel
 

Neue Themen


Zurück
Oben