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 :

Problème de formatage de date


Sujet :

JDBC Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Problème de formatage de date
    Bonjour,

    J'exécute une requête du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    "Select "
    + "	DATE "
    + "from table "
    + "where {ma_condition} "
    Cette requête, exécuté dans SqlDevelopper et dans SqlPlus, renvoie la date en format français.

    Si je l'exécute dans ma servlet, voire même dans un code de test, la date m'est renvoyée en américain.


    Voici le code utilisé pour ouvrir ma connexion Oracle de type thin via jdbc :

    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
     
    private static String MaBase= "(DESCRIPTION="
    			+ "(ADDRESS = (PROTOCOL = TCP)(HOST = serveur1 )(PORT = 1521)) "
    			+ "(ADDRESS = (PROTOCOL = TCP)(HOST = serveur2 )(PORT = 1521)) "
    			+ "(LOAD_BALANCE = yes)(FAILOVER = yes)(CONNECT_DATA =(SERVICE_NAME = MABASE)(FAILOVER_MODE =(TYPE = SELECT)"
    			+ "(METHOD = BASIC)(RETRIES = 300)(DELAY = 2))))";
    	private static String url = "jdbc:oracle:thin:@" + MaBase; // + ";InitializationString=ALTER SESSION SET NLS_DATE_FORMAT='DD/MM/YYYY'";
    	private static String util = "utilisateur";
    	private static String mdp = "motdepasse";
     
    	static {
    		try {
    			Class.forName("oracle.jdbc.driver.OracleDriver");
    			try {
    				DriverManager.registerDriver(new OracleDriver());
    		        connexion = DriverManager.getConnection(url,util,mdp);
    				//connexion = DriverManager.getConnection(url, util, mdp);
     
    		        PreparedStatement ps = connexion.prepareStatement("alter session set NLS_DATE_FORMAT = 'DD/MM/YYYY'");
    		        ps.execute();
    		        ps.close();
    Comme vous le voyez, j'ai essayé ci-dessus de forcer le format de la date, sans succès.

    Je récupère le code comme étant une date :
    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
     
    public List<Objet> listeObjets() {
     
    		List<Objet> objets = new ArrayList<Objet>();
    		Connection conn = SingletonConnection.getConnexion();
    		try {
    			PreparedStatement ps = conn.prepareStatement
    					("Select "
    + "	DATE "
    + "from table "
    + "where {ma_condition} ";
    			ResultSet rs = ps.executeQuery();
    			while (rs.next()) {
    				Objet objet = new Objet();
    				objet.setDate(rs.getDate("DATE"));
    ...
     
    				objets.add(objet);
    			}
    			ps.close();
    Enfin voici le code qui me permet de tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public static void main(String[] args) {
    		IObjetsMetier metier = new ImplObjetsMetier();
     
    		List<Objet> objets = metier.listeObjets();
    		for (Objet o : objets) {
    			System.out.println(o.getDate());
    		}
     
    	}
    Qu'est ce qui peut expliquer cette différence entre SqlDevelopper/SqlPlus et mon application JEE ?

    Merci.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    L'explication est qu'une date n'a pas plus de format dans SQL que dans Java : si elle s'affiche en format "français" dans ton requêteur SQL c'est parce qu'il est paramétré pour l'afficher comme ça.

    En Java, par contre, l'affichage d'une valeur de type Date via sa méthode toString() (la méthode qui est appelée lorsque tu fais System.out.println( o.getDate() ); utilise un format par défaut qui est un format à l'américaine. Pour afficher des Date en Java avec un format autre, il faut utiliser la classe DateFormat, ou la classe SimpleDateFormat, qui permet d'indiquer explicitement un motif pour le format :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
    System.out.println( format.format( o.getDate() ) );

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Merci pour cette solution.
    Effectivement, les requeteurs que j'utilise s'appuie sur les variables d'environnement, ce qui n'est pas le cas de JEE.

    J'aurais dû y penser.


Discussions similaires

  1. j'ai un problème de formatage de date avec Mysql
    Par kanebody dans le forum Requêtes
    Réponses: 1
    Dernier message: 03/09/2009, 10h24
  2. Problème de formatage de date
    Par Shurka dans le forum Langage SQL
    Réponses: 3
    Dernier message: 30/11/2007, 15h31
  3. Problème de formatage des dates et heure dans une mshflexgrid
    Par Virtualité dans le forum VB 6 et antérieur
    Réponses: 20
    Dernier message: 27/11/2007, 14h07
  4. [Dates] problème de formatage des dates
    Par briviere dans le forum Langage
    Réponses: 3
    Dernier message: 14/10/2007, 19h40
  5. Firefox: problème de formatage de date
    Par ptr83 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/10/2006, 16h09

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