FileInputStream fis = new FileInputStream(file);
stmt.setBinaryStream(6, fis, (int)file.length());
aqui cadastro no banco
para recuperar faço o seguinte
Image img = Toolkit.getDefaultToolkit().createImage(rs.getBytes("foto_cliente"));
cli.setFoto_Cliente(img);
seto o Foto_Cliente com a imagem porem quando vou consultar nao da erro simplismente para todo o programa trava tudo alguma sujestao
meu get e set
private Image Foto_Cliente;
public Image getFoto_Cliente() {
return Foto_Cliente;
}
public void setFoto_Cliente(Image Foto_Cliente) {
this.Foto_Cliente = Foto_Cliente;
}
public Image getImagens(Integer id) throws SQLException, FileNotFoundException, IOException {
String sql = "SELECT foto_cliente FROM Cliente WHERE id_cliente = ?";
PreparedStatement stmt = getConexao().prepareStatement(sql);
stmt.setInt(1, id);
ResultSet rs = stmt.executeQuery();
byte[] imgBytes = rs.getBytes("foto_cliente");
OutputStream out = new FileOutputStream("arquivo.jpg");
out.write(imgBytes);
out.close();
System.out.println("Tamanho da imagem: " + imgBytes.length);
imagem = Toolkit.getDefaultToolkit().createImage(imgBytes); // recupera um array de bytes e cria uma images
return imagem;
}
essa funcao nao da erro porem nao retorna a imagem fiz isso aqui
jButton2.setIcon(new ImageIcon(clienteD.getImagens((2)))); e nao seta o icone com a imagem
porem se eu usar essa funcao
public Image getImagens(Cliente cli) throws SQLException, FileNotFoundException, IOException {
String sql = "SELECT foto_cliente FROM Cliente WHERE id_cliente = ?";
PreparedStatement stmt = getConexao().prepareStatement(sql);
stmt.setInt(1, cli.getid_Cliente());
ResultSet rs = stmt.executeQuery();
if (rs.next()){
byte[] imgBytes = rs.getBytes(1);
OutputStream out = new FileOutputStream("arquivo.jpg");
out.write(imgBytes);
out.close();
System.out.println(out);
System.out.println("Tamanho da imagem: " + imgBytes.length);
}
File sourceimage = new File("arquivo.jpg");
imagem = ImageIO.read(sourceimage);
cli.setFoto_Cliente(imagem);
rs.close();
stmt.close();
return imagem;
}
e chamar assim
jButton2.setIcon(new ImageIcon(clienteD.getImagens(lista.get(2))));
ai ele cria o arquivo no disco corespondente a o 2º cliente como na funcao anteriormente e ai sim funciona porem nao quero criar arquivo quero fazer direto alguem sujera alguma coisa ?????????
exatamente isso cara mas como tudo nada é prefeito POREM so funciona se estiver cadastrado no bannco um GIF somente com gif mas funciona perfeito fiquei 2 dias mechendo nisso e nao iria conseguir sem ajuda ,
isso mesmo cara valeu denovo so o negocio aqui minha jtable
private void preencheTabelaNomeCliente(){
DefaultTableModel modelo = new javax.swing.table.DefaultTableModel(
new Object [][] { },
new String [] {"Código", "Nome", "Estado", "CPF", "Data", "Foto"}
);
final ClienteDao clienteD = new ClienteDao();
tabela.setModel(modelo);
List<Cliente> lista = clienteD.listar(campo_pra_pesquisaNome.getText());//aqui pega o campo por parametro pra pesquiza
try {
//aqui pega o campo por parametro pra pesquiza
// jButton2.setIcon(new ImageIcon("C:\teste\excluir.gif"));
// jButton2.setIcon(new ImageIcon(clienteD.getImagens((2))));
jButton2.setIcon(clienteD.getImagen((4)));
} catch (SQLException ex) {
Logger.getLogger(ConsultarCliente.class.getName()).log(Level.SEVERE, null, ex);
}
tabela.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
tabela.getColumnModel().getColumn(0).setPreferredWidth(50);
tabela.getColumnModel().getColumn(1).setPreferredWidth(140);
tabela.getColumnModel().getColumn(2).setPreferredWidth(45);
tabela.getColumnModel().getColumn(3).setPreferredWidth(100);
tabela.getColumnModel().getColumn(4).setPreferredWidth(240);
tabela.getColumnModel().getColumn(5).setPreferredWidth(220);
tabela.setRowHeight(100);
String data = ("EEEE, dd 'de' MMMM 'de' yyyy, HH:mm:ss");
String dataFormatada ;
SimpleDateFormat formata = new SimpleDateFormat(data);
for( final Cliente cli:lista) {
tabela.getColumnModel().getColumn(5).setCellRenderer(new DefaultTableCellRenderer(){
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column){
this.setOpaque(true);
this.setText(value.toString());
try {
this.setIcon(clienteD.getImagen(cli.getid_Cliente()));
} catch (SQLException ex) {
Logger.getLogger(ConsultarCliente.class.getName()).log(Level.SEVERE, null, ex);
}
return this;
}
});
dataFormatada = formata.format(cli.getData_Cliente());
modelo.addRow(new String[] {
cli.getid_Cliente().toString(),
cli.getNome_Cliente(),
cli.getEstado_Cliente(),
cli.getCpf_Cliente(),
dataFormatada,
// cli.getData_Cliente().toString(),
"",
});
}
}
ai ele so coloca na coluna Foto o icone do primeiro registro quando eu faço uma pesquiza por um unico nome ai sim da certo mas quando tem varios no jtable ele sempre pega o icone do primeiro para todos os outros sabes aonde q ta o BUG ???
cada vez q passa no for eu seto o icone novo teria que funcionar