From: "Jean-Fabien RENARD" <jrenard@capgemini.fr>
To: <java@u-strasbg.fr>
Subject: jdbc et CLOB
Date sent: Thu, 22 Mar 2001 11:41:13 +0100
Send reply to: java@u-strasbg.fr
Bonjour,
Je cherche à accéder à des CLOB via JDBC, par l'intermédiaire de procédure
stockée.
J'arrive bien à les récupérer de la base mais je n'arrive pas à les créer
ou à les modifier.
Voici un exemple de code utilisée:
CLOB myCLOB = new CLOB((OracleConnection)myConnection, myText.getBytes()
); ocs.setClob( 5 ,myCLOB );
où ocs est de type CallableStatement et myText de type String.
lors d'une création (INSERT INTO) j'obtiens l'erreur:
ORA-24812 character set convesion to or from UCS2 failed
lors d'un update (SET) j'obtiens l'erreur:
ORA-22281 cannot perform operation with an updated locator.
Est-ce que quelqu'un sait pourquoi ou connait un moyen de modifier ou
créer un CLOB à partir d'une String et de le passer à une procédure
stockée ?
Merci
Jean-Fabien RENARD.
From: "BENTAYBI,ABDELLAH (Non-HP-France,ex1)" <abdellah_bentaybi@non.hp.com>
To: "'java@u-strasbg.fr'" <java@u-strasbg.fr>
Subject: RE: jdbc et CLOB
Date sent: Thu, 22 Mar 2001 14:36:10 +0100
Send reply to: java@u-strasbg.fr
Bonjour,
Voici un extrait d'un code que j'ai ecrit dont je me sert pour ecrire dans
un Clob. Il faut en fait recuperer le clob et ouvrir un dataOutputStream
dessus et utiliser ce stream pour ecrire dedans. Ce code ne contient pas
de procedure stockee, mais je pense que si tu recupere ton Clob depuis ta
procedure stockee et que tu utilise le meme principe ca devrait marcher.
<<<
import java.sql.*;
import oracle.sql.CLOB;
import oracle.jdbc.driver.OracleResultSet;
public static void main(String[] args) throws TnLException
{
...................................
...................................
PreparedStatement pstmt = _connection.prepareStatement(
"insert into " + table + " (Col1, Col2, Col3) values(?,
?,
empty_clob())"
);
pstmt.setString(1, param1);
pstmt.setString(2, param2);
pstmt.execute();
pstmt.close();
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(
"SELECT Col3 FROM " + table +
" WHERE Col1='" + col1 + "' and Col2='" + col2 + "' FOR
UPDATE" );
CLOB myClob = null;
DataOutputStream dos = null;
if (rs.next()) {
myClob = ((OracleResultSet)rs).getCLOB(1);
dos = new DataOutputStream( myClob.getAsciiOutputStream() );
}
...................................
...................................
// Ensuite tu peux utiliser le DataOutputStream en faisant des writeUTF
pour ecrire tes Strings dans le Clob dos.writeUTF(myString);
}//end main
>>>
En esperant que cela peut aider.
A+
Abdellah Bentaybi.
-----Original Message-----
From: Jean-Fabien RENARD [mailto:jrenard@capgemini.fr]
Sent: Thursday, March 22, 2001 11:41 AM
To: java@u-strasbg.fr
Subject: jdbc et CLOB
Bonjour,
Je cherche à accéder à des CLOB via JDBC, par l'intermédiaire de procédure
stockée.
J'arrive bien à les récupérer de la base mais je n'arrive pas à les créer
ou à les modifier.
Voici un exemple de code utilisée:
CLOB myCLOB = new CLOB((OracleConnection)myConnection, myText.getBytes()
); ocs.setClob( 5 ,myCLOB );
où ocs est de type CallableStatement et myText de type String.
lors d'une création (INSERT INTO) j'obtiens l'erreur:
ORA-24812 character set convesion to or from UCS2 failed
lors d'un update (SET) j'obtiens l'erreur:
ORA-22281 cannot perform operation with an updated locator.
Est-ce que quelqu'un sait pourquoi ou connait un moyen de modifier ou
créer un CLOB à partir d'une String et de le passer à une procédure
stockée ?
Merci
Jean-Fabien RENARD.
From: "Jean-Fabien RENARD" <jrenard@capgemini.fr>
To: <java@u-strasbg.fr>
Subject: Re: jdbc et CLOB
Date sent: Mon, 26 Mar 2001 15:31:05 +0200
Send reply to: java@u-strasbg.fr
merci,
cela m'a beaucoup aidé, ca marche bien a l'exception bizarement de
l'initialisation par DataOutputStream.
J'utilise la méthode putString sur mon CLOB à la place.
Jean-Fabien.
----- Original Message -----
From: BENTAYBI,ABDELLAH (Non-HP-France,ex1) <abdellah_bentaybi@non.hp.com>
To: <java@u-strasbg.fr> Sent: Thursday, March 22, 2001 3:36 PM Subject:
RE: jdbc et CLOB
> Bonjour,
>
> Voici un extrait d'un code que j'ai ecrit dont je me sert pour ecrire
> dans un Clob. Il faut en fait recuperer le clob et ouvrir un
> dataOutputStream dessus et utiliser ce stream pour ecrire dedans. Ce
> code ne contient pas de procedure stockee, mais je pense que si tu
> recupere ton Clob depuis ta procedure stockee et que tu utilise le meme
> principe ca devrait marcher.
>
> <<<
> import java.sql.*;
> import oracle.sql.CLOB;
> import oracle.jdbc.driver.OracleResultSet;
>
> public static void main(String[] args) throws TnLException
> {
> ....................................
> ....................................
>
> PreparedStatement pstmt = _connection.prepareStatement(
> "insert into " + table + " (Col1, Col2, Col3)
> values(?,
?,
> empty_clob())"
> );
>
> pstmt.setString(1, param1);
> pstmt.setString(2, param2);
>
> pstmt.execute();
> pstmt.close();
>
> Statement stmt = connection.createStatement();
> ResultSet rs = stmt.executeQuery(
> "SELECT Col3 FROM " + table +
> " WHERE Col1='" + col1 + "' and Col2='" + col2 + "' FOR
UPDATE"
> );
>
> CLOB myClob = null;
> DataOutputStream dos = null;
>
> if (rs.next()) {
>
> myClob = ((OracleResultSet)rs).getCLOB(1);
>
> dos = new DataOutputStream( myClob.getAsciiOutputStream() );
> }
>
> ....................................
> ....................................
>
> // Ensuite tu peux utiliser le DataOutputStream en faisant des writeUTF
pour
> ecrire tes Strings dans le Clob
> dos.writeUTF(myString);
>
> }//end main
>
> >>>
>
>
>
> En esperant que cela peut aider.
>
> A+
>
> Abdellah Bentaybi.
>
> -----Original Message-----
> From: Jean-Fabien RENARD [mailto:jrenard@capgemini.fr]
> Sent: Thursday, March 22, 2001 11:41 AM
> To: java@u-strasbg.fr
> Subject: jdbc et CLOB
>
>
> Bonjour,
>
> Je cherche à accéder à des CLOB via JDBC, par l'intermédiaire de
> procédure stockée.
>
> J'arrive bien à les récupérer de la base mais je n'arrive pas à les
> créer
ou
> à les modifier.
>
> Voici un exemple de code utilisée:
>
> CLOB myCLOB = new CLOB((OracleConnection)myConnection,
myText.getBytes() );
> ocs.setClob( 5 ,myCLOB );
>
> où ocs est de type CallableStatement et myText de type String.
>
> lors d'une création (INSERT INTO) j'obtiens l'erreur:
> ORA-24812 character set convesion to or from UCS2 failed
>
> lors d'un update (SET) j'obtiens l'erreur:
> ORA-22281 cannot perform operation with an updated locator.
>
> Est-ce que quelqu'un sait pourquoi ou connait un moyen de modifier ou
créer
> un CLOB à partir d'une String et de le passer à une procédure stockée ?
>
> Merci
>
> Jean-Fabien RENARD.