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!