![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Gast
Beiträge: n/a
|
Hey Leudels, Ich schilder euch mal kurz mein Problem: Also ich lese via Java StringTokenizer eine Tabelle aus einer .txt Datei ein und lasse diese direkt in eine Datenbank eintragen. Das problem hierbei ist jetzt, dass diese .txt Datei ca. 5000 Datensätze enthält, und dieser ganze vorgang so fast 20 min dauert?!?!?! Wie kann ich denn die Performance dabei erhöhen? Ist es vielleicht sinnvoll alles erstmal in einen Vektor oder ein Feld zu schreiben, und es dann von dort erst eintragen zu lassen? Oder gibt es andere Möglichkeiten? mfg Steve |
|
| | Nach oben #2 |
| Benutzer Registriert seit: 29.05.2004
Beiträge: 45
|
BufferedStreamReader, StringBuffer etc... ohne zu wissen wie du ausliest bzw in den Speicher holst wirds schwierig das zu sagen /edit: Was ich damit meine: gib uns ein bisschen Code, im Idealfall so viel das es kompilierbar ist.
__________________ Jabber: melsi@amessage.de |
| | |
| | Nach oben #3 |
| Gast
Beiträge: n/a
|
import java.io.*; import java.util.StringTokenizer; import java.sql.*; public class CarsReader { //Konstruktor MyConnection x = new MyConnection(); public CarsReader() { } public void lesen(String datei) { try { FileReader f = new FileReader (datei); String alles = ""; int c; while (( c = f.read()) != -1) { alles = alles + (char)c; //die alte zeile wird mit dem neuen überschrieben } //Zeile zerlegen StringTokenizer st = new StringTokenizer (alles, "\n"); while(st.hasMoreTokens()) { String zeile = st.nextToken(); StringTokenizer stto = new StringTokenizer (zeile, "\t"); int anzahl = stto.countTokens(); if(anzahl>4) { String s1 = stto.nextToken(); String s2 = stto.nextToken(); String s3 = stto.nextToken(); String s4 = stto.nextToken(); String s5 = stto.nextToken(); eintragen(s1,s2,s3,s4); } } } catch(Exception e) { System.out.println("Fehler"); } public void eintragen(String s1,s2,s3,s4) { try { x.stmt.executeUpdate("INSERT INTO CARS (Family, Analysis) VALUES ('"+s3+"','"+s4+"')"); } catch(SQLException ex) { System.out.println("F***ing Fehler!"); } } } So, das mal der Code..hehe |
|
| | Nach oben #4 |
| Benutzer Registriert seit: 29.05.2004
Beiträge: 45
|
Wie ich schon erwähnt hab ist gebuffertes lesen u.U. erheblich performanter. Ausserdem kannst du auch mit BufferedReader#readline() ganze Zeilen lesen statt dich mit den einzelnen Zeichen zumzuschlagen /edit: s5 bleibt so wies mir scheint ungenutzt... kann also weg
__________________ Jabber: melsi@amessage.de |
| | |
| | Nach oben #6 |
| Gast
Beiträge: n/a
|
Hmm.. Du hast ohne es zu wollen, die langsamst mögliche Lösung gewählt.. Der Code Code: FileReader f = new FileReader (datei);
String alles = "";
int c;
while (( c = f.read()) != -1)
{
alles = alles + (char)c; //die alte zeile wird mit dem neuen überschrieben
}
Code: BufferedReader reader = new BufferedReader(new FileReader(datei));
String line = null;
while ( (line = reader.readLine()) != null) {
StringTokenizer stto = new StringTokenizer (line, "\t");
int anzahl = stto.countTokens();
if(anzahl>4) {
String s1 = stto.nextToken();
String s2 = stto.nextToken();
String s3 = stto.nextToken();
String s4 = stto.nextToken();
String s5 = stto.nextToken();
eintragen(s1,s2,s3,s4);
}
}
Greets |
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Singleton und Performance | Ben | Anwendungsdesign / Softwarearchitektur | 31 | 03.01.2007 05:45 |
| Performance: Referenzübergabe (PHP4) oder erneute Abfrage im MySQL-Query? | Chr!s | PHP-Programmierung | 1 | 22.10.2006 17:36 |
| [FRAGE] performance von phptags | J33d3X | PHP-Programmierung | 14 | 30.01.2006 14:52 |
| Speed erhöhen | g4ul1x | Desktop-Applikationen und Grafik | 4 | 07.01.2006 10:53 |