Bom estou precisando pegar uma imagem (Blob ou Oid) que esta no BD (Postgre) e transforma-la em Image ou Inputstream para coloca-la em um relatorio feito com JasperReports.
Ja procurei, mas ainda não encotrei algo que funcione corretamente.
Estou com o mesmo problema, preciso listar as figuras de uma tabela no banco de dados, criar arquivos temporarios no banco acho que não é o melhor caminho, deve existir alguma forma de trazer esses dados direto no ireport.
No relatorio coloquei um parametro do Tipo Inputstream e passei este parametro para a imagem que tambem é do tipo Inputstream.
Mas esta ocorrendo um erro na hora de pegar o inputstream do Blob…
private Inputstream getLogoEmpresa() {
String sql = "select logo_empresa from empresa where id = 1";
Inputstream logo = null;
Connection conn = ConnectionFactory.getConnection();
conn.setAutoCommit(false);
PreparedStatement p = conn.prepareStatement(sql);
ResultSet result = p.executeQuery();
while(result.next()) {
Blob blob = result.getBlob("logo_empresa");
logo = blob.getBinaryStream(); // Aqui acontece o erro
}
return logo;
}
Erro:
Error loading byte data from input stream. - Causa: java.io.IOException: org.postgresql.util.PSQLException: Um erro de E/S ocorreu ao enviar para o processo servidor.