Erro ao salvar uma imagem no banco campo blob

3 respostas
dcorteztec

blz amigos espero que vcs possam me ajudar bom cadastrar esse formulário com foto ta dando esse erro. Prece que ese não esta conseguindo invocar o bjeto setImagem eu nunca vi esse erro, e tbm é a primeira vez que tento fazer um formulário com foto.

xception

javax.servlet.ServletException: BeanUtils.populate

org.apache.struts.util.RequestUtils.populate(RequestUtils.java:495)

org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:805)

org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)

org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)

org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)

javax.servlet.http.HttpServlet.service(HttpServlet.java:710)

javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

root cause
java.lang.IllegalArgumentException: Cannot invoke br.com.novavida.pojo.Cadastro.setImagem - argument type mismatch

org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:177

org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:1759)

org.apache.commons.beanutils.PropertyUtilsBean.setNestedProperty(PropertyUtilsBean.java:164

org.apache.commons.beanutils.PropertyUtilsBean.setProperty(PropertyUtilsBean.java:1677)

org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1022)

org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:811)

org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:29

org.apache.struts.util.RequestUtils.populate(RequestUtils.java:493)

org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:805)

org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:203)

org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)

org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)

javax.servlet.http.HttpServlet.service(HttpServlet.java:710)

javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.26 logs.

Meus códigos

minha jsp só botei a parte do problema

<%@ page language="java" contentType="text/html; charset=UTF-8"  
    pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html"  
    prefix="html"%>  
<html>  
    <head>  
  
    </head>  
    <body>  
        <html:errors />  
        <html:form action="/adicionacadastro" focus="cadastro.nome">  
<!-- <h1><u>Cadastro de Membros</u></h1>-->  
Foto:<html:file property="cadastro.imagem"></html:file>

minha action

import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
import org.apache.struts.action.Action;  
import org.apache.struts.action.ActionForm;  
import org.apache.struts.action.ActionForward;  
import org.apache.struts.action.ActionMapping;  
  
import br.com.novavida.DAO.CadastraoDAO;  
import br.com.novavida.Form.CadastroForm;  
import br.com.novavida.pojo.Cadastro;  
  
public class AdcionaCadastroAction extends Action{  
    public ActionForward execute(ActionMapping mapping, ActionForm form,  
            HttpServletRequest request, HttpServletResponse response)  
            throws Exception {  
        CadastroForm formulario = (CadastroForm) form;  
        Cadastro cadastro = formulario.getCadastro();  
        CadastraoDAO dao = new CadastraoDAO();  
        dao.adiciona(cadastro);  
        System.out.println("criando cadastro" + cadastro.getNum_cad());  
        return mapping.findForward("adiciona");  
    }  
}

meu form

package br.com.novavida.Form;  
  
import javax.servlet.http.HttpServletRequest;  
  
import org.apache.struts.action.ActionErrors;  
import org.apache.struts.action.ActionForm;  
import org.apache.struts.action.ActionMapping;  
import org.apache.struts.action.ActionMessage;  
  
import br.com.novavida.pojo.Cadastro;  
  
public class CadastroForm extends ActionForm {  
  
    private static final long serialVersionUID = 1L;  
  
    private Cadastro cadastro = new Cadastro();  
  
    public Cadastro getCadastro() {  
        return cadastro;  
    }  
  
    public ActionErrors validate(ActionMapping mapping,  
            HttpServletRequest request) {  
  
        ActionErrors errors = new ActionErrors();  
  
        if (cadastro.getNome() == null || cadastro.getNome().equals("")) {  
            errors.add("nome", new ActionMessage("erro.camponome"));  
        }  
        if (cadastro.getEndereco() == null || cadastro.getEndereco().equals("")) {  
            errors.add("endereco", new ActionMessage("erro.campoendereco"));  
        }  
        if (cadastro.getBairro() == null || cadastro.getBairro().equals("")) {  
            errors.add("bairro", new ActionMessage("erro.campobairro"));  
        }  
        if (cadastro.getCidade() == null || cadastro.getCidade().equals("")) {  
            errors.add("cidade", new ActionMessage("erro.campocidade"));  
        }  
        if(cadastro.getUf() == null || cadastro.getUf().equals("")){  
            errors.add("uf", new ActionMessage("erro.campouf"));  
        }  
        if(cadastro.getNascimento() == null || cadastro.equals("")){  
            errors.add("nascimento", new ActionMessage("erro.camponascimento"));  
        }  
        if(cadastro.getProfissao() == null || cadastro.getProfissao().equals("")){  
            errors.add("profissao", new ActionMessage("erro.campoprofissao"));  
        }  
        if(cadastro.getEstcivil() == null || cadastro.getEstcivil().equals("")){  
            errors.add("estcivil", new ActionMessage("erro.campoestadocivil"));  
        }  
        if(cadastro.getBatismo() == null || cadastro.getBatismo().equals("")){  
            errors.add("batismo", new ActionMessage("erro.campobatismo"));  
        }  
        if(cadastro.getFuncao() == null || cadastro.getFuncao().equals("")){  
            errors.add("funcao", new ActionMessage("erro.campofuncao"));  
        }  
        if(cadastro.getDataent() == null || cadastro.getDataent().equals("")){  
            errors.add("dataent", new ActionMessage("erro.campodatadeentrada"));  
        }  
        return errors;  
    }  
}

