Erro de cast ao transformar imagem para Blob

Boa noite pessoal. Estou com um problema de conversão de imagem para blob, para poder armazenar no banco de dados.

Na classe Empresa, eu tenho:

===============

Image getLogo() {
return logo;
}

===============

e no DAO, tem:

===============

public boolean incluirEmpresa(Empresa emp) throws Exception {

	try {
		abrirConexao();

		instrucaoSQL = conexao.prepareStatement(
				"INSERT INTO tabEmpresa (nomeEmpresa , logoArquivo , proporcao) VALUES (?,?,?)");

		instrucaoSQL.setString(1, emp.getNome());
		instrucaoSQL.setBlob(2, (Blob) emp.getLogo());
		instrucaoSQL.setInt(3, emp.getProporcaoLogo());

		instrucaoSQL.execute();

		return true;

	} catch (Exception eIncluir) {
		System.out.println("eIncluir DAO - incluirEmpresa: " + eIncluir + "\n\n");
		return false;
	} finally {
		fecharConexao();
	}

}

===============

Estou recebendo o erro " java.lang.ClassCastException: class java.awt.image.BufferedImage cannot be cast to class java.sql.Blob (java.awt.image.BufferedImage is in module java.desktop of loader ‘bootstrap’; java.sql.Blob is in module java.sql of loader ‘platform’)"

Alguém tem alguma ideia?

Muito obrigado pela ajuda.

Na linha abaixo você está fazendo um cast de Image para Blob:

instrucaoSQL.setBlob(2, (Blob) emp.getLogo());

Ao setar uma coluna do tipo Blob no banco, você pode passar um InputStream ou o array de bytes que compõe a imagem.

1 curtida

Obrigado! Findei resolvendo de outra forma.

==========
Empresas.java

InputStream getLogo() {

	InputStream capsula = null;
	try {
		capsula = new FileInputStream(this.logo);
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	}
	
	return capsula;
	
}

==========
DAO:

instrucaoSQL = conexao
.prepareStatement(“INSERT INTO tabEmpresa (nomeEmpresa , logoArquivo , proporcao) VALUES (?,?,?)”);

		instrucaoSQL.setString(1, emp.getNome());
		instrucaoSQL.setBinaryStream(2, emp.getLogo());
		instrucaoSQL.setInt(3, emp.getProporcaoLogo());

		instrucaoSQL.execute();

Ué, mas resolveu usando InputStream, como sugeri. :slight_smile:

1 curtida