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 :

[java/jdbc] Impossible de récupérer plus de 32Ko de données


Sujet :

JDBC Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [java/jdbc] Impossible de récupérer plus de 32Ko de données
    Bonjour,

    Je cherche à dupliquer 1 champ Oracle du type LONG RAW de manière "automatique".
    Ne pouvant pas le faire directement en SQL (limitation des champs LONG RAW) et étant limité à 32Ko pour les variables PL/SQL (j'ai au minimum 400Ko de données à copier), j'ai écris le programme java suivant:
    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
     
    import java.sql.*;
    import oracle.jdbc.driver.*;
    import java.io.*;
     
    public class GetLongRawField
    {
    	public static byte[] getTheLongRaw (int projID, Connection conn) {
        byte[] myLongRaw = null;
      	try{
          System.out.println("java: start selecting long raw field");
     
      		String query = "SELECT reserved_binary_data FROM TEST_TABLE WHERE proj_id="+ projID;
      		PreparedStatement pst = conn.prepareStatement(query); 
      		ResultSet result = pst.executeQuery();
          if(result.next()){
      		    myLongRaw = result.getBytes(1);
              System.out.println("java: get first line data");
              System.out.println(myLongRaw.length);
          }
      	}
      	catch (Exception ex){
      		 System.err.println("ERROR!: " + ex.getMessage());
           ex.printStackTrace();
      	}
      	return myLongRaw;
    	}
     
      public static void updateTheLongRaw (int oldProj, int newProj){
      try{
        Connection conn = new OracleDriver().defaultConnection(); 
     
      //  DriverManager.registerDriver(new OracleDriver());
    	//  Connection conn = DriverManager.getConnection("jdbc:oracle:kprb:"); 
     
        byte[] test = getTheLongRaw(oldProj, conn); 
     
        ByteArrayInputStream myNewLongRaw = new ByteArrayInputStream(test); 
     
        System.out.println("java: start duplicating long raw field");
     
    		String query = "UPDATE TEST_TABLE SET reserved_binary_data = ? WHERE proj_id=" + newProj;
    		PreparedStatement pst = conn.prepareStatement(query); 
        pst.setBinaryStream(1, myNewLongRaw, test.length); 
    		pst.executeUpdate();
        System.out.println("java: done duplicating long raw field");
     
    	}
    	catch (Exception ex){
    		 System.err.println("ERROR!: " + ex.getMessage());
         ex.printStackTrace();
    	}
      }
    }
    La méthode appelée est updateTheLongRaw à qui je passe les références source et cible.
    Cette méthode est "encapsulée" dans une procédure PL/SQL utilisée par un trigger Oracle.

    La duplication fonctionne bien, sauf que je ne copie que 32Ko (et non les 400Ko espéré).

    Une idée de la raison de ce problème?
    est-ce un problème de driver? si oui, lequel dois-je utiliser?

    merci d'avance.
    "Il ne faut jamais juger les gens sur leurs fréquentations : Judas, par exemple, avait des amis irréprochables."
    (Verlaine)

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    après vérfication ... c'est bien une limitation du driver.
    Seulement 32 Ko peuvent être récupérée avec des champs de type LONG RAW.

    Une idée pour contourner ce problème?
    "Il ne faut jamais juger les gens sur leurs fréquentations : Judas, par exemple, avait des amis irréprochables."
    (Verlaine)

Discussions similaires

  1. Problème : "Impossible d'ouvrir plus de bases de données"
    Par Matthieu IS dans le forum VBA Access
    Réponses: 2
    Dernier message: 10/05/2007, 17h25
  2. Impossible d'ouvrir plus de bases de données
    Par tedparker dans le forum Access
    Réponses: 3
    Dernier message: 09/08/2006, 10h16
  3. Réponses: 5
    Dernier message: 27/06/2006, 12h27
  4. Impossible d'ouvrir plus de bases de données
    Par hugo69 dans le forum Access
    Réponses: 1
    Dernier message: 21/03/2006, 11h27
  5. Impossible d ouvrir plus de bases de données
    Par cla dans le forum Access
    Réponses: 8
    Dernier message: 24/02/2006, 16h06

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