Meu DAO

package br.com.novavida.DAO;  
  
import java.sql.Connection;  
import java.sql.PreparedStatement;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
import java.util.ArrayList;  
import java.util.List;  
  
import br.com.novavida.connections.ConnectionsFactory;  
import br.com.novavida.pojo.Cadastro;  
  
public class CadastraoDAO {  
  
    private Connection connection;  
  
    public CadastraoDAO(Connection conn) {  
        this.connection = conn;  
    }  
  
    public CadastraoDAO() throws SQLException {  
        this.connection = ConnectionsFactory.getConnection();  
  
    }  
  
    public void adiciona(Cadastro cadastro) throws SQLException {  
        PreparedStatement statement = this.connection  
                .prepareStatement ("INSERT INTO cad_membro (NOME_CAD,END_CAD,BAIRRO_CAD,CIDADE_CAD,UF_CAD,CEP_CAD,TEL_CAD,TELTRAB_CAD,"  
                        + "NASC_CAD,PROF_CAD,ESTACIV_CAD,DATACAS_CAD,NFILHOS_CAD,NOMECONJ_CAD,MEMBCONJ_CAD,OUTRAIGRE_CAD,BATISNASG_CAD,FUNCAO_CAD,EMAIL_CAD,DATAENT_CAD,"  
                        + "IMAGEM_CAD, NASCONJ_CAD) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");  
        statement.setString(1, cadastro.getNome());  
        statement.setString(2, cadastro.getEndereco());  
        statement.setString(3, cadastro.getBairro());  
        statement.setString(4, cadastro.getCidade());  
        statement.setString(5, cadastro.getUf());  
        statement.setInt(6, cadastro.getCep());  
        statement.setInt(7, cadastro.getTelefone());  
        statement.setInt(8, cadastro.getTeltrab());  
        statement.setDate(9, cadastro.getNascimento());  
        statement.setString(10, cadastro.getProfissao());  
        statement.setString(11, cadastro.getEstcivil());  
        statement.setDate(12, cadastro.getDatacas());  
        statement.setInt(13, cadastro.getNfilhos());  
        statement.setString(14, cadastro.getConjuge());  
        statement.setString(15, cadastro.getMembroigreja());  
        statement.setString(16, cadastro.getOutraigreja());  
        statement.setDate(17, cadastro.getBatismo());  
        statement.setString(18, cadastro.getFuncao());  
        statement.setString(19, cadastro.getEmail());  
        statement.setDate(20, cadastro.getDataent());  
        statement.setBlob(21, cadastro.getImagem());  
        statement.setDate(22, cadastro.getNasconj());  
  
        statement.execute();  
        statement.close();  
  
    }  
  
    public void remove(Cadastro cadastro) throws SQLException {  
        PreparedStatement statement = connection  
                .prepareStatement("DELETE FOM cad_membro WHERE NUM_CAD=?");  
  
        statement.setLong(1, cadastro.getNum_cad());  
  
        statement.execute();  
        statement.close();  
    }  
  
    public List<Cadastro> getLista() throws SQLException {  
        PreparedStatement statement = this.connection  
                .prepareStatement("SELECT * FROM cad_membro");  
        ResultSet rs = statement.executeQuery();  
  
        List<Cadastro> cad = new ArrayList<Cadastro>();  
  
        while (rs.next()) {  
  
            Cadastro cadastro = new Cadastro();  
  
            cadastro.setNum_cad(rs.getLong("NUM_CAD"));  
            cadastro.setBairro(rs.getString("BAIRRO_CAD"));  
            cadastro.setBatismo(rs.getDate("BATISNASG"));  
            cadastro.setCep(rs.getInt("CEP_CAD"));  
            cadastro.setCidade(rs.getString("CIDADE_CAD"));  
            cadastro.setConjuge(rs.getString("NOME_CONJ"));  
            cadastro.setDatacas(rs.getDate("DATACAS_CAD"));  
            cadastro.setDataent(rs.getDate("DATAENT_CAD"));  
            cadastro.setEmail(rs.getString("EMAIL_CAD"));  
            cadastro.setEndereco(rs.getString("END_CAD"));  
            cadastro.setEstcivil(rs.getString("ESTACIV_CAD"));  
            cadastro.setFuncao(rs.getString("FUNCAO_CAD"));  
            cadastro.setImagem(rs.getBlob("IMAGEM_CAD"));  
            cadastro.setMembroigreja(rs.getString("MENBCONJ"));  
            cadastro.setNascimento(rs.getDate("NASC_CAD"));  
            cadastro.setNfilhos(rs.getInt("NFILHOS"));  
            cadastro.setNome(rs.getString("NOME_CAD"));  
            cadastro.setOutraigreja(rs.getString("OUTRAIGRE"));  
            cadastro.setProfissao(rs.getString("PROF_CAD"));  
            cadastro.setTelefone(rs.getInt("TEL_CAD"));  
            cadastro.setTeltrab(rs.getInt("TELTRAB_CAF"));  
            cadastro.setUf(rs.getString("UF_CAD"));  
            cadastro.setNasconj(rs.getDate("NASCONJ_CAD"));  
            // ADCIONANDO OBJ A LISTA  
  
            cad.add(cadastro);  
  
        }  
        rs.close();  
        statement.close();  
  
        return cad;  
    }  
  
