10Mio. Datensätze aus Textdatei zu MySQL Java

Hallo,
Ich bin gerade dabei ein Programm in Java zu schreiben, in welchem ich aus einer Textdatei ca. 10Mio. Datensetze (Zeilen) mit je X,Y,Z Koordinaten in eine MySQL Datenbank importieren möchte.

Leider kommt immer zwischen 300.000 und 400.000 übertragenen Datensetzen eine Fehlermeldung und die Übertragung bricht ab. Mit Datenbanken und Java habe ich bisher wenig Erfahrung. Wie geht man so eine große „Übertragung“ denn am besten an? Wie gesagt, er bricht ja nur irgendwann ab, sprich die Übertragung funktioniert. Habe es schon mit commit versucht, aber da autocommit aktiviert ist, sollte es ja auch so funktionieren. Wäre nett, wenn mir jemand weiterhelfen könnte.

Die Fehlermeldung:
Exception in thread „AWT-EventQueue-0“ java.lang.ArrayIndexOutOfBoundsException: 1
at bachelorarbeit_gut.ProgramFrame.fileOpen(ProgramFrame.java:141)
at bachelorarbeit_gut.ProgramFrame$1.actionPerformed(ProgramFrame.java:60)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1223)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1264)
at java.awt.Component.processMouseEvent(Component.java:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
ERSTELLEN ERFOLGREICH (Gesamtzeit: 25 Minuten 40 Sekunden)

Hallo,

Mit Datenbanken und Java habe ich bisher wenig Erfahrung. Wie
geht man so eine große „Übertragung“ denn am besten an?

Stichwort Batch-Verarbeitung, ist i.d.R. performanter als die Updates einzeln zu verarbeiten (sofern MySQL das unterstützt, bin ich spontan überfragt): http://java.sun.com/developer/Books/JDBCTutorial/ 3.4 Making Batch Updates

Aber…

Die Fehlermeldung:

Exception in thread „AWT-EventQueue-0“
java.lang.ArrayIndexOutOfBoundsException: 1
at
bachelorarbeit_gut.ProgramFrame.fileOpen(ProgramFrame.java:141)

bedeutet schlicht, dass du versuchst auf einen Array Index zuzugreifen, den es nicht gibt. Also entweder negativ oder größer als die Array-Größe. Kann mir spontan nicht vorstellen, dass es mit der Anzahl der verarbeiteten Datensätze zusammenhängt. Was steht den in Zeile 141 in ProgramFrame.java? Auf welches Array greifst du mit welchem index zu?

Gruß
Heavy

Danke für die schnelle Antwort!
In zeile 141 steht:

141: String teile[] = new String[3];
142: teile = line.split("\s");

Ich Teile also jede Zeile mit Split auf (nach jedem Leerzeichen) und füge diesen Wert teile[] zu…
Vielleicht gibt es ja da die Lösung!?

Exception in thread „AWT-EventQueue-0“
java.lang.ArrayIndexOutOfBoundsException: 1

Auf welches Array greifst du mit welchem index zu?

Der Index ist Bestandteil der Fehlermeldung (1), bleibt die Frage auf welches Array greifst du zu (offensichtlich auf ein leeres)?

Gruß
Heavy

Hallo,
Ich bin gerade dabei ein Programm in Java zu schreiben, in
welchem ich aus einer Textdatei ca. 10Mio. Datensetze (Zeilen)
mit je X,Y,Z Koordinaten in eine MySQL Datenbank importieren
möchte.

Leider kommt immer zwischen 300.000 und 400.000 übertragenen
Datensetzen eine Fehlermeldung und die Übertragung bricht ab.
Mit Datenbanken und Java habe ich bisher wenig Erfahrung. Wie
geht man so eine große „Übertragung“ denn am besten an? Wie
gesagt, er bricht ja nur irgendwann ab, sprich die Übertragung
funktioniert. Habe es schon mit commit versucht, aber da
autocommit aktiviert ist, sollte es ja auch so funktionieren.
Wäre nett, wenn mir jemand weiterhelfen könnte.

gug mal wie der grosse daten streamt
http://www.databasesandlife.com/reading-row-by-row-i…

Die Fehlermeldung:
Exception in thread „AWT-EventQueue-0“
java.lang.ArrayIndexOutOfBoundsException: 1

Diese Klasse dient zur Auslösung einer ArrayIndexOutOfBoundsException. Die ArrayIndexOutOfBoundsException tritt auf, wenn versucht wird, ein Array mit einem ungültigen Index anzusprechen

Danke für die schnelle Antwort!
In zeile 141 steht:

141: String teile[] = new String[3];
142: teile = line.split("\s");

Kann es sein, dass du die Source-Datei nicht mehr zum Programm passt? In der Zeile findet kein Zugriff auf das Array statt, da kann es eigentlich nicht zu einer ArrayIndexOutOfBoundsException kommen. Evtl. nochmal kompilieren und prüfen, ob sich die Zeilennummer in der Fehlermeldung ändert.

Ich Teile also jede Zeile mit Split auf (nach jedem
Leerzeichen) und füge diesen Wert teile[] zu…
Vielleicht gibt es ja da die Lösung!?

Meine letztes Posting war nicht ganz richtig, das Array kann ein Element enthalten, die Index Position in der Fehlermeldung lautet ja 1, d.h. du versuchst auf das zweite Element zuzugreifen. Wenn die Zeile kein Leerzeichen enthält hat das Array aber nur ein Element, das würde die Fehlermeldung erklären. Du solltest das also zuvor prüfen, bevor du auf die Strings zugreifst.

Gruß
Heavy

Ich glaube, den Fehler gefunden zu haben!
In der Datei gibt es Zeilen, in denen nur ein Wert steht.
Die Frage ist nur, wie fische ich diese Zeilen raus? bzw. Zeilen ohne Inhalt?

Ich glaube, den Fehler gefunden zu haben!
In der Datei gibt es Zeilen, in denen nur ein Wert steht.

Hatte ich unten ja geschrieben.

Die Frage ist nur, wie fische ich diese Zeilen raus? bzw.
Zeilen ohne Inhalt?

Du musst lediglich vor der Verarbeitung prüfen, ob du genügen Werte für die SQL Verarbeitung hat.

teile = line.split("\\s");
if(teile.length == 3)
{
 // SQL Verarbeitung
}
else
{
 // Warnung ins Logfile schreiben oder gar nichts machen
}

HTH
Heavy