Problema al UPDATEAR un CLOB de Oracle

Nakune
30 de Diciembre del 2003

Buenas llevo un par de días intentado actualizar un campo CLOB de una BD Oracle 9i en un entorno WebLogic 8.1
Mi problema es que al igualar mi objeto CLOB clob = null; con algo que supuestamente devuelve un CLOB
while (rset.next()) {
clob = ( (OracleResultSet) rset).getCLOB(2);
}
obtengo un java.lang.ClassCastException. A ver si alguien ha pasado ya por esto y me ayuda, GRACIAS!!

invitado
30 de Diciembre del 2003
La solucion la dió PaneB en este mismo foro:

Re: ClassCastException cuando intento hacer el cast Clob obj = (CLOB)rs.getClob(1);
Enviado por PaneB el día 16 de diciembre de 2003
Si usas pool de WebLogic (como debiera ser tu caso) Bea crea un tipo wrapper para los tipos Clob. La lectura y escritura de estos tipos, si bien parece que está soportada por java, es del todo mentira. Usando \"java standar\" no podrás nunca guardar o leer un CLOB de más de 4K!!!

Para realizar estas operaciones deberás usar las clases propias de oracle:

Así, el fragmento para escribir en un campo CLOB:



CallableStatement cs = null;
cs = dbConn.prepareCall(\"begin DBMS_LOB.CREATETEMPORARY(?, TRUE,DBMS_LOB.SESSION); end;\");
cs.registerOutParameter(1, Types.CLOB);
cs.execute();
oracle.sql.CLOB clob = (oracle.sql.CLOB) ((weblogic.jdbc.wrapper.Clob)cs.getClob(1)).getVendorObj();
clob.putString(1, mensaje);

PreparedStatement ps = dbConn.prepareStatement(\"update mensaje SET mensaje=? where codigo = ?\");

ps.setClob(1, clob);
ps.setClob(2, 34);
...
Y esta función para leer un campo clob. El objeto que
se pasa se obtiene usando el método getObject de
resulset (no uses getClob).

private String readClob (Object obj) {
if (obj==null) return null;
BufferedReader bf=null;
StringBuffer out = new StringBuffer(100);
try {
bf = new BufferedReader(new InputStreamReader( ( (Clob)
obj).getAsciiStream()));

String line;
while ( (line = bf.readLine()) != null) {
out.append(line);
out.append(\"\\n\");
}
bf.close();
}
catch (Exception ex) {
out.setLength(0);
}
finally {
try {
bf.close();
}
catch (IOException ioe){
}
}

return (out.toString());
}