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

avec Java Discussion :

Erreur de syntaxe lors de la conversion d'une valeur datetime


Sujet :

avec Java

  1. #1
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 272
    Points : 59
    Points
    59
    Par défaut Erreur de syntaxe lors de la conversion d'une valeur datetime
    Salut tout le monde

    j'ai fait un programme qui permet de récupérer des données a partir d'une table sous SqlServer2000 et il les affiche dans un JTable.
    J'ai fais 4 classe :

    Classe 1 : Pour effectuer la connexion avec la BDD

    Classe 2 : La ou j'ai mit ma requête, voila :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	public static ResultSet afficherClient(Date d1, Date d2) throws Exception {
    		String query  = "Select * from Incident where Date_cou BETWEEN '"+d1+"' and '"+d2+"'" ;  
     
    		return connexion.select(query);
     
    	}
    public static ResultSet nbreLigne(Date d1,Date d2) throws Exception {
    		String query = "select count (*) from Incident where Date_cou BETWEEN '"+d1+"' and '"+d2+'" ;  
     
    		return connexion.select(query);
     
    	}
    Classe 3 : c'est la classe qui permet de remplir le JTable :

    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
    static JTable remplir(ResultSet rs,ResultSet rs1) {
    	nombrecolone = rs.getMetaData().getColumnCount();//le nbre de colonne
    	String[] LesColones = new String[nombrecolone];// creer un tableau selon le nbre de colonne 
    	for (int k = 1; k <= nombrecolone; k++) {// remplir le tableau qui contient les colonne 
    		LesColones[k - 1] = rs.getMetaData().getColumnName(k);
    	}
    	while (rs1.next()) {    L'erreur est a ce niveau !
    		nombreligne=rs1.getInt(1);	
    	}
    	ligne = new String[nombreligne][nombrecolone];
    
    	int j = 0;
    	while (rs.next()) {
    		for (int i = 1; i <= nombrecolone; i++) {
    			int h = i - 1;
    			ligne[j][h] = rs.getString(i);
    		}
    		j++;
    	}
    	JTable tableau = new JTable(ligne, LesColones);
    Classe 4 : la classe qui m'ouvre la fenetre :
    Dans la fenetre il y a deux champs JTextField pour faire entrer les deux date avec un boutton c adire l'utilisateur il entre les deux dates et il clik sur le boutton pour qu'il voit l'affichage du tableau :

    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
    58
    59
    60
    61
     
     
                           :
                           :
                           :
    //code pr afficher le textfieled et le bouton ...
     
    		ResultSet rs = aa.afficherClient(qq1,qq2);
    		ResultSet rs1 = aa.nbreLigne();// pr copter le nbre de ligne 
     
     
     
    		afficher a = new afficher();
    	    final JTable tt= a.remplir(rs, rs1);
    	    inputPanel.add(tt).setVisible(false);	
     
     
     
     
     
     
    	    c.add(inputPanel);
     
    		//this.getContentPane().add(new JScrollPane(tt)).setVisible(false);
    		jButton.addMouseListener(new java.awt.event.MouseAdapter(){
     
    			public void mouseClicked(java.awt.event.MouseEvent e) {
    				SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
     
    			    java.util.Date do1 = null;
    				try {
    					do1 = sdf.parse(da.getText());
    					System.out.println("  "+do1);
    				} catch (ParseException e1) {
    					// TODO Auto-generated catch block
    					e1.printStackTrace();
    				}
     
     
     
     
    				java.util.Date do2 = null;
    				try {
    					do2 = sdf.parse(te.getText());
    				} catch (ParseException e1) {
    					// TODO Auto-generated catch block
    					e1.printStackTrace();
    				}
    				java.sql.Date qq1 = new java.sql.Date(do1.getTime());
    				java.sql.Date qq2 = new java.sql.Date(do2.getTime());
     
    				System.out.println(qq1);
    				inputPanel.add(tt).setVisible(true);
     
    			}
    	});
     
     
     
     
    	}
    Mais je recoit une erreur des l'exécution du programme, L'erreur :
    Erreur de syntaxe lors de la conversion d'une valeur datetime à partir d'une chaine de caractère
    Le probleme est dans la classe 3 qui remplit le JTable, dans " while (rs1.next())"

    Je sais pas comment faire pour corrigé cette erreur !

    Pourriez vous m'aider SVP

    MERCI.

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2011
    Messages : 214
    Points : 338
    Points
    338
    Par défaut
    Bonjour,

    C'est un message d'erreur SQL Server.


    Quand tu concatènes une String avec un autre objet, c'est la méthode toString() de cet objet qui est utilisée. Or Date.toString() ne retourne pas la date sous un format qui correspond à la syntaxe SQL Server:
    Citation Envoyé par info3licen Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		String query  = "Select * from Incident where Date_cou BETWEEN '"+d1+"' and '"+d2+"'" ;
    Il n'arrive donc pas à parser tes chaînes de caractères pour en faire des dates.

  3. #3
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 272
    Points : 59
    Points
    59
    Par défaut
    Merci -gma- pour votre réponse rapide

    Mais comment je vais faire pour qu'il puisse parser Mes chaînes de caractères pour en faire des dates. ?!

    Merci

  4. #4
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Vérifie 'affichage de tes dates sous SQL Server et utilises DateFormat pour formatter ta date comme le format utilisé sous SQL Server :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Date taDate;
    // là tu paramètre le format d'affichage lié à SQL Server
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); 
    String dateAuNouveauFormat= dateFormat.format(taDate);
    Voilà, après y'a peut être un format de Date Java qui est reconnu directement sous SQL Server, si quelqu'un a encore mieux comme soluce, qu'il n'hésite pas.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  5. #5
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 272
    Points : 59
    Points
    59
    Par défaut Ou je fais l'appel de mes fonction ?!
    Salut

    Merci Robin56 pour votre réponse.

    Voila donc j'ai essai de faire ce que vous m'avez proposé:

    Mais la je rencontre un autre probleme :


    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    public class Fenetre extends JFrame {
    	
    	public Fenetre() throws Exception {
    
    String j1;
    String j2;
    
     String datDebFormat = null;
     String datFinFormat = null
    		this.setLocationRelativeTo(null);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.setTitle("JTable");
    		this.setSize(800, 600);
    		Container c;
    		c = getContentPane();
    		c.setLayout(new BorderLayout());
    
    		JPanel inputPanel = new JPanel();
    		inputPanel.setPreferredSize(new Dimension(800, 600));
    		JLabel jLabel10 = new JLabel();
    		jLabel10.setBounds(new Rectangle(30, 248, 132, 25));
    		jLabel10.setText("    De : ");
    		
    		inputPanel.add(jLabel10);
    		JTextField da = new JTextField(8);
    		
    		inputPanel.add(da);
    		JLabel jLabel1 = new JLabel();
    		jLabel1.setBounds(new Rectangle(447, 119, 102, 37));
    		jLabel1.setText("    A : ");
    		inputPanel.add(jLabel1);
    		JTextField te = new JTextField(8);
    		
    		inputPanel.add(te);
    		
    		JButton jButton = new JButton();
    		jButton.setBounds(new Rectangle(137, 100, 80, 50));
    		jButton.setText("OK");
    		inputPanel.add(jButton);
    		
    		c.add(inputPanel);
    		
    		JPanel tabPan = new JPanel();
    		
    		
    	DaoClient aa = new DaoClient("sa", "1302", "Sonalgaz");
            ResultSet rs = aa.afficherClient( datDebFormat, datFinFormat);// resultat de select from table
    	ResultSet rs1 = aa.nbreLigne();// pr copter le nbre de ligne 
    
    	afficher a = new afficher();
    	    final JTable tt= a.remplir(rs, rs1);
    	    inputPanel.add(tt).setVisible(false);	
    		
    	    c.add(inputPanel);
    	
    		jButton.addMouseListener(new java.awt.event.MouseAdapter(){
    			
    			public void mouseClicked(java.awt.event.MouseEvent e) {
    				DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
        j1 = da.getText();
       j2 = te.getText();
    			  
    
                        try{
                   Date d1 = (Date) sdf.parse(j1);
                   Date d2 = (Date) sdf.parse(j2);
    
           datDebFormat= sdf.format(d1);       La est l'erreur
           datFinFormat= sdf.format(d2);			
    				inputPanel.add(tt).setVisible(true);
    				
    			}
    	});
    	
    		
    
    		
    	}
    	
    
    
    }
    et la il m'affiche une erreur au niveau des variable "datDebFormat & datFnFormat"

    Erreur : "The final local variable datDebFormat cannot be assigned, since it is defined in an enclosing type"


    Donc c'est l'appel des fonction qui me cause probleme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     ResultSet rs = aa.afficherClient( datDebFormat, datFinFormat);// resultat de select from table
    	ResultSet rs1 = aa.nbreLigne();// pr copter le nbre de ligne 
     
    	afficher a = new afficher();
    	    final JTable tt= a.remplir(rs, rs1);
    Mais la je sais pas comment faire, Ou je ferais cet appel ?!

    y a t'il une autre proposition ?!

    Merci pour votre attention

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    N'initialise pas les deux String avec null, tu as aussi oublié un ";"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String datDebFormat;
     String datFinFormat;
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String datDebFormat = "";
     String datFinFormat = "";
    A+.

  7. #7
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    La meilleure solution c'est d'utiliser un PreparedStatement
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  8. #8
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 272
    Points : 59
    Points
    59
    Par défaut
    Bonjour, Merci pour vos réponse

    Pour andry.aime j'ai ajouté mon point virgule et j'ai initialisé mes variable avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String datDebFormat = "";
     String datFinFormat = "";
    Mais j'ai toujours cette erreur :

    The final local variable datDebFormat cannot be assigned, since it is defined in an enclosing type
    Elle apparait sur eclipse avec un croix rouge !

    Franchement je n'arrive pas a trouvé une solution pour ce probleme agaçant !

    Pour Nemek :

    J'ai pas pue le faire avec des preparedStatement puisque par la suite dans la classe Afficher pour remplir mon JTable j'aurais besoin d'une result set.

  9. #9
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Points : 7 083
    Points
    7 083
    Par défaut
    Regarde bien le prepared statement et surtout les méthodes execute ;-)
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  10. #10
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2007
    Messages
    697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 697
    Points : 1 241
    Points
    1 241
    Par défaut
    The final local variable datDebFormat cannot be assigned, since it is defined in an enclosing type
    Le fait est que Java ne permet pas d'accéder aux variables définies dans les classes englobantes sauf si elles sont définies final (donc seulement en lecture).

    L'astuce est donc d'utiliser un tableau d'un seul case défini en temps que final. En gros on remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    String datDebFormat = null; 
    String datFinFormat = null;
    ...
    jButton.addMouseListener(new java.awt.event.MouseAdapter(){   
       public void mouseClicked(java.awt.event.MouseEvent e) {
        DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); 
        ... 
        datDebFormat= sdf.format(d1);     //  La est l'erreur     
        datFinFormat= sdf.format(d2);
      }
    }
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    final String[] datDebFormat = new String[1]; 
    final String[] datFinFormat = new String[1]; 
    ...
    jButton.addMouseListener(new java.awt.event.MouseAdapter(){  
      public void mouseClicked(java.awt.event.MouseEvent e) {
        DateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); 
        ...  
        datDebFormat[0] = sdf.format(d1);
        datFinFormat[0] = sdf.format(d2);
      }
    }

  11. #11
    Membre du Club
    Inscrit en
    Avril 2009
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 272
    Points : 59
    Points
    59
    Par défaut
    Merci atha2 votre solution ma aidé et ma permet d'évité l'erreur qui m'empêchait d'exécuté mon programme

    Mais la je me retrouve avec ma premier erreur

    Erreur de syntaxe lors de la conversion d'une valeur datetime à partir d'une chaine de caractère
    Mais cette erreur vient avec que je clique sur mon bouton ok c'est a dire avant que je puisse faire entré mes deux date sur les deux champs text!!!

Discussions similaires

  1. [Free Pascal] Erreur exitcode 217 lors de la conversion d'une image en tableau
    Par _Hope_ dans le forum Free Pascal
    Réponses: 7
    Dernier message: 18/05/2009, 20h54
  2. [MySQL] Erreur de syntaxe lors de l'import de fichier .sql
    Par dadoo91 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 29/05/2008, 07h47
  3. Erreur lors de la conversion d'une requête SELECT en DELETE
    Par SamLeChiseuji dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 11/07/2007, 15h09
  4. Erreur de syntaxe lors de la construction d'un lien
    Par sosophie dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/06/2007, 17h02
  5. [PEAR][Services_Google] Erreur de syntaxe lors de son utilisation
    Par blueice dans le forum Bibliothèques et frameworks
    Réponses: 8
    Dernier message: 17/05/2006, 11h13

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