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 :

Probleme avec les dates et JDBC


Sujet :

avec Java

  1. #1
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Avril 2016
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2016
    Messages : 60
    Points : 58
    Points
    58
    Par défaut Probleme avec les dates et JDBC
    Bonjour Messieurs, merci à tout ce qui ont repondu à mon precedent sujet intitulé probleme avec les date, mon probleme n'a toujours pas ete resolu mais je prefere reposer dans une nouvelle discution. En effet j'utilise une architecture MVC :
    La partie entite je l'ai declaré comme ca
    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
    //import java.util.Date;
    import java.sql.Date;
    public class Objet {
    	private String titre;
    	private String nomAuteur;
    	private java.util.Date datePublication;
    	private int nombrePage;
    	private String categorie;
    	private String prenomAuteur;
    	private String edition;
    	public Objet() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    }
    elle contient tous les getter et setter dans mon code,
    partie model je fais une requete preparee d'ajout comme suit private static final String AJOUTOBJET="INSERT INTO Objet (titre_Objet,nom_Auteur,date_Publication,nbre_De_Page,Categorie,Prenom_Auteur,Edition) values(?,?,?,?,?,?,?)";
    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
    public boolean ajouter(Objet objet) {
    		PreparedStatement ps=null;	
    		Boolean estAjoute=false;
    		try
    		{
    			ps=ConnexionProjet.getInstance().prepareStatement(AJOUTOBJET);
    			ps.setString(1, objet.getTitre());
                ps.setString(2, objet.getNomAuteur());
                ps.setDate(3, (Date) objet.getDatePublication());
                ps.setInt(4, objet.getNombrePage());
                ps.setString(5, objet.getCategorie());
                ps.setString(6, objet.getPrenomAuteur());
                ps.setString(7, objet.getEdition());
                if(ps.executeUpdate() >0)
                estAjoute=true;
     
    		}
    		catch(Exception e){
     
    		}
    		return estAjoute;
    	}
    cote views je montre la partie qui concerne la creation du champ Jdatechooser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Locale locale = Locale.getDefault();
    		 DateFormat df= DateFormat.getDateInstance(DateFormat.DATE_FIELD, locale);
    		JDateChooser  txtDateDePublication = new JDateChooser();
    		txtDateDePublication.setDateFormatString("dd-MM-yyyy");
    sachant que les df et txtDateDePublication sont declarés global
    Cote controllers ou traitement
    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
    public void enregistrer() {
    		Objet obj=new Objet();
    		ObjetBD objBD=new ObjetBD();
    		obj.setTitre(frmO.txtTitre.getText());
    		obj.setNomAuteur(frmO.textFieldNom.getText());
    		obj.setDatePublication(( frmO.txtDateDePublication.getDateEditor().getDate()));
    		obj.setNombrePage(Integer.parseInt(frmO.textFieldtxtNombreDePages.getText()));
    		obj.setCategorie(frmO.txtCategorie.getText());
    		obj.setPrenomAuteur(frmO.txtPrenom.getText());
    		obj.setEdition(frmO.txtEditeur.getText());
     
    		if(objBD.ajouter(obj))
            {
                JOptionPane.showMessageDialog(null,"L'AJOUT EFFECTUE AVEC SUCCES","AJOUT",JOptionPane.INFORMATION_MESSAGE);
            }
            else 
                JOptionPane.showMessageDialog(null,"ECHEC D'AJOUT","ERREUR", JOptionPane.ERROR_MESSAGE);
    	}
    quanf j'excute j'obtient echec aidez moi sans quoi je ne sais plus quoi faire et j'ajoute pourquoi je suis certain que c'est le champ datePublication qui me cause probleme, quand je mets ce champ en commentaire l'ajout s'effectue avec une date null dans la bd

  2. #2
    Membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Avril 2016
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2016
    Messages : 60
    Points : 58
    Points
    58
    Par défaut
    J'ajoute que le type du champ datePublication est Date et non java. util.Date

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2015
    Messages : 21
    Points : 37
    Points
    37
    Par défaut
    Si le problème viens à l'insertion en BDD :

    - Sans JPA : Regarde du coté du formatage de ta date en BDD (le CODE d'erreur SQL serait bienvenue).(donc avant l'insertion sui vant le SGDB sa peux etre du 'yyyy/MM/dd' ou si c'est pré-réglé sa peut être du 'dd-MM-yyyy' ( vu sur Oracle 11))
    - Avec JPA : Regarde bien si tu as bien l'annotation @Temporal(TemporalType.DATE)

    Si sa peux te donner une piste...

  4. #4
    Modérateur

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

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

    Citation Envoyé par ouste4863 Voir le message
    J'ajoute que le type du champ datePublication est Date et non java. util.Date
    à l'intérieur d'un PreparedStatement, le type d'une date doit être java.sql.Date, un point c'est tout. C'est pas toi qui décide.

    Notamment ce (Date) à l'intérieur de ps.setDate(3, (Date) objet.getDatePublication());, il y a de fortes chances que ce soit n'importe quoi.
    Déjà tu en nous as pas dit quel type Date c'est : java.util.Date ou java.sql.Date ou autre chose. De toute façon le seul type acceptable c'est java.sql.Date, tu n'as pas le choix.

    Mais surtout, il n'existe aucune raison valable de faire un cast avec (Date). Un cast est incapable de transformer un objet d'une classe en un objet d'une autre classe. Donc si objet.getDatePublication() ne renvoie pas ce qu'il faut, ce ne sera pas résolu avec (Date). Ça va seulement déclencher une ClassCastException puisque le cast est invalide, et c'est probablement ça qui arrête ton programme à cet endroit. Si tu savais regarder les logs, c'est probablement ce que tu verrais.

    Donc, solutions :

    - si objet.getDatePublication() renvoie autre chose qu'un java.util.Date ou un java.sql.Date ou un java.time.LocalDate, pourquoi ? Ça n'a aucun sens. Change ça pour qu'il renvoie l'un de ces trois-là.
    - s'il renvoie java.util.Date, il faut le convertir en java.sql.Date avant de l'envoyer dans un PreparedStatement. Ça se fait avec new java.sql.Date(maDate.getTime()) .
    - s'il renvoie java.time.LocalDate, il faut le convertir en java.sql.Date avant de l'envoyer dans un PreparedStatement. Ça se fait avec new java.sql.Date(maDate.atStartOfDay().toInstant(ZoneOffset.UTC).toEpochMilli()) . Autrement dit, utiliser java.sql directement avec java.time, ça pose encore quelques quacks et c'est pour ça que les gens utilisent des trucs comme Hibernate.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Probleme avec les dates
    Par guitariste dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 15/07/2007, 12h03
  2. [EJBQL] [EJB2] probleme avec les dates
    Par amine1980 dans le forum Java EE
    Réponses: 2
    Dernier message: 16/02/2007, 18h09
  3. [SQL Server 2000]Probleme avec les dates !
    Par ChristopheOce dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/10/2006, 16h58
  4. Help!! Probleme avec les dates sur SQL SERVER
    Par Nadaa dans le forum MS SQL Server
    Réponses: 16
    Dernier message: 03/08/2006, 17h55
  5. Grop probleme avec les date
    Par stinger000 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/04/2006, 14h49

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