Como vai?

Já passei por isso com campos BLOB, que são a mesma coisa. A única diferença
é que campos BLOB armazenam dados Binário e CLOB caracteres.
Inicialmente também achei que minha classe não estava conseguindo retornar
os valore ou que esses estavam sendo perdidos, mas o que realmente estava
acontecendo é que os valores estavam sendo inseridos como nulos. Então
estavam sendo retornados certo, mas não inseridos corretamente.
Foi ai que depois de muita dor de cabeça que eu descobri um truque no Oracle
para esses tipos de campos.
EMPTY_BLOB() e EMPTY_CLOB()
Para inserir qualquer valor desse tipo no banco de dados faça o seguinte:

Faça o insert normalmente em seu banco de dados substituindo o valor do
campo CLOB(ou BLOB) por EMPTY_CLOB()(ou EMPTY_BLOB() ). Por exemplo:
    INSERT INTO TABELA VALUES(CAMPO1, CAMPO2, EMPTY_CLOB());
Com isso o banco de dados irá inserir um campo em branco CLOB(ou BLOB) na
linha.
Em seguida recupere a linha inserida em um ResultSet.
É DE EXTREMA IMPORTÂNCIA QUE O SELECT UTILIZADO FAÇA USO DAS PALAVRAS FOR
UPDATE, COMO O EXEMPLO A SEGUIR:
   ResultSet rs = stmt.executeQuery("SELECT CAMPO3 FROM TABELA"
                          +" WHERE CAMPO1 = 1 FOR UPDATE) ;
while (rs.next())
{
        Blob b = rs.getBlob(1);
        OutputStream out = ((BLOB)b).getOutputStream();
        //Supondo que vc tenha um ImputStream (in) para inserir nesse campo
        byte [] buff = new byte[1024*10];
        int len;
        while((len = in.read(buff)) != -1)
        {
                out.write(buff, 0, len);
        }
        in.close();
        out.close();
}

Obs: É importante que a conexão com o banco de dados esteja "setado" para:
conn.setAutoCommit(false);

Qualquer duvida é só mandar um e-mail.
Espero ter ajudado.
Até mais!
Alan

----- Original Message -----
From: "José Augusto Cerqueira Conde" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, July 01, 2003 2:30 PM
Subject: RES: [java-list] Utilizando campo CLOB do Oracle no JAVA.


> Para registros maiores que 4K vc deve usar o campo BLOB.
>
> -----Mensagem original-----
> De: Alessandra Santos [mailto:[EMAIL PROTECTED]
> Enviada: seg 30/06/2003 10:44
> Para: [EMAIL PROTECTED]; [EMAIL PROTECTED];
[EMAIL PROTECTED]
> Cc:
> Assunto: [java-list] Utilizando campo CLOB do Oracle no JAVA.
>
>
> Pessoal,
>
> Estou fazendo uma classe java dentro do Oracle que retorna informações do
Banco para um campo String maior que 4k, logo tenho que retornar como CLOB.
Essas informações é para gerar um arquivo PDF.
> Quando a Classe Java retorna a informação para o Banco, perde a mesma,
retornando NULL.
>
> Alguém já passou por isso?
>
> Como trabalhar com informações com mais de 4k sendo texto?
>
> Segue abaixo código da rotina que converte um campo String para CLOB...
>
> import oracle.sql.*;
>
> import java.sql.*;
>
> public static CLOB retorna_clob (String texto2) throws Exception
> {
> CLOB dsResultado2 = null;
> String texto = new String();
> try{
>
> ((CLOB)dsResultado2).putString((int)1, texto2);
>
> }
> catch(Exception errExc) {
> texto = errExc.getMessage();
> }
> return(dsResultado2);
> }
>
>
>
>
>
> ____________________________________________________
>   <http://www.incredimail.com/redir.asp?ad_id=309&lang=9>   IncrediMail -
Email has finally evolved - Click Here
<http://www.incredimail.com/redir.asp?ad_id=309&lang=9>
>
>


----------------------------------------------------------------------------
----


------------------------------ LISTA SOUJAVA ----------------------------
http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
historico: http://www.mail-archive.com/java-list%40soujava.org.br
para sair da lista: envie email para [EMAIL PROTECTED]
-------------------------------------------------------------------------



------------------------------ LISTA SOUJAVA ---------------------------- 
http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP 
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
historico: http://www.mail-archive.com/java-list%40soujava.org.br
para sair da lista: envie email para [EMAIL PROTECTED] 
-------------------------------------------------------------------------

Responder a