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

Oracle Discussion :

Problème de récupération de blob via JDBC


Sujet :

Oracle

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Problème de récupération de blob via JDBC
    Bonjour tlm,

    J'ai un problème avec mon appli (techno : J2EE, Jonas, EJB + CMPBean avec rdb.oracle mapper) qui lors du mapping database-bean me renvoi les blobs sous forme de tableau de bytes mais en mettant le blob locator oracle plutôt que le contenu "utile" du blob dans ce tableau ! Ce que je récupère fait quoiqu'il y ait en base 86 bytes et ai évidemment illisible par mon appli vu que ce n'est pas le contenu du blob mais le pointeur oracle vers le fichier de stockage du blob. Apparemment ce serait lié au fait que j'utilise le driver oracle thin (foireux) et pas OCI. Le pb c'est que je ne peux pas utiliser le driver OCI vu que le serveur d'app et la base sont sur des becanes différentes. Du coup je suis coincé et obligé de corrigé mes blobs en refaisant une requete sur la base pour récupérer le resultset contenant mon tuple et d'utiliser l'api java.sql.Blob et getBlob() qui elle fonctionne très bien et me retourne le contenu "utile" du blob. Ca marche... sauf c'est que c'est degueulasse et nul coté perf. Est ce que quelqu'un aurait déjà rencontré ce problème et une idée meilleur à me suggérer ?

    Merci d'avance,
    Aurélien

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Voici ke code que j'utilise et qui fonctionne très bien avec le driver thin:

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
      // read a BLOB column from the database
      public static Image Lecture( int iDentifiant )
           throws Exception
      {
        // Register the Oracle JDBC driver
        DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
        Connection conn = null ;
        String     req = "" ;
        byte[]     buffer = null ;
        int        iLength = 0 ;
        Image      img = null ;
        // Connect to the database
         log("Lecture() : Connect to database") ;
        try {
          conn = DriverManager.getConnection (sConn, sUser, sPwd);
        } catch (Exception e) {
         log( "error connextion database : " + e.toString()) ;
        }
        conn.setAutoCommit (false);
        // Create a Statement
        Statement stmt = conn.createStatement ();
        req  = "select " + sColumn + ", LENGTH(" + sColumn + ") " ;
        req += "from " + sTable + " where " + sLookup + "=" + iDentifiant ;
        log("Lecture() : execute query="+req) ;
        ResultSet rset = stmt.executeQuery ( req );
        while (rset.next ())
        {
          // Get the lob
          blobImage = ((OracleResultSet)rset).getBLOB (1);
          iLength = rset.getInt(2) ;
        }
        // Close all resources
        rset.close();
        stmt.close();
        log("Lecture() : transform the BLOB length="+iLength) ;
        if( iLength > 0 )
        {
          InputStream instream = blobImage.getBinaryStream();
          // Create temporary buffer for read
          buffer = new byte[iLength];
          int length = 0;
          // Fetch data  
          while ((length = instream.read(buffer)) != -1)
          {
            log("Lecture() : Read " + length + " bytes: ");
          }
          // Close input stream
          instream.close();    
          conn.close(); 
          log("Lecture() : createImage()") ;
          img = Toolkit.getDefaultToolkit().createImage(buffer) ;
        }
        return img ;
     
      }
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Quelque version de driver utilises tu stp ? Moi c le 9.2 et des brouettes. J'ai essayé le 10.1.0.4 mais sans plus de succès. Pour l'avoir testé, ma méthode getBLOB oracle retourne le blob locator et non le tableau de bytes contenant le contenu du blob ? Le truc c'est que, vu que j'utilise le rdb.oracle mapper , la récupération des données de la base vers les objets java bean se fait de manière transparente pour moi (pas de requete ni de resultset à manipuler, le mapper s'en charge). Sauf que le mapper doit merdé quelquepart car au lieu de me remplir le tableau de bytes de mon objet bean avec le contenu du blob, il me renvoi le blob locator... En fait j'ai exactement le même problème que certain sous Hibernate comme l'indique le lien ci dessous :

    http://hansonchar.blogspot.com/2005/...o-byte-in.html

    Sauf que les solutions proposées pour y remédier ne marche pas pour moi...

    Merci quand même de ta réponse

Discussions similaires

  1. sh : Problème de récupération fichiers ZIP via FTP
    Par benthebest dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 24/11/2014, 17h56
  2. Réponses: 1
    Dernier message: 21/09/2011, 11h21
  3. Problème de récupération univers via un biar
    Par valauga dans le forum Designer
    Réponses: 1
    Dernier message: 18/11/2009, 11h47
  4. [SSH2] Problème de récupération de fichier via SCP
    Par guile1er dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 28/02/2008, 19h17
  5. [Oracle] Problème d'insertion de ligne via JDBC
    Par nicofromChina dans le forum JDBC
    Réponses: 3
    Dernier message: 17/07/2007, 12h21

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