Problema com sql ao alterar usuário

4 respostas
newuser

Olá a todos. Tenho um erro de sql e não sei resolver.

É o seguinte: A superclasse Cadastro tem um atributo do tipo Municipio

Classe Cadastro:

package classe.modelo.vo;

import java.sql.Date;


public class Cadastro{
	private int id;
    private String cnpjCpf;
    private String razaoSocial;
    private String nome;
    private String inscrEstadual;
    private String rg;
    private String inscrMun;
    private String rua;
    private String complemento;
    private String numero;
    private String bairro;
    private Municipio municipio; // campo municipio id
    private String cep;
    private String telefone;
    private String www;
    private String email;
    private String obs;
    private Date dtCadastro;
    private String sts;
    private Empresa empresa;
    
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getCnpjCpf() {
		return cnpjCpf;
	}
	public void setCnpjCpf(String cnpjCpf) {
		this.cnpjCpf = cnpjCpf;
	}
	public String getRazaoSocial() {
		return razaoSocial;
	}
	public void setRazaoSocial(String razaoSocial) {
		this.razaoSocial = razaoSocial;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getInscrEstadual() {
		return inscrEstadual;
	}
	public void setInscrEstadual(String inscrEstadual) {
		this.inscrEstadual = inscrEstadual;
	}
	public String getRg() {
		return rg;
	}
	public void setRg(String rg) {
		this.rg = rg;
	}
	public String getInscrMun() {
		return inscrMun;
	}
	public void setInscrMun(String inscrMun) {
		this.inscrMun = inscrMun;
	}
	public String getRua() {
		return rua;
	}
	public void setRua(String rua) {
		this.rua = rua;
	}
	public String getComplemento() {
		return complemento;
	}
	public void setComplemento(String complemento) {
		this.complemento = complemento;
	}
	public String getNumero() {
		return numero;
	}
	public void setNumero(String numero) {
		this.numero = numero;
	}
	public String getBairro() {
		return bairro;
	}
	public void setBairro(String bairro) {
		this.bairro = bairro;
	}
	public Municipio getMunicipio() {
		return municipio;
	}
	public void setMunicipio(Municipio municipio) {
		this.municipio = municipio;
	}
	public String getCep() {
		return cep;
	}
	public void setCep(String cep) {
		this.cep = cep;
	}
	public String getTelefone() {
		return telefone;
	}
	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}
	public String getWww() {
		return www;
	}
	public void setWww(String www) {
		this.www = www;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getObs() {
		return obs;
	}
	public void setObs(String obs) {
		this.obs = obs;
	}
	public Date getDtCadastro() {
		return dtCadastro;
	}
	public void setDtCadastro(Date dtCadastro) {
		this.dtCadastro = dtCadastro;
	}
	public String getSts() {
		return sts;
	}
	public void setSts(String sts) {
		this.sts = sts;
	}
	public Empresa getEmpresa() {
		return empresa;
	}
	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}    
}

A classe Usuário:

package classe.modelo.vo;

public class Usuario extends Cadastro{
	private int id;
    private String login;
    private String senha;
    private String status;
    
    @Override
	public int getId() {
		return id;
	}
    @Override
	public void setId(int id) {
		this.id = id;
	}
	public String getLogin() {
		return login;
	}
	public void setLogin(String login) {
		this.login = login;
	}
	public String getSenha() {
		return senha;
	}
	public void setSenha(String senha) {
		this.senha = senha;
	}
	public String getStatus() {
		return status;
	}
	public void setStatus(String status) {
		this.status = status;
	}
       
}

E por fim a classe Municipio:

package classe.modelo.vo;

public class Municipio {
	private int id;
    private String descricao;
    private String codigo;
    private UF uf; // id da uf
    
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public String getCodigo() {
		return codigo;
	}
	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}
	public UF getUf() {
		return uf;
	}
	public void setUf(UF uf) {
		this.uf = uf;
	}
     
}

Na classe UsuarioDao eu tenho o método alterar:

public boolean alterar(Usuario usuario) throws SQLException{
    	try {
    		conexao = Conexao.conectar();
    		conexao.setAutoCommit(false);

    		StringBuffer sql1 = new StringBuffer();
    		StringBuffer sql2 = new StringBuffer();
    		
    		sql1.append("UPDATE cadastro SET ");
    		sql1.append("cad_nome=?, ");
    		sql1.append("cad_email=?, ");
    		sql1.append("cad_telefone=?, ");
    		sql1.append("cad_cnpjcpf=?, ");
    		sql1.append("cad_rg=?, ");
    		sql1.append("cad_rua=?, ");
    		sql1.append("cad_complemento=?, ");
    		sql1.append("cad_numero=?, ");
    		sql1.append("cad_bairro=?, ");
    		sql1.append("cad_munid=?, ");
    		sql1.append("cad_cep=?, ");
    		sql1.append("cad_obs=? ");
    		sql1.append("where cad_id=? ");
    		PreparedStatement consulta1 = conexao.prepareStatement(sql1.toString());
    		usuario.setMunicipio(new Municipio());
    		consulta1.setString(1, usuario.getNome());
    		consulta1.setString(2, usuario.getEmail());
    		consulta1.setString(3, usuario.getTelefone());
    		consulta1.setString(4, usuario.getCnpjCpf());
    		consulta1.setString(5, usuario.getRg());
    		consulta1.setString(6, usuario.getRua());
    		consulta1.setString(7, usuario.getComplemento());
    		consulta1.setString(8, usuario.getNumero());
    		consulta1.setString(9, usuario.getBairro());
    		consulta1.setInt(10, usuario.getMunicipio().getId());
    		consulta1.setString(11, usuario.getCep());
    		consulta1.setString(12, usuario.getObs());
    		consulta1.setInt(13, usuario.getId());
    		consulta1.executeUpdate();
    		
    		sql2.append("UPDATE usuario SET usu_login = ?, usu_senha = ?, usu_sts = ? WHERE usu_id = ?");
    		PreparedStatement consulta2 = conexao.prepareStatement(sql2.toString());
    		consulta2.setString(1, usuario.getLogin());
            consulta2.setString(2, usuario.getSenha());
            consulta2.setString(3, usuario.getStatus());
            consulta1.setInt(4, usuario.getId());
    		consulta2.executeUpdate();
    		
    		conexao.commit();
    		System.out.println("Transaction commit...");
    		conexao.setAutoCommit(true);
    		return true;
		   } catch (Exception e) {
			 if(conexao!=null){
			    conexao.rollback();
			    System.out.println("Connection rollback...");
			}
			e.printStackTrace();
			return false;
		}
    }

Quando eu executo dá o seguinte mensagem:
ERRO: inserção ou atualização em tabela “cadastro” viola restrição de chave estrangeira “fk_cadastro_municipio”
Detalhe: Chave (cad_munid)=(0) não está presente na tabela “municipio”.

Mas cad_munid é o campo da tabela cadastro que referencia o campo mun_id da tabela municipio

Obrigado a quem me ajudar!

4 Respostas

leocantanhede

Na linha 24 você deveria passar o código do município, não um objeto

usuario.getMunicipio.setId();
newuser

Não entendi direito :!:

newuser

Eu fiz o que o Leocatanhede falou mas continua dando erro. Eu estou usando o eclipse galileo e ele mesmo sublinha de vermelho quando eu faço isso.
Não sei o que fazer.

newuser

Me disseram que o erro tá nessa linha mas tudo que eu mudo não dá certo.

consulta1.setInt(10, usuario.getMunicipio().getId());
Criado 1 de fevereiro de 2012
Ultima resposta 2 de fev. de 2012
Respostas 4
Participantes 2