Olá amigo!
implementei a classe conforme vc mostrou acima, e consegui gravar no banco de dados, mas na hora de mostrar a imagem ele mostra o label em branco o que poderia ser, onde está a falha na hora de mostrar a imagem?
segue o codigo ajustado para meu banco de dados:
[code] import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
@SuppressWarnings(“serial”)
public class ImagemBanco extends JFrame{
public static Connection connection = null;
public static Statement statement = null;
public static ResultSet resultSet = null;
public static PreparedStatement pstmt = null;
public static void main(String[] args) {
// TODO Auto-generated method stub
new ImagemBanco().setVisible(true);
}
public ImagemBanco(){
try{
String banco="";
/**
* Conectando ao BD
*/
banco=("jdbc:mysql://localhost/siscorjava?user=elgin&password=admin");
Class.forName("com.mysql.jdbc.Driver");
connection= DriverManager.getConnection( banco );
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Importar imagem");
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
String caminhoImagem = null;
int a = fileChooser.showOpenDialog(null);
/**
- Se a for igual a zero e porque o usuario clicou em salvar, se for 1 e porque clicou em cancelar
*/
if (a==0)
{
caminhoImagem = fileChooser.getSelectedFile().getAbsolutePath();// Aqui estou pegando o nome do arquivo e o endereco dele
File input = new File(caminhoImagem);//Seleciona o arquivo do disco
//Aqui eu redimensiono a imagem a partir do file, 128x128 px
BufferedImage imageInput = ImageIO.read(input);
BufferedImage scaled = new BufferedImage(128, 128, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = scaled.createGraphics();
g2d.drawImage(imageInput, 0, 0, 128, 128, null);
g2d.dispose();
//Crie um ByteArrayOutputStream
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
//Jogue a imagem lá dentro do byteArrayOutputStream
ImageIO.write(scaled, “png”, byteArrayOutputStream);
//Prepara a sql e logo em seguida inser os bytes no campo parametrizado
//pstmt = connection.prepareStatement(“INSERT INTO imagem values (?)”);// o ? significa que ainda completareios parametros que faltam
pstmt = connection.prepareStatement ( “insert into Imagem value(?,?,?,?)” ) ;
pstmt.setInt ( 1,0 ) ;
pstmt.setInt (2,1);
pstmt.setString ( 3 , “final” ) ;
//pre.setBinaryStream ( 4 , fin, ( int ) imgfile.length ()) ;
pstmt.setBytes(4, byteArrayOutputStream.toByteArray()); //Complemento agora, passando a posicao do parametro e o valor
pstmt.executeUpdate();// Insiro no BD
//Fazendo processo contrario e pegaremos a imagem do banco para exibir, primeiro vamos pegar qual foi ID gerada pela chave
//primaria auto incremento.
statement= connection.createStatement();
resultSet= statement.executeQuery(“SELECT DISTINCT LAST_INSERT_ID() FROM imagem”);
resultSet.next();
int cod_Imagem = resultSet.getInt(1);// Esse é a chave primaria do registro
//Carregando o resultSet com a nossa busca
resultSet = pstmt.executeQuery(“SELECT * FROM imagem WHERE ID=”+cod_Imagem);
resultSet.next();
//Pegando a imagem (a partiri dos bytes que veio do banco) do registro pesquisado
Image img = Toolkit.getDefaultToolkit().createImage(resultSet.getBytes(2));
//Fechando a conexao
connection.close();
//Montando o imageIcon a partir do image
ImageIcon imageIcon = new ImageIcon(img);
//Criando o grafico para mostrar o resultado
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(160,172);
this.setLayout(null);
JLabel label = new JLabel();
label.setIcon(imageIcon);
label.setBounds(10,10,128,128);
setLocationRelativeTo(null);
this.add(label);
}
else{
System.exit(0);
}
}
catch(Exception ex){
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "ERRO");
}
}
}[/code]
grava direitinho no banco de dados mas na hora de mostrar a imagem no label aparece o label em branco, alguma sujestão ou dica para mostrar a imagem, pois terei que gravar no banco 3 ou quatro imagens referente ao produto , talvez se conseguir gravar uma imagem e mostrar ela na label quando o usuario selecionar, tentarei criar mais labels para gravar outra imagens e quando selecionar o produto ele me mostre as imagens gravadas no banco referente a este produto.
vc pode me ajudar
Agradeço a dica anteriormente e aguardo uma ajuda.
Um abraço.