Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #59 da revista programar. Faz já o download aqui!

gregoriolima

Programa de Vendas - Problema Chave Estrangeira

Mensagens Recomendadas

gregoriolima    0
gregoriolima

Olá, estou fazendo um programa de vendas junto com banco de dados, utilizando o netbeans e conectando com mysql. Porém na hora de fazer uma venda, o seguinte erro aparece:

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`conveniencia`.`venda`, CONSTRAINT `venda_ibfk_2` FOREIGN KEY (`codigo_funcionario`) REFERENCES `funcionario` (`codigo`))

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`conveniencia`.`venda`, CONSTRAINT `venda_ibfk_2` FOREIGN KEY (`codigo_cliente`) REFERENCES `cliente` (`codigo`))

Como resolver este problema? Segue abaixo uma parte do codigo do programa.

package DAO;

import Dominio.Venda;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;


public class VendaDAO {
 //Construtor
public VendaDAO(){}

public void incluirVenda(Venda venda) {

	Connection con = new FabricaConexoes().getConnection();

	String sql = "insert into venda ( numero_venda , quantidade , codigo_produto , codigo_funcionario , codigo_cliente, data ) values (?,?,?,?,?,NOW())";

	try {

		PreparedStatement v = con.prepareStatement(sql);

		v.setInt(1, venda.getNumero_venda());
		v.setInt(2, venda.getQuantidade());
		v.setInt(3, venda.getCodigo_produto());
		v.setInt(4, venda.getCodigo_funcionario());
		v.setInt(5, venda.getCodigo_cliente());


		v.executeQuery();
		v.close();
		con.close();
		System.out.println("Venda Efetuada com sucesso.");

	} catch (Exception e) {
		System.out.println(e);
		System.out.println("Erro na Gravação.");

	}

}

public List BuscaVenda(){

	Connection con = new FabricaConexoes().getConnection();

	String sql1 = "select * from venda";
	List venda = new ArrayList();
	try {
		PreparedStatement v = con.prepareStatement(sql1);

		ResultSet tabela = v.executeQuery();
		Venda v1 = null;


		while(tabela.next()){
			v1 = new Venda();

			v1.setNumero_venda(Integer.parseInt(tabela.getString("numero_venda")));
			v1.setQuantidade(Integer.parseInt(tabela.getString("quantidade")));
			v1.setCodigo_produto(Integer.parseInt(tabela.getString("codigo_produto")));  
			v1.setCodigo_funcionario(Integer.parseInt(tabela.getString("codigo_funcionario")));
			v1.setCodigo_cliente(Integer.parseInt(tabela.getString("codigo_cliente")));
			v1.setData(tabela.getString("data"));
			venda.add(v1);
	   }

		v.close();
		con.close();
		System.out.println("Busca realizada com sucesso.");


	} catch (Exception e) {

		System.out.println("Falha na Busca.");

	}
	return venda;


}

  public void alterarVenda(Venda venda) {
   Connection con = new FabricaConexoes().getConnection();

   String sql3 = "update venda set quantidade = ? , codigo_produto = ? , codigo_funcionario = ?, codigo_cliente = ?, data = NOW() where numero_venda = ?";

	try {

		PreparedStatement v3 = con.prepareStatement(sql3);

		v3.setInt(1, venda.getQuantidade());
		v3.setInt(2, venda.getCodigo_produto());
		v3.setInt(3, venda.getCodigo_funcionario());
		v3.setInt(4, venda.getNumero_venda());
		v3.setInt(5, venda.getCodigo_cliente());


		v3.execute();
		v3.close();
		con.close();
		System.out.println("Venda alterado com sucesso.");

	} catch (Exception e) {

		System.out.println("Falha na Alteração.");
	}
}



}

Editado por Rui Carlos
Formatação do código.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
jsWizard    6
jsWizard

..sem olhar para o código java.. eu diria que estás a tentar inserir códigos na tabela "vendas" que não existem nas tabelas relacionadas:

(`codigo_funcionario`) REFERENCES `funcionario` (`codigo`))

(`codigo_cliente`) REFERENCES `cliente` (`codigo`))

portanto, o código do funcionário que estás a tentar inserir na tabela "vendas" não existe na tabela "funcionário".

O mesmp para o código de cliente.

E portanto a bd não deixa, porque viola as FKs definidas, ou seja, iria violar a integridade dos dados na base de dados.

( de resto.. não faço a minima se o código java está correcto ou não :D )

Inté

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
gregoriolima    0
gregoriolima

Mas eu já inseri o funcionário e o cliente e estão na tabela. Tento fazer a venda pelo terminal do MySQL e dá certo. O problema é quando executo o programa.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.