Erro de cast ao transformar imagem para Blob

3 respostas Resolvido
Fefo80

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.

3 Respostas

staroski

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.

Fefo80
Solucao aceita

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();
staroski

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

Criado 11 de outubro de 2020
Ultima resposta 13 de out. de 2020
Respostas 3
Participantes 2