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 :

[MySQL] utilisation de champs date et heure


Sujet :

JDBC Java

  1. #1
    Membre régulier Avatar de ultracoxy
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 116
    Points : 74
    Points
    74
    Par défaut [MySQL] utilisation de champs date et heure
    B'jour,

    J'ai une petite question sur l'insertion en BDD de champs Date et Time.

    Ma BDD est sous MySQL, avec un table ayant entre autres les champs :
    - Rdate de type sql DATE
    - Rheure de type sql TIME

    Au niveau de mon application, actuellement, mes date et heure sont stockés dans un tableau de byte.

    Qu'est il préférable de faire ? Transformer ceux-ci en String, en java.util.Date, ou en java.sql.Date ? Pour la requête sql d'INSERT, dois-je écrire la requête avec des champs String ou puis-je utiliser l'un des type Date ?

    Merci de vos lumières...

  2. #2
    Membre éclairé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 346
    Points : 737
    Points
    737
    Par défaut
    Normalement, c'est toujours préférable de manipuler des dates en java.util.Date (java.sql.Date est à proscrire car inexacte).

    Aprés, lors de l'insertion en base de données, c'est parfois plus pratique de les insérer en String (je ne sais ce que tu utilise comme méthod d'accés aux données). A part si des méthode éxistent pour faire le translation de java.util.Date en String (hibernate connait grace au dialect les manière de gérer les dates des bases de données et est donc capable de s'occuper pour toi de passe de Date en String) fait la toi même en t'aidant par exemple de l'objet java.text.SimpleDateFormat qui pemet facilement de formater en String des Date.

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Citation Envoyé par woodwai
    ... (java.sql.Date est à proscrire car inexacte).
    Tu peu développer stp ?
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

  4. #4
    Membre éclairé

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2002
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juillet 2002
    Messages : 346
    Points : 737
    Points
    737
    Par défaut
    C'est juste ce que tout le monde conseil, ne pas utiliser java.sql.Date mais toujours java.util.Date.

    Mais bon, je n'ai jamais réellement creuser. A part le fait que java.sql.Date ne garde par l'heure mais juste la date (alors que java.util.Date est en fait un Timestamp).

    En fait, le problème aussi du java.sql.Date est qu'il ne contient que trés peut de méthode, il sert juste à formaliser une date avant de l'enregistrer en base de données (trés peu de méthode par rapport au java.util.Date). En fait, dès que l'ont veut manipuler des java.sql.Date, on va d'abord les passer en java.util.Date.

    Mais aprés tout, c'est juste un avis, mais moi je ne m'en suis jamais servit!

  5. #5
    Membre régulier Avatar de ultracoxy
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 116
    Points : 74
    Points
    74
    Par défaut
    J'utilise un pool de connexion JDBC pour accéder à ma bdd.

    Je pense que je vais transformer mon tableau de byte en String tout le long de l'application.

    Mais dans ce cas, j'ai une autre question :
    Quand j'aurai inséré mes données date et heure dans ma bdd, lorsque je vais les lire je vais récupérer quoi : un getDate() ? un getString() ? (Sachant que ces champs sont de type sql DATE et TIME).

  6. #6
    Membre régulier Avatar de ultracoxy
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 116
    Points : 74
    Points
    74
    Par défaut
    D'ailleurs, j'ai le même souci qui se pose pour mon champs image, j'hésite entre le conserver en tableau de Bytes ou le transformer en type Blob : je vote pour Byte[] ?

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Pour infos :

    java.sql.Date extends java.util.Date donc, autant de méthodes
    java.sql.Time extends java.util.Date donc, autant de méthodes
    java.sql.Timestamp extends java.util.Date donc...

    Elles ont même des méthodes en plus
    • toString() version implémentée qui retourne yyyy-mm-dd
    • valueOf(String) qui retourne une Date

    ça, c'est un premier point

    Second point :

    les classes java.sql.Date, Time et Timestamp sont des wrapper de type JDBC

    Date maintiens uniquement les données relatives à la date
    Time les données relatives à l'heure
    et Timestamp les deux !

    Sur les ResultSet il existe 3 accesseurs disctinct pour les 3 types

    rs.getDate()
    rs.getTime()
    rs.getTimestamp()

    idem pour les set sur les preparedStatement

    Donc non, c'est totalement faux de dire "java.sql.Date est à proscrire car inexacte"

    Le mieux pour la question initiale est donc de stocker les informations dans des java.util.Date (ils le sont déjà par l'héritage) et non dans des tableaux de bytes et pour les requêtes, de les gérer en type associés à la structure de la table (java.sql.Date et java.sql.Time) en utilisant bien les preparedStatement et les setDate() et setTime().

    pour la lecture, getDate et getTime
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

  8. #8
    Membre régulier Avatar de ultracoxy
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 116
    Points : 74
    Points
    74
    Par défaut
    Merci de vos explications, elles ont été très claires.

  9. #9
    Membre régulier Avatar de ultracoxy
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 116
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par ultracoxy
    D'ailleurs, j'ai le même souci qui se pose pour mon champs image, j'hésite entre le conserver en tableau de Bytes ou le transformer en type Blob : je vote pour Byte[] ?
    Qu'en pensez-vous ?

  10. #10
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    plus délicat à traiter.
    Si tu as des informations plus typées, pourquoi ne pas utiliser un format d'image directement sinon, byte[] est dans tous les cas mieux que blob, ce dernier est un type BDD donc on evite de l'utiliser dans les POJO
    Clic me...
    CV en ligne

    Il y a 10 types de personnes, celui qui connait le binaire, et l'autre...

    Pas de réponse en MP...Merci

  11. #11
    Membre régulier Avatar de ultracoxy
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 116
    Points : 74
    Points
    74
    Par défaut
    C'est à dire que j'ai trois champs à stoquer dans ma bdd : une image (2 formats possibles), une video (3 formats possibles) et un son audio.

    Pour l'instant j'ai déclarer trois colonnes Image, Video, Audio de type BLOB dans ma base (je sais qu'il eut été préférable de stoquer ces données dans un fichier et de stoquer le chemin d'accès au fichier dans ma bdd, mais on m'a demandé de faire une version de demo où je stoque ces données directement dans la bdd).

    Du coup, j'ai conserver des types bytes[] dans mes classes java (et je transforme ce type en flux dans ma classe de DAO pour insérer mon tableau en bdd). C'est seulement quand je voudrai afficher un de ces éléments (imge, vidéo, audio) que je me soucierai du type. Cela est-il la bonne approche ?

Discussions similaires

  1. [MySQL] [MYSQL] Grouper un champ date sans prendre en compte les heures
    Par sandddy dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 04/01/2013, 15h16
  2. Réponses: 27
    Dernier message: 05/09/2008, 00h07
  3. Réponses: 5
    Dernier message: 26/06/2007, 11h35
  4. [SQL] un champ Timestamp ou deux champs Date et Heure?
    Par davmaster62 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 25/02/2006, 23h04

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