Problema com BLOB

Oi pessoal sou novo aqui no fórum e gostaria da ajuda de vocês para resolver esse problema.

Problema:
Estou buscando no banco de dados um campo BLOB e retornando para uma classe e transformando para byte porém é nesse momento que apresenta o erro
Segue o trecho do código e o erro:

[b][i]O Print que aparece antes do erro:
São:
CLASSE DO BANCO --> image1=oracle.sql.BLOB@88b1e6
CLASSE do BANCO ---->Byte=

[code] private void acaobotaoconsult2() {
fun = ControleFuncionario.consultarcadastro(textmatricula.getText());
if(fun!= null){
textnomefunc.setText(fun.getNomefun());
textsetorfunc.setText(fun.getSetfun());

        try {
            image = (Blob) fun.getBlob();
            System.out.println("image2:"+image);
            imgByte = image.getBytes(1,(int)image.length());
            System.out.println("byte2="+imgByte);
            icon = new ImageIcon(imgByte);
            icon.setImage((Image) fun.getBlob());
            jlabel1.setText("");
            jlabel1.setIcon(icon);
        } catch (SQLException ex) {
            System.out.println("EX:"+ex);
            Logger.getLogger(GerenciamentoVisitantes.class.getName()).log(Level.SEVERE, null, ex);
        }
            
         
    }

erro:
image1=oracle.sql.BLOB@88b1e6
Byte=[B@578dfb
image2:oracle.sql.BLOB@88b1e6
EX:java.sql.SQLRecoverableException: Conexão Fechada
31/01/2012 09:11:34 projeto_portaria.GerenciamentoVisitantes acaobotaoconsult2
SEVERE: null
java.sql.SQLRecoverableException: Conexão Fechada
at oracle.sql.BLOB.getDBAccess(BLOB.java:1087)
at oracle.sql.BLOB.length(BLOB.java:151)
at projeto_portaria.GerenciamentoVisitantes.acaobotaoconsult2(GerenciamentoVisitantes.java:396)
at projeto_portaria.GerenciamentoVisitantes.actionPerformed(GerenciamentoVisitantes.java:350)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178)
at java.awt.Dialog$1.run(Dialog.java:1046)
at java.awt.Dialog$3.run(Dialog.java:1098)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.Dialog.show(Dialog.java:1096)
at java.awt.Component.show(Component.java:1563)
at java.awt.Component.setVisible(Component.java:1515)
at java.awt.Window.setVisible(Window.java:842)
at java.awt.Dialog.setVisible(Dialog.java:986)
at projeto_portaria.GerenciamentoVisitantes.<init>(GerenciamentoVisitantes.java:129)
at projeto_portaria.Tela_Inicial.actionPerformed(Tela_Inicial.java:129)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
at java.awt.Component.processMouseEvent(Component.java:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
CONSTRUÍDO COM SUCESSO (tempo total: 1 minuto 13 segundos)

[/code]

Abaixo o trecho do BANCO:

[code]try
{
String comando = “”+func;
String query =“select b.nomfun, b.nomccu, a.fotemp from r034fot a,usu_vfuncccu b where a.numcad= b.numcad and a.numcad=?”;
result = null;

        stm = con.prepareStatement(query);//prepara o que envia p/ o BD
        stm.setString(1, comando);// seta o ?
        result = stm.executeQuery();//Mostra o resultado da solicitação.
        result.next(); //ele faz com que passe p/ a proxima linha da tabela.
        image   = (Blob) result.getBlob("fotemp"); 
        System.out.println("image1="+image);
        imgByte = image.getBytes(1,(int)image.length());  
        System.out.println("Byte="+imgByte);
         
        return new Funcionario(result.getString("Nomfun"),result.getString("Nomccu"),image);

    }[/code]

Agradeço se me ajudar :smiley:

EX:java.sql.SQLRecoverableException: Conexão Fechada

Você está fechando a conexão no momento errado parece, em que momento você fecha a conexão? Pode postar a classe pra gente ver?

Obrigado Cristiano por responder, Segue a classe do banco:

[code]package projeto_portaria;
import java.util.logging.Level;
import java.util.logging.Logger;
import oracle.jdbc.;
import oracle.sql.
;
import java.sql.*;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JOptionPane;

public class BDCadastroFunc {
private static Connection con = null;
private static PreparedStatement stm = null;
private static Statement stmResult = null;
private static ResultSet result = null;
private static String host = “jdbc:oracle:thin:@serverdell:1522:dberp”;
private static String user = “vetorrh”;
private static String senha = “jl85sz21”;
private static ArrayList<Visitante> lista = null;
private static Blob image;
private static byte[] imgByte;

private static void conectar()
{
    try
    {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        con = DriverManager.getConnection(host,user,senha);
        con.setAutoCommit(false);
    }

    catch(ClassNotFoundException e)
    {
        e.printStackTrace();
    }

    catch(SQLException e)
    {
        
        e.printStackTrace();
    }
}

private static void desconectar() 
{
    try
    {
        con.commit();
        con.close();
        
    }
    catch(SQLException e)
    {
        
        e.printStackTrace();
    }
}
public static Funcionario consultarFuncionario(String func){
    conectar();
    try
    {
        String  comando = ""+func;
        String query ="select b.nomfun, b.nomccu, a.fotemp from r034fot a,usu_vfuncccu b where a.numcad= b.numcad and a.numcad=?";
        result = null;

        stm = con.prepareStatement(query);//prepara o que envia p/ o BD
        stm.setString(1, comando);// seta o ?
        result = stm.executeQuery();//Mostra o resultado da solicitação.
        result.next(); //ele faz com que passe p/ a proxima linha da tabela.
        image   = (Blob) result.getBlob("fotemp"); 
        System.out.println("image1="+image);
        imgByte = image.getBytes(1,(int)image.length());  
        System.out.println("Byte="+imgByte);
         
        return new Funcionario(result.getString("Nomfun"),result.getString("Nomccu"),image);

    }
    catch (Exception e)
    {
        e.printStackTrace();
        return null;
        
    }
    finally
    {
        desconectar();
    }
}

}
[/code]

Pessoal eu tirei o fechamento da conexão de banco somente para fazer um teste e mudou o erro segue abaixo o mesmo:

a diferença que agora ele recebeu o byte, porem com valor errado, agora mostra que o erro é no recebimento da imagem pelo ImageIcon.

image1=oracle.sql.BLOB@1e940b Byte=[B@189635d image2:oracle.sql.BLOB@1e940b byte2=[B@da9ea4 Exception occurred during event dispatching: java.lang.ClassCastException: oracle.sql.BLOB cannot be cast to java.awt.Image at projeto_portaria.GerenciamentoVisitantes.acaobotaoconsult2(GerenciamentoVisitantes.java:399) at projeto_portaria.GerenciamentoVisitantes.actionPerformed(GerenciamentoVisitantes.java:350) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6263) at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) at java.awt.Component.processEvent(Component.java:6028) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4630) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) at java.awt.Container.dispatchEventImpl(Container.java:2085) at java.awt.Window.dispatchEventImpl(Window.java:2478) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178) at java.awt.Dialog$1.run(Dialog.java:1046) at java.awt.Dialog$3.run(Dialog.java:1098) at java.security.AccessController.doPrivileged(Native Method) at java.awt.Dialog.show(Dialog.java:1096) at java.awt.Component.show(Component.java:1563) at java.awt.Component.setVisible(Component.java:1515) at java.awt.Window.setVisible(Window.java:842) at java.awt.Dialog.setVisible(Dialog.java:986) at projeto_portaria.GerenciamentoVisitantes.&lt;init&gt;(GerenciamentoVisitantes.java:129) at projeto_portaria.Tela_Inicial.actionPerformed(Tela_Inicial.java:129) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272) at java.awt.Component.processMouseEvent(Component.java:6263) at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) at java.awt.Component.processEvent(Component.java:6028) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4630) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) at java.awt.Container.dispatchEventImpl(Container.java:2085) at java.awt.Window.dispatchEventImpl(Window.java:2478) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Aqui não deu erro, o teu fechamento de conexão parece OK, mas tem duas coisas que quero que você veja:

