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 :

Recuperation d'un tableau d'une PS sous java


Sujet :

JDBC Java

  1. #1
    Invité
    Invité(e)
    Par défaut Recuperation d'un tableau d'une PS sous java
    Bonjour a tous, je débute sous java et malgré des recherches sur le net, je cale sur la facon de recuperer sous eclipse (java) un tableau de sortie d'une procedure stockée dans une base de données oracle 10g

    voila la procédure stockée en question dans un package body:
    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
    CREATE OR REPLACE PACKAGE BODY "AIREJAVA"."PACKA2J" AS
     
    PROCEDURE GROUPE_TITRE (ptitre varchar2, resultat out PACK_SPERENC.T2)  is
     
      cursor C4 is select nomsong, nomgroupe, 'null' from (
                  select groupe.nomgroupe, oeuvre.nomsong from groupe
                  join interpreter on groupe.nogroup=interpreter.nogroup
                  join oeuvre on interpreter.nosong=oeuvre.nosong
                                                )
                  where nomsong like ptitre;
      i integer:=0;
     
    begin
      for VC4 in C4 loop
    	resultat(i)  := Vc4;
    	/*DBMS_OUTPUT.PUT_LINE('RESULTAT'|| (i)||'  '||Vc4.nomsong||'  Groupe :  '||Vc4.nomgroupe );*/
    	i:=i+1;
      end loop;
    END GROUPE_TITRE;
    voici mon paramètre de sortie tel que je l'ai déclaré. T1 est donc un record de 3 colonnes de type String. T2 est une table de T1 (J'espère ne pas trop ecorcher le vocabulaire adéquat !)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     CREATE OR REPLACE PACKAGE "AIREJAVA"."PACK_SPERENC" AS
     
    type T1 is RECORD
          (
                    STR1    rencontre.nomrencontre%type,
                    STR2      tiers.nomtiers%type,
                    STR3   specialite.nomspe%type
          );
     
    type T2 is table of T1 index by binary_integer;
     
     
    END Pack_SpeRenc;
    /
    Je précise au passage que ce tableau est utilisé pour plusieures PS, c'est pourquoi il est constitué de 3 colonnes mais la PS vue plus haut comble la troisieme colonne par un 'null'.
    Sous oracle, cela fonctionne, j'ai un tableau T2 qui se remplit.

    Maintenant la partie java
    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
     
    conn = Connecter_oracle.connecter("10.105.41.28", "1521","XXX", "XXX", "XXX");
     
    String toto2 = "{call airejava.PACKA2J.GROUPE_TITRE(?,?)}";
     
     
    CallableStatement cs = conn.prepareCall (toto2);
     
     
    cs.setString(1, "Saludos copinos"); // a remplacer JcomboBox.getselectedItem
     
    cs.registerOutParameter(2,Types.ARRAY  );
     
     
    cs.execute();
    Comme vous voyez, j'essai dans un premier temps d'executer la procedure sans meme recuperer ma sortie...mais j'ai un "numéro ou types d'arguments erronés dans appel à 'GROUPE_TITRE'"

    A noter que lorsque je remplace mon tableau T2 dans pl/sql par un simple nvarchar2 ( resultat out nvarchar2), que j'adpate la code pour que les resultat soient tous concaténés les un aux autres dans cette variable résultat, j'arrive a la récuperer sous eclipse en changeant la fin du code par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    cs.setString(1, "Saludos copinos");
     
    cs.registerOutParameter(2,Types.VARCHAR  );
     
    cs.execute();
    String resultat = cs.getString(2);
    System.out.println(resultat);


    Mon probleme est donc de recuperer un tableau, a priori, c'est pas ARRAY qu'il faut mettre! merci de m'avoir lu!

  2. #2
    Invité
    Invité(e)
    Par défaut
    bon et bien, je me repond a moi meme, en esperant que ca puisse aider quelqu'un par la suite...

    Le pilote Jdbc utilisé était le pilote thin dispo chez oracle qui porte le nom de ojdbc14.jar (Oracle Database 10g Release 2 (10.2.0.4) JDBC Drivers ) ici http://www.oracle.com/technetwork/da...01-088211.html

    Apres conseil, il s'avere que ce pilote ne permet pas tout simplement ce genre de manipulation.

    Il est alors preferable d'utiliser ojdbc6.jar(Oracle Database 11g Release 2 JDBC Drivers)
    qui permet de recuperer non pas un tableau en parametre de sortie d'une PS mais un curseur

    voila la definition du param de sortie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    create or replace
    PACKAGE CURSEUR AS 
     
      TYPE C1 IS REF CURSOR;
     
    END CURSEUR;
    J'ai modifié la PS en fonction pour sa simplicité de mise en oeuvre a mon niveau
    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
    create or replace
    PACKAGE BODY "PACKA2J" AS
     
    ------------------------------------------------------------------
    --DDL FOR PROCEDURE INT GROUPE POUR TITRE DONNEE
    ------------------------------------------------------------------
    FUNCTION GROUPE_TITRE2 (ptitre varchar2)  RETURN CURSEUR.C1 IS
     
     STOCK_CURSOR CURSEUR.C1;
     
    begin
      OPEN STOCK_CURSOR FOR select  nomgroupe, nomsong from (
                  select groupe.nomgroupe, oeuvre.nomsong from groupe
                  join interpreter on groupe.nogroup=interpreter.nogroup
                  join oeuvre on interpreter.nosong=oeuvre.nosong
                                                )
                  where nomsong like ptitre;
     
     
    RETURN STOCK_CURSOR;
     
    END GROUPE_TITRE2;
    Depuis éclipse/java

    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
    23
    24
    25
    26
    27
    public class  ProcStock {
     
            public static List<String> getProcedure(String str) throws SQLException{
     
        Connection conn = Connecter_oracle.connecter("XXX", "1521","XXX", "XXX", "XXX");
        java.util.List<String>ListeGroupe= new ArrayList<String>();
     
        String query = "begin ? := PACKA2J.groupe_titre2(?); end;"; //procedure stockée
     
        CallableStatement cs = conn.prepareCall(query);
     
        cs.registerOutParameter(1, OracleTypes.CURSOR);                //parametre de sortie : curseur
        cs.setString(2, str);
     
        cs.execute();      
        ResultSet  rs = (ResultSet)cs.getObject(1);                        
     
     
        while(rs.next())
        {
                ListeGroupe.add(rs.getString(1));
        }
     
     
            return ListeGroupe;
            }
    }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2010
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Juste pour te remercier de ta bonté. Cette solution, était précisément ce que je cherchais. Merci encore.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. utilisation d'une DLL sous java (DLL/Com)
    Par thouraya dans le forum Général Java
    Réponses: 0
    Dernier message: 07/06/2012, 17h04
  2. Intergrer une DLL sous java
    Par tibobo_77 dans le forum Général Java
    Réponses: 7
    Dernier message: 03/06/2009, 14h18
  3. faire une aide sous java
    Par nutix2003 dans le forum EDI et Outils pour Java
    Réponses: 8
    Dernier message: 11/04/2007, 04h26
  4. Charger une DLL sous java
    Par mouzon dans le forum Général Java
    Réponses: 1
    Dernier message: 22/03/2006, 19h46

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