tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
24
ZUGRIFFE
800
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Dark-Nemesis Dark-Nemesis ist offline Mitglied
    Registriert seit
    Jun 2007
    Ort
    Essen
    Beiträge
    16
    Kriege den fehler ArrayIndexOutOfBounds sobald in meiner CSV Datei eine Zeile mit einem ; endet, solange es nicht am ende der Zeile ist können auch ;; ohne fehler vorkommen.

    Eine Lösung wie man dass lösen könnte wäre nicht verkehrt

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    BufferedReader Datei = new BufferedReader(new FileReader("C:\\Documents and Settings\\Paul\\Desktop\\Script\\test.csv"));
                zeile = Datei.readLine();
     
                while (zeile != null)
                {
            if(zeile.contains(";"))
            {
                String[] daten = zeile.split(";");
            }
            else if(zeile.contains(","))
            {
                String[] daten = zeile.split(",");
            }
            else
            {
                System.out.println("File in wrong format! \n" +
                           "The file must be delimited with \";\" or \",\"!");
            }
                    
            zeile = Datei.readLine();
     
    //....
     
    //SQL STATEMENTS
            String SqlUpdate = "Update `stundenplan` SET Stunde = '"+daten[0]+"', Montag = '"+daten[1]+"', Dienstag = '"+daten[2]+"', Mittwoch = '"+daten[3]+"', Donnerstag = '"+daten[4]+"', Freitag = '"+daten[5]+"' WHERE Stunde = '"+daten[0]+"' ";
            String SqlSelect = "SELECT Stunde FROM `stundenplan` WHERE Stunde = '"+daten[0]+"' ";
            String SqlInsert = "INSERT INTO `stundenplan` (Stunde, Montag, Dienstag, Mittwoch, Donnerstag, Freitag) VALUES ('"+daten[0]+"', '"+daten[1]+"', '"+daten[2]+"', '"+daten[3]+"', '"+daten[4]+"', '"+daten[5]+"') ";
            //SQL STATEMENTS
     

  2. #2
    Sebastian Seidelmann Sebastian Seidelmann ist offline Mitglied Silber
    Registriert seit
    May 2007
    Ort
    Neuss
    Beiträge
    74
    Hi
    in welcher Zeile passiert denn der Fehler?

    Mein Verdacht ist, dass du daten[5] über das Array hinausschiesst!

    MfG djjada
     


    Vorher lesen, Nachher Fragen!
    php.net | Java API | MySQL API


  3. #3
    Dark-Nemesis Dark-Nemesis ist offline Mitglied
    Registriert seit
    Jun 2007
    Ort
    Essen
    Beiträge
    16
    die zeile gibt groovy leider nicht an ...
    der verdacht ist schon nicht verkehrt, da es ja beim letzten ; der fehler auftritt, die frage ist nur wie ich es schaffen kann das zu umgehen bei dem split hört er ja scheinbar bei dem letzten ; auf und setzt die daten[5] nicht auf leer bzw. legt den garnicht erst an :/
     

  4. #4
    KlaDi KlaDi ist offline Mitglied Brokat
    Registriert seit
    Aug 2006
    Ort
    Europe - Germany - Mainz
    Beiträge
    296
    Hallo Dark,

    das Problem ist, das Du davon ausgehst, das fünf mal das Semikolon in einer Zeile ist und jeweils davor und dahinter Text steht. In diesem Falle funktioniert Dein Programm theoretisch einwandfrei. Steht aber hinter dem letzten Semikolon kein Text kommt es zu eben jenem Fehler.

    Die Frage ist halt, was soll passieren, wenn die Zeile quasi zu "kurz" ist? Soll danach einfach das SQL-Update ausgelassen werden oder soll es angepasst werden?

    gruß klaus.
     

  5. #5
    Dark-Nemesis Dark-Nemesis ist offline Mitglied
    Registriert seit
    Jun 2007
    Ort
    Essen
    Beiträge
    16
    Das Programm sollte in dem Fall quasi einen leer string bzw null eintragen, das Feld muss aber auf jedenfall weiterhin berücksichtigt werden.
     

  6. #6
    KlaDi KlaDi ist offline Mitglied Brokat
    Registriert seit
    Aug 2006
    Ort
    Europe - Germany - Mainz
    Beiträge
    296
    Hallo,

    dann mach es doch einfach als if-Abfrage:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    if(daten.length == 6) {
        String SqlUpdate = "Update `stundenplan` SET Stunde = '"+daten[0]+"', Montag = '"+daten[1]+"', Dienstag = '"+daten[2]+"', Mittwoch = '"+daten[3]+"', Donnerstag = '"+daten[4]+"', Freitag = ' ' WHERE Stunde = '"+daten[0]+"' ";
        String SqlSelect = "SELECT Stunde FROM `stundenplan` WHERE Stunde = '"+daten[0]+"' ";
        String SqlInsert = "INSERT INTO `stundenplan` (Stunde, Montag, Dienstag, Mittwoch, Donnerstag, Freitag) VALUES ('"+daten[0]+"', '"+daten[1]+"', '"+daten[2]+"', '"+daten[3]+"', '"+daten[4]+"', ' ') ";
    } else {
        String SqlUpdate = "Update `stundenplan` SET Stunde = '"+daten[0]+"', Montag = '"+daten[1]+"', Dienstag = '"+daten[2]+"', Mittwoch = '"+daten[3]+"', Donnerstag = '"+daten[4]+"', Freitag = '"+daten[5]+"' WHERE Stunde = '"+daten[0]+"' ";
            String SqlSelect = "SELECT Stunde FROM `stundenplan` WHERE Stunde = '"+daten[0]+"' ";
            String SqlInsert = "INSERT INTO `stundenplan` (Stunde, Montag, Dienstag, Mittwoch, Donnerstag, Freitag) VALUES ('"+daten[0]+"', '"+daten[1]+"', '"+daten[2]+"', '"+daten[3]+"', '"+daten[4]+"', ' ') ";
    }

    gruß klaus.
     

  7. #7
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Hallo,

    du könntest es dann so lösen

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    String[] tmp = new String[6];
     
    if(daten.length < 6)
    for(int i = 0; i < daten.length; i++){
       tmp[i] = daten[i];
    }
     
     
    daten = tmp;

    Also das müsstest du vor dem SQL-Statement ausführen.

    MFG

    zEriX
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  8. #8
    Dark-Nemesis Dark-Nemesis ist offline Mitglied
    Registriert seit
    Jun 2007
    Ort
    Essen
    Beiträge
    16
    Ja, danke werd das mal direkt einbauen/umbauen
     

  9. #9
    Anime-Otaku Anime-Otaku ist offline Mitglied Brillant
    Registriert seit
    Aug 2005
    Ort
    Karlsruhe (Baden-Württemberg)
    Beiträge
    905
    Oder benutze eine CSV Lib z.B. opencsv
     
    Wäre super wenn ihr euren Code in dieser Form einfügt:
    Code java:
    1
    
    System.out.println("Hello World");
    [java]System.out.println("Hello World");[/java]
    Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
    Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
    Blog: http://javaeffective.wordpress.com/

  10. #10
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Ich sehe gerade, da hab ich noch Klammern vergessen. Das kommt davon wenn man das direkt hier schreibt.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    String[] tmp = new String[6];
     
    if(daten.length < 6){
    for(int i = 0; i < daten.length; i++){
       tmp[i] = daten[i];
    }
     
     
    daten = tmp;
    }


    MFG

    zEriX
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

  11. #11
    Dark-Nemesis Dark-Nemesis ist offline Mitglied
    Registriert seit
    Jun 2007
    Ort
    Essen
    Beiträge
    16
    Die idee mit der CSV Lib war genial ersparrt einiges an code
    die anderen vorschläge wären aber auch eine alternative gewesen

    danke
     

  12. #12
    Dark-Nemesis Dark-Nemesis ist offline Mitglied
    Registriert seit
    Jun 2007
    Ort
    Essen
    Beiträge
    16
    Zitat Zitat von Anime-Otaku Beitrag anzeigen
    Oder benutze eine CSV Lib z.B. opencsv
    Mal ne frage zum der Lib.

    Exception occurred during event dispatching:
    java.lang.OutOfMemoryError: Java heap space
    Exception occurred during event dispatching:
    java.lang.OutOfMemoryError: Java heap space

    diese Fehlermeldung bekomme ich wenn ich versuch meine eigenen seperatoren zu setzen.... kannst du mir sagen woran es liegt?

    Code :
    1
    
    CSVReader Datei = new CSVReader(new FileReader("C:\\Documents and Settings\\Paul\\Desktop\\Script\\test.csv"), ';');
     

  13. #13
    Anime-Otaku Anime-Otaku ist offline Mitglied Brillant
    Registriert seit
    Aug 2005
    Ort
    Karlsruhe (Baden-Württemberg)
    Beiträge
    905
    java.lang.OutOfMemoryError: Java heap space

    Dein java Heap Speicher geht dir aus...dieser ist standardmässig maximal 64MiByte, den kannst du mittels eines Java VM Parameters leicht erhöhen: -Xmx128
     
    Wäre super wenn ihr euren Code in dieser Form einfügt:
    Code java:
    1
    
    System.out.println("Hello World");
    [java]System.out.println("Hello World");[/java]
    Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
    Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
    Blog: http://javaeffective.wordpress.com/

  14. #14
    Dark-Nemesis Dark-Nemesis ist offline Mitglied
    Registriert seit
    Jun 2007
    Ort
    Essen
    Beiträge
    16
    Zitat Zitat von Anime-Otaku Beitrag anzeigen
    java.lang.OutOfMemoryError: Java heap space

    Dein java Heap Speicher geht dir aus...dieser ist standardmässig maximal 64MiByte, den kannst du mittels eines Java VM Parameters leicht erhöhen: -Xmx128
    ok ... ist das normal ? ich mein das programm ist relativ klein, ebenso die csv die hat gerade mal 5 einträge mit 6 spalten .... die richtige csv wird nachher über 2k einträge haben O.o
     

  15. #15
    Avatar von zerix
    zerix zerix ist offline Hausmeister
    tutorials.de Moderator
    Registriert seit
    May 2005
    Beiträge
    4.335
    Also das mit dem Speicher erhöhen sollte meiner Meinung nach der letzte Ausweg sein, da man es auch immer explizit angeben muss.
    Normal ist es nicht wenn dein Programm nicht sehr groß ist. Ich würde sagen, dass du irgendwo viele Objecte erzeugst die den Speicher zum Überlaufen bringen.
    Vielleicht solltest du mal den Code posten, wenn es möglich ist.

    MFG

    zEriX
     
    Es ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)

Ähnliche Themen

  1. ArrayIndexOutOfBounds bei TabelSorter
    Von Juri Schlönz im Forum Java
    Antworten: 6
    Letzter Beitrag: 21.08.06, 10:31
  2. ArrayIndexOutOfBounds
    Von FBIagent im Forum Java
    Antworten: 4
    Letzter Beitrag: 23.05.06, 14:30