IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

une erreur d'excecution


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 87
    Par défaut une erreur d'excecution
    bonjour
    je viens dans ce forum car vous mavez m'aidé pas mal de fois et puisque je suis débutant en java alors je comprends pas tout et j'arrive pas a deviner ou il vient le problem
    alors mon problem c'est que avec le meme code ca marche pour ceratin tables et pour quelques une ca marche pas
    j'ai un problmen au niveau de l'importation d'un fichier TXT dans la base de donnée
    voila lerreur qu'il maffiche
    mon appl c'est avec Java/Mysql

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Exception in thread "Thread-2" java.lang.ArrayIndexOutOfBoundsException: 9
    	at FileMTA.verifOlet(FileMTA.java:1359)
    	at FileMTA.verifLine(FileMTA.java:262)
    	at FileMTA.getVerifiedLine(FileMTA.java:186)
    	at LoadTxt.action(LoadTxt.java:467)
    	at LoadTxt.run(LoadTxt.java:154)
    merci d'avance

  2. #2
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    Citation Envoyé par mora092 Voir le message
    bonjour
    [CODE]Exception in thread "Thread-2" java.lang.ArrayIndexOutOfBoundsException: 9
    at FileMTA.verifOlet(FileMTA.java:1359)
    Bonjour,
    l'erreur est une "java.lang.ArrayIndexOutOfBoundsException" ce qui signifie qu'il y a une dépassement d'index

    vers la ligne 1359 de la classe FileMTA, il doit y avoir le parcour d'une liste (ou autre) par une boucle for(int=0; i....;i++) { Object obj = liste.get(i);}
    mais à un moment i=9 et ma taille de la liste est <9.

    Avec un peut de code (par exemple le contenu de la méthode verifOlet ) ce serait plus facile

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 87
    Par défaut
    voila ma methode que j'utilise pour verifier

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    private String verifOlet(String s){
    		String[] sMot;
    		boolean bError;
    		String sError;		
    		bError=false;
    		sError="";
    		sMot=s.split("\t",LEN_DICO_OLET+1);
    		
    		if(sMot[0].length()<1){ // Item Code
    			bError=true;
    			sError+="\t- Item Code can't be NULL.\n";
    		}
    		
    		if(bError){
    			return sError;
    		}
    		//on test si l'item est deja dans le dictionnaire
    		else{
    			MysqlAccess my=new MysqlAccess("mta_dico");
    			my.startConnection();
    			s = "select count(*) from ta_olet where olet_comp_code   ='"+sMot[0]+"'";
    			int rst = my.executeQuery(s);
    			my.goNextRst(rst);
    			if(Integer.valueOf(my.getValueRst(rst,1))==0)
    			{
    				s="";
    				for(int i=0;i<LEN_DICO_OLET;i++){
    //il se plance ici 	if(sMot[i].length()<1) 
    						s=s+"NULL\t";
    					else s=s+"'"+sMot[i]+"'\t";
    				}
    			}
    			else
    			{
    				//si oui on ajoute le préfixe UPD
    				s="UPD";
    				for(int i=0;i<LEN_DICO_OLET;i++){
    					if(sMot[i].length()<1) s=s+"NULL\t";
    					else s=s+"'"+sMot[i]+"'\t";
    				}
    			}
    			my.closeConnection();
    			
    			return s;
    		}
    		}

    merci bcp de votre aide

  4. #4
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    typiquement,

    sMot=s.split("\t",LEN_DICO_OLET+1); produit un tableau de String ayant au plus LEN_DICO_OLET+1 elements mais peut donc en avoir moins (par exemple LEN_DICO_OLET-1 (c'est à dire de 0 à LEN_DICO_OLET-2).

    or dans la boucle for(int i=0;i<LEN_DICO_OLET;i++) { i peut avoir la valeur LEN_DICO_OLET-1
    et là sMot[i] depasse des index (car LEN_DICO_OLET-1>LEN_DICO_OLET-2).

    => pourquois pour le parcour du tableau sMot ne pas faire for(int i=0;i<sMot.length ;i++) { ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 87
    Par défaut
    en fait pour chaque table il a un nombre de colonne alors c'est pour ca je mets
    et je mets LEN_DICO_OLET+1 pour parcourir jusqua la fin du fichier
    car quand je mets ca commence par o cad sMot[0]

    d'ou l'utilsation de la boucle for avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int i=0;i<LEN_DICO_OLET;i++)
    beh je sais d'ou il vient le problem raison de plus qu'il marche pour une autre table
    a ton avis quest ce que je dois changer !!!!!!!!!!!!

  6. #6
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    mais que se passe t il si sMot.length < LEN_DICO_OLET ?

    car la methode split(separateur,max) donne une taille max
    par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    String chaine = "a:b:c";
    String[] tableau = chaine.split(":",2);
         -> donne un tableau de taille 2 ("a" et "b:c")
    String[] tableau2 = chaine.split(":",3);
         -> donne un tableau de taille 3 ("a" et "b" et "c")
    String[] tableau3 = chaine.split(":",5);
         -> donne un tableau de taille 3 ("a" et "b" et "c") (erreur si on parcour de 0 à  4)

Discussions similaires

  1. gestion d'une erreur
    Par Jeannotc dans le forum Bases de données
    Réponses: 8
    Dernier message: 25/06/2004, 18h04
  2. C++Builder fait une erreur de calcul
    Par gandf dans le forum C++Builder
    Réponses: 7
    Dernier message: 03/01/2004, 22h27
  3. [VB6] Source D'une erreur
    Par krest dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 16/07/2003, 17h33
  4. [procédure PG] Une erreur mystérieuse...ou pas
    Par doohan dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 09/07/2003, 17h16
  5. Ne pas formater une erreur
    Par Sylvain Leray dans le forum XMLRAD
    Réponses: 2
    Dernier message: 18/03/2003, 14h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo