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 :

Gestion differente du type number entre hsqldb et oracle


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Points : 41
    Points
    41
    Par défaut Gestion differente du type number entre hsqldb et oracle
    Bonjour a tous,

    J'ai une application qui tourne sur une base oracle et qui utilise hsqldb pour les test unitaires,
    Le problème est le suivant : lorsque sur oracle je défini une colonne de cette facon : "COL_NAME" NUMBER(28,10), si j'insere 10.26 j'obtiens bien 10.26 avec l'application or dès que j'effectue la même chose avec hsqldb j'ai pour résultat 10.26000000,
    J'ai cherché un paramêtre de configuration pour hsqldb en vain ...

    (Désolé de poster dans cette section mais cette problématique a surement plus souvent été rencontré par des dev JAVA que des dba)

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    "10.26000000" ce n'est pas un nombre, c'est une chaine de caractère. Si tu as un number dans ta base de données et que tu as ça au final, c'est que tu as (mal) convertit en String quelque part. Donc la question fondamentale est de savoir comment tu récupère cette donnée et qu'est-ce que tu lui fais subir. Il ressemble à quoi ton unit test?

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Points : 41
    Points
    41
    Par défaut
    Merci, mais le code utilisé est strictement le même lors du fonctionnement normal. La seul diff entre TU est le fonctionnement normal viens du SGBD.
    Il me suffit de lancer en débug l'application & le TU pour voir que le problème est visible dans l'entité juste après le load de la base (il s'agit bien de BigDecimal dans mon entité). c'est pour ça que je penche pour une différence de gestion entre oracle et HSQLDB ou quelques chose qui s'en rapproche

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Citation Envoyé par mawguai Voir le message
    Merci, mais le code utilisé est strictement le même lors du fonctionnement normal. La seul diff entre TU est le fonctionnement normal viens du SGBD.
    Oui, ça je l'ai bien compris, tu as fais un code qui se comporte mal avec certains SGBD, mais tant que tu ne nous donnera pas le code, ce sera difficile de pouvoir t'aider un minimum

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Dans l'absolu, pour les calculs,; 10.2600000000 et 10.26, c'est la même chose. Si ton problème se situe quand tu affiche cette donnée à l'écran, c'est à toi de faire une conversion propre lors de l'affichage à l'écran, notamment en retirant les trailing 0. Je dirais que le driver hsqldb respecte strictement le type de la colonne en mettant exactement 10 décimales, alors que le driver oracle est plus proche de l'utilisateur humain et coupe les trailing / leading 0.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	   BigDecimal bd1 = new BigDecimal("10.26000000");
    	   BigDecimal bd2 = bd1.stripTrailingZeros();
    	   System.out.println(bd1);
    	   System.out.println(bd1.toPlainString());
    	   System.out.println(bd1.toEngineeringString());
    	   System.out.println(bd2);
    	   System.out.println(bd2.toPlainString());
    	   System.out.println(bd2.toEngineeringString());

  6. #6
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 40
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    L'idée est d'être "iso bug" avec le driver jdbc oracle afin d'effectuer des TU cohérent sur une base embedded hsqldb.

    J'essaye de surchager le type Decimal d'hibernate au niveau du dialect pour qu'il applique une fonction "maison" qui effectue le stripTrailingZeros() lors des lectures des decimaux avant la population du pojo hibernate.

    Pour l'instant sans succès...

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/03/2006, 17h23
  2. [VB6]Transferts VARIABLES de TYPE Utilisateurs entre FORMS
    Par KNITTEL dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 24/03/2006, 14h21
  3. Réponses: 14
    Dernier message: 13/03/2006, 18h49
  4. gestion de 3 comboBox liés entre elles
    Par michaelbob dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/11/2005, 08h58
  5. Variable Oracle de type number
    Par marti dans le forum Oracle
    Réponses: 1
    Dernier message: 16/08/2005, 11h04

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