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

  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)

  7. #7
    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 avec le meme code sauf pour une autre table ca passe bien et ca marche bien il importe toutes les lignes par contre pour cette table ca marche pas
    et pour ta boucle que tu mas proposé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(int i=0;i<sMot.length ;i++)
    ca marche pour cette table OLET le code passe mais il charge que quelque ligne il importe pas toute les lignes du fichier txt

    merci de ton aide

  8. #8
    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
    que se passe t il si sMot.length < LEN_DICO_OLET ?
    faut-il considérer que les élements sont null ?

    il manque probablement la gestion de ce cas de figure (ce qui entraine l'ArrayIndexOutOfBoundsException)
    dans la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(sMot.length==i) {
    .....
    }

  9. #9
    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 si je remplis tte les colonnes de l atable marche avec le code mais ils y en qui sont vide il maffiche cette erreeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Exception in thread "Thread-2" java.lang.ArrayIndexOutOfBoundsException: 9
    	at LoadTxt.insertLines(LoadTxt.java:984)
    	at LoadTxt.action(LoadTxt.java:479)
    	at LoadTxt.run(LoadTxt.java:154)
    voila le code de linsertion

    Code : 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
    if(sTypeFile.equals("Olet")){
    				
    				sMot=s.split("\t");
    				sql="insert into ta_olet values(";
    				sql=sql+sMot[0]+",";	//olet_comp_code   
    				sql=sql+sMot[1]+",";	//olet_comm_code
    				sql=sql+sMot[2]+",";	//olet_sch1  
    				sql=sql+sMot[3]+",";	// olet_sch2  
    				sql=sql+sMot[4]+",";	//olet_rat1  
    				sql=sql+sMot[5]+",";	//olet_rat2  
    				sql=sql+sMot[6]+",";	// olet_end1
    				sql=sql+sMot[7]+",";	//olet_end2 
    				sql=sql+sMot[8]+",";	//olet_body  
    	    sql=sql+sMot[9]+",";	// olet_ref  // il se plante ici 
    				sql=sql+sMot[10]+",";	// olet_type   
    				sql=sql+sMot[11]+")";	//olet_diam 
    				
    				
    				insertBuf=insertBuf+sql+"\n";
    				insertCount++;
    				if(insertCount>=1){
    				
    					insertDbDico();
    					//System.out.println("ok");
    					insertBuf="";
    					insertCount=0;
    				}
    			}

    et voila le code avec les modications que tu mas dis

    Code : 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
    47
    48
    49
    50
    	private String verifOlet(String s){
    		String[] sMot;
    		boolean bError;
    		String sError;
    		//String tmp;
     
    		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<sMot.length ;i++){
    					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<sMot.length ;i++){
    					if(sMot[i].length()<1)	s=s+"NULL\t";
    					else 
    						s=s+"'"+sMot[i]+"'\t";
    				}
    			}
    			my.closeConnection();
     
    			return s;
    		}
    		}

  10. #10
    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
    portant il marche pour la moitie de la table meme les colonnes sont vide a partir du colonne 9 et 10 et 11 .
    et si je les ai rempli ca passe bien et il importe tte la table
    merci

  11. #11
    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
    oui dans le cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sMot.length < LEN_DICO_OLET
    il faut le considerer les elements vides

  12. #12
    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
    si sMot.length < LEN_DICO_OLET cela veut-il dire que sMot est null ?

    si oui
    la boucle peut devenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            for(int i=0;i<sMot.length ;i++){
                if(sMot[i].length()<1)  s=s+"NULL\t";
                else 
                    s=s+"'"+sMot[i]+"'\t";
            }
            //gestion des éléments null (qui ne sont pas dans sMot) 
            for(int i = sMot.length; i<LEN_DICO_OLET; i++) {
                s=s+"NULL\t";
            }

  13. #13
    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 je veux qu'il teste sur chaque colonne sil est vide il la remplace avec NUll
    c pour ca jai mis

  14. #14
    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
    mon probleme maintenant c'est qu il importe pas tte les lignes s'il y a des colonnes qui sont vide par contre jai remplis ou il se bloque avec des valeurs
    l'importation marche bien et portant il importe tte les lignes du fichiet Txt et je les trouve dans la base de donnée

  15. #15
    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
    en fait je veux qu'il teste sur chaque colonne sil est vide il la remplace avec NUll
    c pour ca jai mis
    le problème n'est pas que sMot[i] est vide, c'est que sMot[i] n'existe pas

  16. #16
    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
    alors je dois metter quoi pour qu'il marche
    comme je t'ai dis jai rempris les colonnes par des 0 et l'importation ca marche bien 100%
    alors c ca ce que je comprends pas
    en plus avec le meme code et il y a des colonnes vide il les importe jusqu a la moitié de la table et il repmlace les colonnes vides avec dees NULL et apres il veut pas charger l'autre moitier

    merci pr ton aide

  17. #17
    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
    c'est pas un problème du fichier quand tu fais sMot=s.split("\t",LEN_DICO_OLET+1); ?

    essaie de voir le découpage ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sMot=s.split("\t",LEN_DICO_OLET+1);
    //test
    for(int i=0; i<sMot.length(); i++ {
        System.out.println("Valeur de sMot["+i+"] => "+sMot[i]);
    }

Discussions similaires

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

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