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 :

JDBC , tableau et java.sql.Array


Sujet :

JDBC Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 30
    Par défaut JDBC , tableau et java.sql.Array
    Bonjour à tous,

    J'ai des problèmes pour récupérer des données contenues dans Oracle, je vous donne la table qui me pose des soucis :

    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
    create type type_materiel_loue as object
    (
    	num_materiel int
    );
     
    create type tab_materiel_loue as table of type_materiel_loue
     
    create table location
    (
        num_location int,
        date_location date,
        heure_debut int, 
        heure_fin int, check(heure_fin>heure_debut),
        materiel tab_materiel_loue,
        id_personne int,
        prix_paye int,
        constraint pk_location primary key (num_location),
        constraint fk_location_id_personne foreign key(id_personne) references personne(id_personne)
    ) 
    nested table materiel store as tab_materiel_loc;
    J'aimerais récupérer les valeurs du champ matériel mais je n'y arrive pas. J'ai suivi les indications données ici . Voila ce que ça me donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Array array = resultat.getArray("materiel");
    Object tableau = array.getArray();
    TypeMaterielLoue[] donneesTableau = (TypeMaterielLoue[])tableau;
    for(int i=0; i<donneesTableau.length ; i++){
    	System.out.println(donneesTableau[i]);
    }
    java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LCoeur.Mat.TypeMaterielLoue;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Array array = resultat.getArray("materiel");
    ResultSet tableau = array.getResultSet();
    while(tableau.next()){
            System.out.println((TypeMaterielLoue)tableau.getObject(1));
    }
    java.lang.ClassCastException: java.math.BigDecimal cannot be cast to Coeur.Mat.TypeMaterielLoue


    Voila j'espère que quelqu'un pourra m'éclairer sur mon probleme

    Cordialement

  2. #2
    Expert éminent
    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
    Par défaut
    assez naturellement, tu recois un tableau de bigdecimal (soit le type présent dans ta définition oracle). jdbc ne fait pas de mapping automatique entre des données brute venant de la DB et les types de tes classes java. Je code correct serrait donc, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Array array = resultat.getArray("materiel");
    ResultSet tableau = array.getResultSet();
    while(tableau.next()){
            System.out.println(tableau.getObject(1));
    }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 30
    Par défaut
    Bonsoir,

    J'avais effectivement procédé de cette façon et j'avais cru que ça marchait... mais pour les données suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sql = "insert into location values (1,'01-12-2009',14,15,tab_materiel_loue(type_materiel_loue(1),type_materiel_loue(3)),1,5)";
    sql = "insert into location values (8,'01-12-2009',15,16,tab_materiel_loue(type_materiel_loue(1) ),1,5)";
    sql = "insert into location values (7,'02-12-2009',14,15,tab_materiel_loue(type_materiel_loue(2)),2,5)";
    J'ai pour réponse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    1eme entrée :
    _1
    _2
    2eme entrée :
    _1
    3eme entrée :
    _1
    Alors que je voudrais avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    1eme entrée :
    _1
    _3
    2eme entrée :
    _1
    3eme entrée :
    _2
    Voila.. j'ai peut-etre raté quelque chose (mauvaise insertion?)

    Cordialement

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 30
    Par défaut
    Pas d'idées?

Discussions similaires

  1. [java.sql.Array] Problème lors de l'appel de createArrayOf
    Par ratata dans le forum Général Java
    Réponses: 5
    Dernier message: 27/05/2011, 17h27
  2. Convertir java.util.ArrayList en java.sql.Array
    Par archer dans le forum JDBC
    Réponses: 3
    Dernier message: 13/07/2010, 10h53
  3. [PL/SQL] Interrogation d'un tableau par JAVA
    Par Titouf dans le forum Oracle
    Réponses: 12
    Dernier message: 08/02/2006, 16h59
  4. Réponses: 3
    Dernier message: 24/11/2005, 12h24
  5. [JDBC] java.sql.SQLException: Closed Statement
    Par cmoulin dans le forum JDBC
    Réponses: 4
    Dernier message: 03/09/2004, 17h22

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