    public void altera(Cadastro cadastro) throws SQLException {  
        PreparedStatement statement = connection  
                .prepareStatement("UPDATE cad_membro SET NOME_CAD=?,END_CAD=?,BAIRRO_CAD=?,CIDADE_CAD=?,UF_CAD=?,CEP_CAD=?,TEL_CAD=?,TELTRAB_CAD=?,"  
                        + "NASC_CAD=?,PROF_CAD=?,ESTACIV_CAD=?,DATACAS_CAD=?,NFILHOS_CAD=?,NOMECONJ_CAD=?,MEMBCONJ_CAD=?,OUTRAIGRE_CAD=?,BATISNASG_CAD=?,FUNCAO_CAD=?,EMAIL_CAD=?,DATAENT_CAD=?,"  
                        + "IMAGEM_CAD=? WHERE NUM_CAD=?");  
        statement.setString(1, cadastro.getNome());  
        statement.setString(2, cadastro.getEndereco());  
        statement.setString(3, cadastro.getBairro());  
        statement.setString(4, cadastro.getCidade());  
        statement.setString(5, cadastro.getUf());  
        statement.setInt(6, cadastro.getCep());  
        statement.setInt(7, cadastro.getTelefone());  
        statement.setInt(8, cadastro.getTeltrab());  
        statement.setDate(9, cadastro.getNascimento());  
        statement.setString(10, cadastro.getProfissao());  
        statement.setString(11, cadastro.getEstcivil());  
        statement.setDate(12, cadastro.getDatacas());  
        statement.setInt(13, cadastro.getNfilhos());  
        statement.setString(14, cadastro.getConjuge());  
        statement.setString(15, cadastro.getMembroigreja());  
        statement.setString(16, cadastro.getOutraigreja());  
        statement.setDate(17, cadastro.getBatismo());  
        statement.setString(18, cadastro.getFuncao());  
        statement.setString(19, cadastro.getEmail());  
        statement.setDate(20, cadastro.getDataent());  
        statement.setBlob(21, cadastro.getImagem());  
        statement.setLong(22, cadastro.getNum_cad());  
        statement.setDate(23, cadastro.getNasconj());  
          
        statement.execute();  
        statement.close();  
  
    }  
  
    public Cadastro procura(Long id) throws SQLException {  
        Cadastro cadastro = new Cadastro();  
        PreparedStatement statement = this.connection  
                .prepareStatement("SELECT * FROM cad_membro");  
        statement.setLong(1, id);  
  
        ResultSet rs = statement.executeQuery();  
  
        while (rs.next()) {  
            cadastro.setNum_cad(rs.getLong("NUM_CAD"));  
            cadastro.setBairro(rs.getString("BAIRRO_CAD"));  
            cadastro.setBatismo(rs.getDate("BATISNASG"));  
            cadastro.setCep(rs.getInt("CEP_CAD"));  
            cadastro.setCidade(rs.getString("CIDADE_CAD"));  
            cadastro.setConjuge(rs.getString("NOME_CONJ"));  
            cadastro.setDatacas(rs.getDate("DATACAS_CAD"));  
            cadastro.setDataent(rs.getDate("DATAENT_CAD"));  
            cadastro.setEmail(rs.getString("EMAIL_CAD"));  
            cadastro.setEndereco(rs.getString("END_CAD"));  
            cadastro.setEstcivil(rs.getString("ESTACIV_CAD"));  
            cadastro.setFuncao(rs.getString("FUNCAO_CAD"));  
            cadastro.setImagem(rs.getBlob("IMAGEM_CAD"));  
            cadastro.setMembroigreja(rs.getString("MENBCONJ"));  
            cadastro.setNascimento(rs.getDate("NASC_CAD"));  
            cadastro.setNfilhos(rs.getInt("NFILHOS"));  
            cadastro.setNome(rs.getString("NOME_CAD"));  
            cadastro.setOutraigreja(rs.getString("OUTRAIGRE"));  
            cadastro.setProfissao(rs.getString("PROF_CAD"));  
            cadastro.setTelefone(rs.getInt("TEL_CAD"));  
            cadastro.setTeltrab(rs.getInt("TELTRAB_CAF"));  
            cadastro.setUf(rs.getString("UF_CAD"));  
            cadastro.setNasconj(rs.getDate("NASCONJ_CAD"));  
              
        }  
        return cadastro;  
    }  
}

