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 :

Pb inversion de 2 Clob


Sujet :

JDBC Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Pb inversion de 2 Clob
    Bonjour,

    je travaille sur une application Struts utilisant une base oracle et j'ai un problème lors d'une requête mettant à jour un enregistrement contenant des CLOB.

    Voici un extrait de code dans lequel j'ai reduit la requete aux champs qui posent probleme pour des raisons de clarté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    String req = "UPDATE FICHE SET DESCRIPTION = ? , MODIFICATION = ? "
    	+ "WHERE idFiche = ? ";
     
    pStmt = conn.prepareStatement(req);
     
    stringReader = new StringReader(fiche.getDescription());
    pStmt.setCharacterStream(1, stringReader, fiche.getDescription().length());
     
    stringReader = new StringReader(fiche.getModification());
    pStmt.setCharacterStream(2, stringReader, fiche.getModification().length());
     
    pStmt.setInt(3, 1);
    pStmt.executeUpdate();
    J'ai donc 2 champs, description et modification, qui doivent être enregistrés en base dans des champs de type CLOB.

    Mon problème est que les contenus de "description" et "modification" sont échangés dans le cas où "description" > 4000 caractères et "modification" > 1000.

    Dans tous les autres cas, tout fonctionne bien.

    La je sèche un peu, si quelqu'un a une idée, je suis preneur.

    Merci

  2. #2
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Même pas une petite idée de l'origine du problème ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    J'ai voulu essayer d'une autre façon.
    Je voudrais utiliser un OraclePreparedStatement pour pouvoir utiliser les méthodes setXXXAtName en spécifiant donc à chaque fois le nom du champ et plus le numéro du ? dans la requête pour voir si la il y avait toujours inversion.

    J'ai donc écrit ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    OraclePreparedStatement pStmt = null;
    pStmt = (OraclePreparedStatement) conn.prepareStatement(req);
    Donc exactement ce que l'on peut trouver sur le site d'oracle (http://download-west.oracle.com/docs...55/oraint.htm).

    Et l'application génère une exception lors de la conversion du PreparedStatement retourné par conn.prepareStatement en OraclePreparedStatement:
    java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement

    Et je suis donc de nouveau bloqué.
    y aurait-il une âme éclairée dans les parages ?

    Merci

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 84
    Points : 64
    Points
    64
    Par défaut
    Salut,

    Ca va te paraitre stupide... Si on revient au premier bout de code et que tu remplace les points d'interrogation par le résultat. Ca donne quoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    String description = fiche.getDescription();
    String modification = fiche.getModification();
    String req = "UPDATE FICHE SET "
    	+ " DESCRIPTION = '"+description+"' , "
    	+ " MODIFICATION = '"+modification+"' "
    	+ " WHERE idFiche='1' ";
    System.out.println(req);
    conn.prepareStatement(req);

  5. #5
    Futur Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta réponse, le problème est réglé.
    En fait, le problème n'apparaissait que chez moi, pas chez mes collègues.

    C'était en fait mon ojdbc14.jar dans Tomcat qui nétait pas bon.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2007
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    J'ai aussi eu le ClassCastException. le problème résidait dans le fait d'avoir utilisé OraclePreparedStatement et setStringForClob(). Je les ai tout simplement enlevé et utilisé setString et Preparedstatement et ca a marché. J'ai pu insérer jusqu'à 25000 caractères

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 27/08/2003, 11h04
  2. inverser la lecture d'une requète
    Par nilaco dans le forum Requêtes
    Réponses: 5
    Dernier message: 10/08/2003, 12h16
  3. [VB6] [Graphisme] Inversion dans picturebox
    Par tomnie dans le forum VB 6 et antérieur
    Réponses: 23
    Dernier message: 16/04/2003, 15h05
  4. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 11h09
  5. [VB6]fonction inverse de Hex (nombres hexadécimaux)
    Par Guigui_ dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 08/10/2002, 19h31

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