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 :

Utilisation des BFILE Oracle sous java


Sujet :

JDBC Java

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 175
    Par défaut Utilisation des BFILE Oracle sous java
    Je developpe une application Web avec Tomcat 5.5.12 et JDK 1.5.0_05.

    J'essaie d'utiliser les BFILE mais je coince au moment où je dois faire un select, dans la table servant à contenir les pointeurs, sur la colonne contenant le pointeur de type BFILE. La méthode ExecuteQuery de l'objet Statement ne renvoit rien ; par contre quand je fais un select via l'interface SQL, je récupère bien le pointeur BFILE en question, d'où ma surprise

    Y'a-t-il une explication ?

    merci

    J'utilise une base Oracle version9 et le driver Oracle ojdbc14.jar

  2. #2
    Membre chevronné


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 855
    Par défaut
    Bonsoir,

    peux tu nous mettre ton code qu'on y voit plus clair ?

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 175
    Par défaut
    J'ai créé une table T_BFILE avec les colonnes ID de type VARCHAR2(15) et FILENAME de type BFILE. Cette table contient une seule ligne créée par un INSERT INTO t_bfile ('CP03_211J',bfilename('BLODIR','toto.txt'));

    Voici le bout de code dans ma JSP appelante RechercherAidenligne.jsp ( exemple avec codsor = 'CP03_211J' ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ListeLib.executeAidenligne(connex, codsor, typ);// appel de la méthode executeAidenligne de la classe ListeLib
    voici un extrait de la classe ListeLib :
    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
     
    public void executeAidenligne(Connection connect, String codsor, String typ) {
     
    		codsor = codsor.toUpperCase();
    		typ = typ.toUpperCase();
     
    		sql = "select * from t_bfile where upper(id) = '" + typ + "_" + codsor + "'";
    		System.out.println("sql = " + sql);
     
    		executeSql(connect, sql);	
     
    	}
     
    	private synchronized void executeSql(Connection connect, String sql){
     
     
    		try{
    			System.out.println("ko1");
    			instruction = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
    			System.out.println("ko2");
    			resultat = instruction.executeQuery(sql);
    			System.out.println("ko3 = " + resultat.getFetchSize());
    			resultat.next();
    			System.out.println("ko4 = " + resultat.getString(1));
    			BFILE bfile = ((OracleResultSet)resultat).getBFILE(2);
    			System.out.println("ko5 = "+ bfile);
     
    		}
    		catch(SQLException e){
     
     
    		}
    		//
    		catch(Exception e){
    			}
    	}
    lors de l'execution de la jsp RechercherAidenligne.jsp, les instructions se succèdent normalement sauf l'étape "BFILE bfile = ((OracleResultSet)resultat).getBFILE(2);" car le marqueur "ko5 =" ne s'affiche pas sur la console d'Eclipse. A l'étape ko3, le fetchsize affiche 10 donc le resultat n'est pas vide. A l'étape ko4, CP03_211J s'affiche

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 175
    Par défaut
    complément :

    quand on execute select * from t_bfile where upper(id) = 'CP03_211J', on récupère en sortie la ligne correspondante dans la table t_bfile

  5. #5
    Membre chevronné


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 855
    Par défaut
    Citation Envoyé par marti Voir le message
    car le marqueur "ko5 =" ne s'affiche pas sur la console d'Eclipse.
    Cela voudrait dire qu'une exception a été déclenchée, non ?
    Je me trompe peut-être, mais tu ne peux conserver le BFile "ouvert" (c'est à dire une référence dessus) si tu fermes ton ResultSet. Il faudrait donc récupérer le flux pour le mettre dans une structure adéquate comme byte[]

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 175
    Par défaut
    Voic l'execption généré :

    java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp.DelegatingResultSet

  7. #7
    Membre chevronné


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 855
    Par défaut
    Essaye peut-être la méthode getInnermostDelegate après avoir casté en DelegatingResultSet.

    Quelque chose qui ressemblerait à cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DelegatingResultSet drs = (DelegatingResultSet) resultat;
    BFILE bfile = ((OracleResultSet) drs.getInnermostDelegate()).getBFILE(2);

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 175
    Par défaut
    ça ne va pas mieux.

    J'ai importé la classe import org.apache.commons.dbcp.DelegatingResultSet;

    voici mes mises à jours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    System.out.println("ko1");
    			instruction = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
    			System.out.println("ko2");
    			resultat = instruction.executeQuery(sql);
    			DelegatingResultSet drs = (DelegatingResultSet) resultat;
     
    			System.out.println("ko3 = ");
    			drs.next();
    			System.out.println("ko4 = ");
    			System.out.println("ko5 = " + drs.getString(1));
    			BFILE bfile = ((OracleResultSet) drs.getInnermostDelegate()).getBFILE(2);
    			System.out.println("ko6 = "+ bfile);
    L'étape ko3 ne se déroule pas, donc certainement un problème au niveau de DelegatingResultSet drs = (DelegatingResultSet) resultat;

    Ma classe génère toujours l'erreur : java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp.DelegatingResultSet

    Je remarque la classe d'erreur comporte dbcp.dbcp alors que la classe d'import un seul .dbcp. Est ce normal ?

  9. #9
    Membre chevronné


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 855
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.apache.commons.dbcp.DelegatingResultSet
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.apache.tomcat.dbcp.dbcp.DelegatingResultSet
    sont quand même différents.

    Veille à ce que ton import soit le bon.

  10. #10
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 175
    Par défaut
    La classe DelegatingResultset se trouve dans les librairies de tomcat sous Eclipse dans le fichier commons-dbcp-1.1.jar sous le package org.apache.commons.dbcp.

    Comment faire pour declarer la classe DelegatingResultset sous le chemin org.apache.commons.dbcp.dbcp ?

  11. #11
    Membre chevronné


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 855
    Par défaut
    Tu dois aussi pouvoir jouer sur ton fichier de conf côté Tomcat puisque tu y déclares la Factory qui sert à instancier le pool.
    Regardes dans ton server.xml, context.xml, ou fichier de déploiement spécifique.

  12. #12
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 175
    Par défaut
    Merci pour ces infos

    Je ne suis pas un spécialiste de Tomcat . donc si vous pouviez me donner le mode opératoire, j'en serai très heureux....

  13. #13
    Membre chevronné


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 855
    Par défaut
    Citation Envoyé par marti Voir le message
    Merci pour ces infos

    Je ne suis pas un spécialiste de Tomcat . donc si vous pouviez me donner le mode opératoire, j'en serai très heureux....
    Ca dépend déjà de comment tu as déployé ta datasource. Sinon on va se perdre en suppositions. Si tu ne maîtrises pas, tu as bien quelqu'un près de toi qui te l'as mis en place, non ?

Discussions similaires

  1. Utiliser des macros Excel sous open office
    Par Memes dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 08/11/2007, 22h46
  2. transferer des tables oracle sous access
    Par lassmust dans le forum Oracle
    Réponses: 3
    Dernier message: 28/12/2005, 14h38
  3. Compression des dump Oracle sous windows
    Par thomasjcj dans le forum Oracle
    Réponses: 5
    Dernier message: 28/10/2005, 15h06
  4. équivalent des Synonymes Oracle sous SQL Server 2000
    Par wello00 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/07/2005, 09h52
  5. [CR] Utilisation des package Oracle ??
    Par sboober dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 06/12/2004, 08h37

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