Obrigado pela dica da tag!!!
Estou capturando o arquivo com esse método:
private void JBBuscarArquivoActionPerformed(java.awt.event.ActionEvent evt) {
try{
JFileChooser fc = new JFileChooser();
fc.setCurrentDirectory(new File("C:\Imagens"));
fc.setDialogTitle("Carregar foto do Carro");
fc.showOpenDialog(this);
setFotoCarro(ImageIO.read(new File(fc.getSelectedFile().getAbsolutePath())));
jlfoto.setIcon(new ImageIcon(getFotoCarro()));
JOptionPane.showMessageDialog(null,getFotoCarro());
}catch(Exception e){
JOptionPane.showMessageDialog(null,"Erro ao buscar a foto");
}
}
Utilizo uma classe Carro, um de seus atributos é private BufferedImage fotoCarro. Leio o arquivo com o método acima e atualizo o atributo fotoCarro com o retorno do
método ImageIO.read e passo o objeto Carro para a classe CarroBD.
public boolean gravaCarro(Carro car) throws ErroBD{
boolean gravou = false;
criaConexao();
Statement comando = null;
try{
//criar o comando sql a ser realizado
comando = conexao.createStatement();
comando.executeUpdate("insert into Carro (placa, tipo, modelo, ano, cor, " +
"chassis, quilometragem, diaria, disponibilidade, fotoCarro)"+
"value ('"+car.getPlaca()+"','" +
car.getTipo()+"','"+
car.getModelo()+"','"+
car.getAno()+"','"+
car.getCor()+"','"+
car.getChassis()+"',"+
car.getQuilometragem()+","+
car.getDiaria()+",'"+
car.isDisponibilidade()+"','"+
converteToBytes(car)+"')");
gravou = true;
comando.close();
}catch(SQLException erro){
erro.printStackTrace();
throw new ErroBD("erro na inserção do Carro");
}
finally{
fechaConexao();
return gravou;
}
}
public byte[] converteToBytes(Carro car){
byte[] byteArray = null;
try{
ByteArrayOutputStream bytesImg = new ByteArrayOutputStream();
ImageIO.write((BufferedImage)car.getFotoCarro(), "jpg", bytesImg);
bytesImg.flush();
byteArray = bytesImg.toByteArray();
bytesImg.close();
}catch(IOException e){
JOptionPane.showMessageDialog(null,"Erro ao converter a imagem"+e.getMessage());
e.printStackTrace();
}
finally{
return byteArray;
}
}
acima é o método para gravar no Banco e o método para converter BufferedImage em um array de bytes
public ListaCarro listarCarro() throws ErroBD{
ResultSet resultado = null;
criaConexao();
PreparedStatement comando = null;
Carro car = null;
ListaCarro listacarro = null;
try {
listacarro = new ListaCarro();
// criar o comando sql a ser realizado
comando = conexao.prepareStatement("select * from carro");
//executar a consulta e obter as tuplas selecionadas
resultado = comando.executeQuery();
//obter cada informação e armazenar na coleção
while(resultado.next()){
car = new Carro();
car.setPlaca(resultado.getString(1));
car.setTipo(resultado.getString(2));
car.setModelo(resultado.getString(3));
car.setAno(resultado.getString(4));
car.setCor(resultado.getString(5));
car.setChassis(resultado.getString(6));
car.setQuilometragem(resultado.getDouble(7));
car.setDiaria(resultado.getDouble(8));
car.setDisponibilidade(resultado.getString(9));
car.setFotoCarro(getBufferedImage(resultado.getBytes(10)));
listacarro.adicionaCarro(car);
}
resultado.close();
comando.close();
return listacarro;
} catch (SQLException erro) {
throw new ErroBD("erro ao realizar consulta");
}
finally{
fechaConexao();
}
}
acima o método para buscar os dados no banco. ListaCarro é uma classe que contém uma Collection para armazenas os Objetos de Carro.
E o método public BufferedImage getBufferedImage(byte[] vetor) para converter o array de bytes[] em uma BufferedImage está abaixo:
public BufferedImage getBufferedImage(byte[] vetor){
BufferedImage bi = null;
try{
bi = ImageIO.read(new ByteArrayInputStream(vetor));
}
catch(IOException e){
JOptionPane.showMessageDialog(null,"Erro ao converter o vetor " +
"de Bytes[] em BufferedImage"+e.getMessage());
e.printStackTrace();
}
finally{
return bi;
}
}