3 Respostas

zoren

No método getImagem da classe cadastro, qual o retorno?

no JPA é usado um vetor de bytes para armazenar a imagem

edit:

me enganei, mas mesmo assim, que tipo de variavel que vc usa pra armazenar a imagem na sua classe?

dcorteztec

vou colocar a classe cadastro

eu nunca manipulei esses tipos de dados me ajuda mostra onde eu errei.

package br.com.novavida.pojo;


import java.sql.Date;

import com.mysql.jdbc.Blob;

public class Cadastro {
	
	private Long num_cad;
	
	private String nome;

	private String email;

	private String endereco;

	private String bairro;

	private String cidade;

	private String uf;

	private int cep;

	private int telefone;

	private Date nascimento;

	private String profissao;

	private String estcivil;

	private int nfilhos;

	private String conjuge;

	private String membroigreja;

	private String outraigreja;

	private Date batismo;

	private String funcao;
    
	private Blob imagem;
	
	private Date dataent;
	
	private int teltrab;
	
	private Date datacas;
    
	private Date nasconj;
	
	
	public String getBairro() {
		return bairro;
	}

	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	public Date getBatismo() {
		return batismo;
	}

	public void setBatismo(Date batismo) {
		this.batismo = batismo;
	}

	public int getCep() {
		return cep;
	}

	public void setCep(int cep) {
		this.cep = cep;
	}

	public String getCidade() {
		return cidade;
	}

	public void setCidade(String cidade) {
		this.cidade = cidade;
	}

	public String getConjuge() {
		return conjuge;
	}

	public void setConjuge(String conjuge) {
		this.conjuge = conjuge;
	}

	public Date getDatacas() {
		return datacas;
	}

	public void setDatacas(Date datacas) {
		this.datacas = datacas;
	}

	public Date getDataent() {
		return dataent;
	}

	public void setDataent(Date dataent) {
		this.dataent = dataent;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getEndereco() {
		return endereco;
	}

	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}

	public String getEstcivil() {
		return estcivil;
	}

	public void setEstcivil(String estcivil) {
		this.estcivil = estcivil;
	}

	public String getFuncao() {
		return funcao;
	}

	public void setFuncao(String funcao) {
		this.funcao = funcao;
	}

	public Blob getImagem() {
		return imagem;
	}

	public void setImagem(Blob imagem) {
		this.imagem = imagem;
	}

	public String getMembroigreja() {
		return membroigreja;
	}

	public void setMembroigreja(String membroigreja) {
		this.membroigreja = membroigreja;
	}

	public Date getNascimento() {
		return nascimento;
	}

	public void setNascimento(Date nascimento) {
		this.nascimento = nascimento;
	}

	public int getNfilhos() {
		return nfilhos;
	}

	public void setNfilhos(int nfilhos) {
		this.nfilhos = nfilhos;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public Long getNum_cad() {
		return num_cad;
	}

	public void setNum_cad(Long num_cad) {
		this.num_cad = num_cad;
	}

	public String getOutraigreja() {
		return outraigreja;
	}

	public void setOutraigreja(String outraigreja) {
		this.outraigreja = outraigreja;
	}

	public String getProfissao() {
		return profissao;
	}

	public void setProfissao(String profissao) {
		this.profissao = profissao;
	}

	public int getTelefone() {
		return telefone;
	}

	public void setTelefone(int telefone) {
		this.telefone = telefone;
	}

	public int getTeltrab() {
		return teltrab;
	}

	public void setTeltrab(int teltrab) {
		this.teltrab = teltrab;
	}

	public String getUf() {
		return uf;
	}

	public void setUf(String uf) {
		this.uf = uf;
	}

	public Date getNasconj() {
		return nasconj;
	}

	public void setNasconj(Date nasconj) {
		this.nasconj = nasconj;
	}
	

}
zoren

Provavelmente o framework que você está usando não está conseguindo converter sua imagem para blob

no JPA eu uso um vetor de bytes para armazenar as imagens e assim passa-las para o banco

nunca usei blob com JDBC direto

dá uma pesquisada para ver qual o formato que ele espera para um campo blob, se é blob mesmo ou outro

Criado 18 de dezembro de 2009
Ultima resposta 18 de dez. de 2009
Respostas 3
Participantes 2