1ª: Faça um select na tabela pra ver o tamanho dessa coluna BLOB que você quer trazer, mais ou menos assim: SELECT dbms_lob.getlength(a.fotemp), a.* from r034fot a where a.numcad= teu_filtro

2ª: na sua linha que está assim:

Garanta que lá em cima nos imports você esteja utilizando o import “import java.sql.Blob;”, basta passar o mouse em cima deste cast no Blob que aparecerá qual import você está usando caso esteja no eclipse. O import “import oracle.sql.BLOB;” pelo que vi só é usado em caso de UPDATE da coluna BLOB no Oracle.

Cristiano consegui resolver da seguinte forma.

1º você tinha razão na questão da conexão ela estava fechando antes.

2º depois percebi que meu trecho estava errado:

pois somente preciso receber o byte e depois setar tamanho …

então coloquei assim: [code]try {
image = (Blob) fun.getBlob();
System.out.println(“image2:”+image);
imgByte = image.getBytes(1,(int)image.length());
System.out.println(“byte2=”+imgByte);
icon = new ImageIcon(imgByte);
//icon.setImage((Image) fun.getBlob());
icon.setImage(icon.getImage().getScaledInstance(200, 200, 100));
jlabel1.setText("");
jlabel1.setIcon(icon);
} catch (SQLException ex) {
System.out.println(“EX:”+ex);
Logger.getLogger(GerenciamentoVisitantes.class.getName()).log(Level.SEVERE, null, ex);
}
finally{

                BDCadastroFunc.fecharconexao();
        }[/code]

Cristiano obrigado pela ajuda. :smiley:

[quote=Juliano Zucatti]Cristiano consegui resolver da seguinte forma.

1º você tinha razão na questão da conexão ela estava fechando antes.

2º depois percebi que meu trecho estava errado:

pois somente preciso receber o byte e depois setar tamanho …

então coloquei assim: [code]try {
image = (Blob) fun.getBlob();
System.out.println(“image2:”+image);
imgByte = image.getBytes(1,(int)image.length());
System.out.println(“byte2=”+imgByte);
icon = new ImageIcon(imgByte);
//icon.setImage((Image) fun.getBlob());
icon.setImage(icon.getImage().getScaledInstance(200, 200, 100));
jlabel1.setText("");
jlabel1.setIcon(icon);
} catch (SQLException ex) {
System.out.println(“EX:”+ex);
Logger.getLogger(GerenciamentoVisitantes.class.getName()).log(Level.SEVERE, null, ex);
}
finally{

                BDCadastroFunc.fecharconexao();
        }[/code]

Cristiano obrigado pela ajuda. :smiley: [/quote]
Entendi, de nada por nada :). Que bom que resolveu, não era nenhum dos meus palpites kkkkk.

Claro que ajudou, me salientando a conexão que eu fechava antes.

hehehe

abraço.

Movido para o fórum de persistência. Já que você é novo no fórum, leia com atenção a descrição dos fóruns antes de postar.

Ok vini obrigado pelo tok… e desculpa pelo erro.

Abrazz