Ai vai uma função para recuperar o conteúdo de um Clob.
/**
* Retorna o conteúdo de um Clob
*
* @param clob
* @return
* @throws Exception
*/
public String getClob(CLOB clob) throws Exception {
if (clob != null && ! clob.isEmptyLob()) {
int t = 0;
char cbuf[] = new char[1024];
Reader cin = clob.getCharacterStream();
StringBuffer cout = new StringBuffer(1024);
while ((t = cin.read(cbuf)) != -1) {
cout.append(cbuf, 0, t);
}
cin.close();
return cout.toString();
}
return null;
}
Atualizando um Clob!
Seguinte, ao inserir um registro (INSERT) vc não deve utilizar o valor do CLOB, primeiro você insere o registro e depois edita o registro para atualizar o CLOB.
exemplo:
insert into TBL_EXEMPLO (EXEMPLO_ID, EXEMPLO_LABEL, EXEMPLO_CLOB ) values (1, ‘exemplo de clob’, empty_clob() )
depois do registro inserido:
//função que me retorna uma conexão aberta
Connection conn = conexao.getConexao();
Statement stmt = null;
ResultSet rs = null;
try {
String sql = “select EXEMPLO_CLOB from TBL_EXEMPLO where EXEMPLO_ID = 1 for update“;
conn.setAutoCommit(false); //não esquecer disso
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
Clob clob = rs.getClob(”EXEMPLO_CLOB”);
if (clob != null) {
Writer cout = ((CLOB) clob).getCharacterOutputStream(); // específico para driver oracle
cout.write(”Conteúdo do Clob aqui“);
cout.close();
}
} catch (Exception e) {
throw e; //levantando a excessão (Boas Práticas de Programação)
} finally {
if (stmt != null) {
stmt.close();
stmt = null;
}
if (rs != null) {
rs.close();
rs = null;
}
conn.commit(); //se esquecer isso, nada será atualizado
//função que fecha a conexão (se não for reutilizar)
conexao.fecharConexao(conn);
}
É isso! espero ajudar

Add to del.icio.us