Receber Valor Blob do Banco para JAVA ImageIcon [RESOLVIDO]

estou com um problema, criei um campo Img Blob no meu Mysql e na minha classe cadastrar do Java adicionei os dados e uma variavel CadImg do tipo Image, segue o código

[code]public class Cadastrar extends javax.swing.JFrame {
Image CadImg;

public Cadastrar() {
    initComponents();
} ..[/code]

e seleciono a Imagem através do JFileChooser, segue o código

[code] FileNameExtensionFilter filtro = new FileNameExtensionFilter(“Arquivo de Imagem (*.jgp, *.gif, *.png, *.jpeg, *.bmp)”,“jpg”, “gif”, “png”, “jpeg”, “bmp”);
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(filtro);

    int retorno = fileChooser.showOpenDialog(null); // showSaveDialog retorna um inteiro , e ele ira determinar que o chooser será para salvar.
    if (retorno == JFileChooser.APPROVE_OPTION) {
        try {

        CadImg = ImageIO.read(fileChooser.getSelectedFile());
        JOptionPane.showMessageDialog(this, "Imagem Adicionada!");
         
        } catch(IOException ex ){
          JOptionPane.showMessageDialog(null,"Nao foi possivel abrir! Erro de Formato");
        }   
    } else {
        
    }[/code]

e na Classe Consultar, que é em formulário JFrame assim como a classe Cadastrar não consigo receber o valor em blob, segue o código

[code]try { //tratamento de erros
Class.forName(“com.mysql.jdbc.Driver”);//busca Driver
//conecta no BD
Connection con = DriverManager.getConnection(“jdbc:mysql://localhost:3306/ume”, “root”, “”);
Statement stmt = con.createStatement();//objeto comdo sql

    String ConsCpf = jTextField1.getText();
    ResultSet RS = stmt.executeQuery("Select * from TabFicha where Cpf='" + ConsCpf + "' ");
    while (RS.next()) {
            
          JFrame frame = new JFrame("Foto");
          ImageIcon image = new ImageIcon(RS.getURL("Img"));   //Ja tentei RS.getBlob(); mas não aceita esse método, o problema está por aqui
          JLabel label = new JLabel(image);
          frame.getContentPane().add(label, BorderLayout.CENTER);
          frame.setSize(350,400);
          label.setIcon(new ImageIcon(image.getImage().getScaledInstance(frame.getWidth(),frame.getHeight(), Image.SCALE_DEFAULT)));
          frame.setLocationRelativeTo(null);
          frame.setResizable(false);
          frame.setVisible(true);

        
    }
    RS.close();
    stmt.close();
    con.close(); //fecha conexão com BD
}  catch (SQLException e) { //trata os erros
    JOptionPane.showMessageDialog(this, "Não Tem Foto Cadastrada.");
} catch (ClassNotFoundException e) {
    JOptionPane.showMessageDialog(this, "Driver não encontrado");
}[/code]

Alguma ideia ? Me ajudem por favor. Obrigado

cara,
no teu primeiro code aí


vc tem:

  CadImg = ImageIO.read(fileChooser.getSelectedFile()); 

isso aí é uma variavel?
vc criou uma variavel com a primeira letra em maiusculo??

bom… onde eu trabalhava eles salvavam a pasta em um local, e
pegavam apenas o path da imagem (salvava como string)
nao existe essa possibilidade?

cara, no teu codigo vc ta misturando mto gui, com logica, com banco de dados…
estudar algum padrão de projeto seria legal viu…

tipo MVC (pra desktop fica feio, mas msmo assim… kkkk)…
faz uns DAOs também…

e outra dica: USE JPA/HIBERNATE

abraço

não, porque tem a possibilidade de computadores da rede precisarem consultar a imagem ai preciso jogá-la no bd.
Alguém tem alguma idéia ?

valeu

[quote=viniciusme]não, porque tem a possibilidade de computadores da rede precisarem consultar a imagem ai preciso jogá-la no bd.
Alguém tem alguma idéia ?

valeu[/quote]

então cara,
mas se alguém precisar consultar a imagem, vc
pega do servidor, carregar os Bytes e manda pela rede!!

pronto

ah tá, mas e se por exemplo, eu mudar de pasta a imagem ? não tem problema ? tipo ela vai pro banco como string não é ?
então como faço pra salvar ela no banco ? normal como string ?
e pra consultar ?

[quote=viniciusme]ah tá, mas e se por exemplo, eu mudar de pasta a imagem ? não tem problema ? tipo ela vai pro banco como string não é ?
então como faço pra salvar ela no banco ? normal como string ?
e pra consultar ?[/quote]

faz melhor então, não salve o path completo…
faça um esquema tipo

/upload/usuario/imagem

melhor ainda…
assim cada usuario terá apenas 1 mensagem salva no servidor… se mudar, sobreescreve…

aí o Path fica o q vc configurar na aplicação

e como eu faço isso ? tanto na classe de cadastro como na classe de consulta ?

Uai… primeiro é estabelecer qual path vc vai guardar as imagens.

Depois colocar um campo no usuario String foto… algo do tipo :slight_smile:

na hora de carregar:

verificar se o campo nao esta null ou inválido (arquivo nao existe)… Caso isso aconteça,
coloque um avatar default :slight_smile:

carregar o arquivo no java… os bytes e faz o que vc faria se estivesse guardado direto no BD.

na hora de salvar:
salva o arquivo no diretorio correto

abraços

então, acho que é mais simples jogar a imagem pro banco e consultar, só queria saber como converto pra cadastrar no banco e qual método uso pra consultar.

valeu

[quote=viniciusme]então, acho que é mais simples jogar a imagem pro banco e consultar, só queria saber como converto pra cadastrar no banco e qual método uso pra consultar.

valeu[/quote]

bom… neste caso: Clique aqui!

obrigado, resolvi.

eu recebi a imagem como file e a enviei ao banco em bytes
e a classe de consulta estava correta.