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

Java Discussion :

Problème écriture d'un fichier CSV avec JAVA


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2022
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2022
    Messages : 72
    Points : 37
    Points
    37
    Par défaut Problème écriture d'un fichier CSV avec JAVA
    Bonjour tout le monde,

    Je me tourne vers vous afin de trouvez une solution à mon problème.

    J'ai un code que j'ai développer via Eclipse, le but de celui-ci est de récupérer des infos sur un fichier XML et les réécrire dans un fichier CSV mais lors de la réécriture mon code boucle la même ligne...

    Voici la partie de mon code qui pose problème :

    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
    51
    52
    53
    54
    55
    56
    57
            System.out.println("connect");
            String queryString = "select CustomerId, CustomerName from dbo.SaleDocument where DocumentNumber='" + nCMD + "';";
            Statement sqlStatement = connection.createStatement();
            ResultSet rs = sqlStatement.executeQuery(queryString);
            System.out.println(rs.next());
            String CodeClient = rs.getString("CustomerId");
            String NomClient = rs.getString("CustomerName");
            queryString = "select  itemId, round(UnitDiscountRate,0) as UnitDiscountRate, CustomerId, CustomerName from dbo.SaleDocument inner join dbo.SaleDocumentLine on dbo.SaleDocument.Id = dbo.SaleDocumentLine.DocumentId where DocumentNumber='" + nCMD + "';";
            sqlStatement = connection.createStatement();
            rs = sqlStatement.executeQuery(queryString);
            List<Object> dv = new ArrayList();
            while (rs.next()) {
              String itemId = rs.getString("ItemId");
              int remise = (new BigDecimal(rs.getString("UnitDiscountRate"))).intValue();
              System.out.println("-----" + nCMD);
              System.out.println("-----" + itemId);
              System.out.println("-----" + remise);
              String[] arrayOfString = { itemId, 
                  ""+remise };
              dv.add(arrayOfString);
     
            String[] ligne = { nCMD, 
                nBL, 
                dtf.format(now), 
                CodeClient, 
                NomClient,
                nREFXCVE,
                REFXARTElement.getTextContent(), 
                QuantiteElement.getTextContent(), 
                TRXCVLElement.getTextContent(),
     
            };
     
            file.append(String.valueOf(ligne[0]) + 
                ";" + ligne[1] + 
                ";" + ligne[2] + 
                ";" + ligne[3] + 
                ";" + ligne[4] + 
                ";" + ligne[5] + 
                ";" + ligne[6] + 
                ";" + ligne[7] + 
                ";" + ligne[8] +
                "\n");
     
            System.out.println(ligne[4]);
            data.add(ligne);
     
            }
          } catch (SQLException e) {
            System.out.println("erreur, non connect");
            e.printStackTrace();
          } finally { 
        	  file.flush();
        	  file.close();  
     
          }
        }
    et voici ce que je vois dans ma console lors de l'exécution de mon code :

    Code console : 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
    Document - N° document
    Document - Date
    Document - Nom du client
    Document - Numéro de commande du client
    Ligne - % remise
    NUMXCVE : DV28096
    NUMXBLI : BL00020309
    REFXART : PTCON454
    DV28096
    PTCON454
    janv. 29, 2024 9:04:34 AM com.microsoft.sqlserver.jdbc.TDSChannel enableSSL
    WARNING: TLSv1 was negotiated. Please update server and client to use TLSv1.2 at minimum.
    connecté
    true
    true
    -----DV28096
    -----IGI19P870
    -----0
    -----DV28096
    -----NNFAC007
    -----0
    -----DV28096
    -----NNFSS987
    -----0
    -----DV28096
    -----OFCC159
    -----0
    -----DV28096
    -----OHCACS644
    -----0
    5
    SQL query executed successfully
    Ajout de la ligne [DV28096, BL00020309, 29/01/2024, MAEFRE1, ANIMAZONE, C-#1979_5672372273473, PTCON454, 1,00, 0]
    ANIMAZONE
    Ajout de la ligne [DV28096, BL00020309, 29/01/2024, MAEFRE1, ANIMAZONE, C-#1979_5672372273473, PTCON454, 1,00, 0]
    ANIMAZONE
    Ajout de la ligne [DV28096, BL00020309, 29/01/2024, MAEFRE1, ANIMAZONE, C-#1979_5672372273473, PTCON454, 1,00, 0]
    ANIMAZONE
    Ajout de la ligne [DV28096, BL00020309, 29/01/2024, MAEFRE1, ANIMAZONE, C-#1979_5672372273473, PTCON454, 1,00, 0]
    ANIMAZONE
    Ajout de la ligne [DV28096, BL00020309, 29/01/2024, MAEFRE1, ANIMAZONE, C-#1979_5672372273473, PTCON454, 1,00, 0]
    ANIMAZONE

    Trouvez-vous une erreur ou une incohérence car de mon cotes je ne trouve rien....

    Bonne journée !!

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 463
    Points : 897
    Points
    897
    Billets dans le blog
    5
    Par défaut
    Formater le code avec les balise code serait la moindre des choses.

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 463
    Points : 897
    Points
    897
    Billets dans le blog
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Statement sqlStatement = connection.createStatement();
    Non, Statement est une ressource qui doit être fermée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    try(Statement sqlStatement = connection.createStatement()){
    //Traitement
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String queryString = "select CustomerId, CustomerName from dbo.SaleDocument where DocumentNumber='" + nCMD + "';";
    Statement sqlStatement = connection.createStatement();
    Surtout pas, à cause de l'injection de dépendance.

    On utilise les prepared statment, qui tout comme le statment doit être fermé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    String queryString = "select CustomerId, CustomerName from dbo.SaleDocument where DocumentNumber=?";
     
    try(PreparedStatment ps = connection.prepareStatement(sql)){
        ps.setString(1,nCMD);
    }
    Ensuite, on peut faire un resultSet qui doitêtre fermé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    try(rs = ps.executeQuery()){
     
    }
    Le problème dans ton code (erreur d'étourderie que j'ai fait), c'est qu'il faut au moins "charger" le premier tuple.
    Soit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while(rs.next()){
    //Faire le traitement
    }

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 608
    Points
    21 608
    Par défaut
    Hello,

    c'est normal que ce soit toujours la même ligne.

    Les seuls trucs que tu extraits de ta requête SQL, c'est les variables itemId et remise.

    Que des trucs dont tu ne te sers pas dans ta variable ligne.

    Tu t'attendais à obtenir quel résultat, à la place de celui-ci ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Les fichiers CSV avec Java
    Par thierryler dans le forum Documents
    Réponses: 18
    Dernier message: 21/09/2011, 15h14
  2. Java et XML : Traitement d'un fichier XML avec JAVA
    Par nice dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 18/05/2006, 21h24
  3. [XML] Comment parser ce fichier XML avec java !
    Par jlassira dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 13/03/2006, 12h56

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