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

Langage Java Discussion :

Clob à partir d'un String pour insertion dans Oracle


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Par défaut Clob à partir d'un String pour insertion dans Oracle
    Bonjour,

    J'ai une String, contenant en fait du texte au format XML, que je dois insérer dans une base de données Oracle.

    Toutefois, je ne sais pas comment transformer mes deux champs String en type java.sql.Clob.

    Ci-dessous le contenu de ma classe :


    public class DAO extends DAOStub
    {
    public void readFrom(DAO bo, boolean pk)
    {
    xmlBO object = (xmlBO) bo;
    this.setREXML(object.getReXML());
    this.setREPXML(object.getRepXML());

    }



    }

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    338
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 338

  3. #3
    Membre averti
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Par défaut
    Merci pour le lien.
    Toute fois j'ai réussis à insérer dans la base, mais mon problème actuel c'est que lorsque j'essaie de récupérer le contenu du champ blob qui est binaire.
    N'existe t'il pas un moyen de convertir le champ binaire vers une chaine de caractère.


    Class Insertion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    PreparedStatement sta = connection
    				.prepareStatement("INSERT INTO XML VALUES (?, ?, ?)");
     
    sta.setBinaryStream(2, DAO.getBytesFromObject(xml), xml
    				.length());
    sta.setBinaryStream(3, DAO.getBytesFromObject(xml), xml
    				.length());
    sta.executeUpdate();
    Class Récuperation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    PreparedStatement sta = connection.prepareStatement("SELECT * FROM XML WHERE NUMERO = ?");
     
    sta.setString(1, "123456");
    ResultSet result = sta.executeQuery();
    result.next();
    System.out.println(result.getBinaryStream(2));
    System.out.println("\n\n\n");
    System.out.println(result.getBinaryStream(3));
    Résultat de la recupération :

    oracle.jdbc.driver.OracleConversionReader@633f3e4
    oracle.jdbc.driver.OracleBlobInputStream@69bb3e4


    Merci de votre réponse

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2006
    Messages : 13
    Par défaut
    Pourquoi sauvegarder sous forme binaire ?

    J'utilise la méthode suivante :

    StringReader reader = new StringReader(monStringClobXML);
    preparedStatement.setCharacterStream(index, reader, monStringClobXML.length());


    ensuite getClob d'après mes souvenirs.

  5. #5
    Membre émérite Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Par défaut
    Bonjour,
    j'ai une application qui fait ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Clob clob = rs.getClob(2);
    		BufferedReader clobReader = new BufferedReader(clob.getCharacterStream());
            String ligne = "";
            String buf=null;
            while((buf = clobReader.readLine()) != null){
               ligne+=buf+"\n";
            }
    Hormis le fait que la magouille sur le readLine n'est pas nécessaire et qu'on devrait passer par un StringBuilder plutôt que par une concaténation de String, ça marche.

  6. #6
    Membre averti
    Inscrit en
    Février 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 32
    Par défaut
    Merci pour ta réponse.

    J'ai ajouté le code comme suit :

    PreparedStatement sta = connection
    .prepareStatement("INSERT INTO XML VALUES (?, ?, ?)");
    sta.setString(1, "18745698964");

    StringReader reader = new StringReader("ffffffffff");
    sta.setCharacterStream(2, reader, 10);
    sta.setCharacterStream(3, reader, 10);
    sta.executeUpdate();

    sauf que je rencontre l'erreur ci-dessous:
    Exception in thread "main" java.sql.SQLException: Exception d'E/S: Stream closed
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
    at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:333)
    at oracle.jdbc.driver.OraclePreparedStatement.setCharacterStream(OraclePreparedStatement.java:3533)
    at monPackage.dao.TestBlobWrite.main(TestBlobWrite.java:49)

  7. #7
    Membre émérite Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Par défaut
    Bonjour,
    un objet Reader (ainsi que tous les dérivés, dont StringReader), ne peut se lire deux fois de suite.
    Il faut recréer un deuxième Reader.

Discussions similaires

  1. Réponses: 6
    Dernier message: 09/06/2006, 12h17
  2. Réponses: 9
    Dernier message: 20/04/2006, 11h07
  3. [ODBC] Récupération d'une donnée pour insertion dans une autre table
    Par rom950 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/03/2006, 17h13
  4. Réponses: 9
    Dernier message: 13/10/2005, 18h24
  5. Réponses: 6
    Dernier message: 06/10/2005, 11h30

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