Como capturar mais de um atributo a partir de uma chave estrangeira?

01/02/2017

0

Ola meu nome é Bianca, sou estudante de Sistemas de Informação e iniciante
na linguagem de programação Java. Estou fazendo um projeto Java-Desktop de Locação de Veículos.
Estou usando MVC, DAO e JDBC.

No meu banco tenho as tabelas Locacao e Carro:

CREATE TABLE carro (idcarro INT NOT NULL AUTO_INCREMENT, ... , marca VARCHAR(100),
modelo VARCHAR(100), PRIMARY KEY (idcarro));

CREATE TABLE locacao (idlocacao INT NOT NULL AUTO_INCREMENT, fkcodcarro INT NOT NULL,
fkcodcliente INT NOT NULL, fkcodfuncionario INT NOT NULL, data_locacao DATE, hora_locacao TIME(10),
data_devolucao DATE, hora_devolucao TIME(10), tempo VARCHAR(45), status VARCHAR(100) NOT NULL,
taxa DOUBLE NOT NULL, PRIMARY KEY (idlocacao));


Tenho também uma interface gráfica LocaçãoCarro e dois campos de texto Marca e Modelo da tabela Carro.
Minha intençao é gravar no banco na tabela Locacao. Sei q tenho q utilizar a chave de estrangeira de carro(fkcodcarro)
de alguma forma, ja pesquisei e tentei fazer de diversas maneiras mas sempre continua dando o mesmo erro.
Bianca Reis

Bianca Reis

Responder

Posts

01/02/2017

Bianca Reis

O erro diz: Cannot add or update a child row: a foreigh key constraint fails ( ''frota''.''locacao'', CONSTRAINT ''fk_locacao_carro1'' FOREIGN KEY (''fkcodcarro'') REFERENCES ''carro'' (''idcarro'') ON DELETE CASCADE ON UPDATE CASCADE).
Responder

01/02/2017

Fernando C

1. vc criou a tabela carros corretamente? se não, essa fk vai "negar" mesmo;
2. nesse seu caso, não precisa explicar tanto, pois seu problema por enquanto está sendo somente criar chave estrangeira.. tente o seguinte: poste o comando que vc está usando para criar essas fks ou tente esse:
 alter table locacao add constraint foreign key (fkcodcarro) references carro (idcarro)
(sem aspas);
3. ao criar a fk as vezes o mysql exige que declare o tipo de dado com mais exatidão (nº de casas, unsigned) - cuidado com o "not null"
4. verifique se a tabela é InnoDB ou poste a versão do My;
5. rodei seus comandos e tudo ok, exceto pelo fato de que o tipo time não tem nº de casas; ficaria assim, portanto: hora_locacao TIME, hora_devolucao TIME, etc.
6. um artigo bem legal:
https://www.devmedia.com.br/sql-aprenda-a-utilizar-a-chave-primaria-e-a-chave-estrangeira/37636
Responder

01/02/2017

Luciano Silva

Pelo que entendi você quer cadastrar no banco de dados o veiculo. e quando for fazer a locação importa isso para a tabela certo?
tenho um sistema parecido eu crie uma tabela tbMarca e tbModelo e tbVeiculo, marca e modelo já estão cadastradas no banco de dados, na tela para o usuário ele coloca as informações do veiculo, placa, chassi, e marca e modelo estão como combobox. na sua tabela locação e só usa fk_idveiculo
Responder

01/02/2017

Bianca Reis

tbCarro:

CREATE TABLE IF NOT EXISTS `frota`.`carro` (
idcarro INT NOT NULL,
chassi VARCHAR(45) NULL DEFAULT NULL,
renavam VARCHAR(45) NULL DEFAULT NULL,
placa VARCHAR(45) NULL DEFAULT NULL,
combustivel VARCHAR(45) NULL DEFAULT NULL,
numero_de_portas INT NULL DEFAULT NULL,
cor VARCHAR(45) NULL DEFAULT NULL,
ano INT NULL DEFAULT NULL,
quilometragem INT NULL DEFAULT NULL,
valor_locacao DOUBLE NULL DEFAULT NULL,
marca VARCHAR(100) NULL DEFAULT NULL,
modelo VARCHAR(100) NULL DEFAULT NULL,
PRIMARY KEY (idcarro))
ENGINE = InnoDB
AUTO_INCREMENT = 19
DEFAULT CHARACTER SET = utf8;

tblocacao:

CREATE TABLE IF NOT EXISTS `frota`.`locacao` (
idlocacao INT NOT NULL AUTO_INCREMENT,
fkcodcarro INT NOT NULL,
fkcodcliente INT NOT NULL,
fkcodfuncionario INT NOT NULL,
data_locacao DATE NULL DEFAULT NULL,
hora_locacao TIME NULL DEFAULT NULL,
data_devolucao DATE NULL DEFAULT NULL,
hora_devolucao TIME NULL DEFAULT NULL,
tempo VARCHAR(45) NULL DEFAULT NULL,
status VARCHAR(100) NOT NULL,
taxa DOUBLE NOT NULL,
PRIMARY KEY (idlocacao),
CONSTRAINT fk_locacao_carro1
FOREIGN KEY (fkcodcarro)
REFERENCES carro(idcarro)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT fk_locacao_cliente1
FOREIGN KEY (fkcodcliente)
REFERENCES cliente(idcliente)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT fk_locacao_funcionario1
FOREIGN KEY (fkcodfuncionario)
REFERENCES funcionario (idfuncionario)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
AUTO_INCREMENT = 15
DEFAULT CHARACTER SET = utf8;
Responder

02/02/2017

Bianca Reis

O meu sistema é bem parecido com o do Luciano. Também tenho essas três tabelas(tbMarca, tbModelo,tbCarro). As tbMarca e tbModelo tambem sao utilizadas numa combobox mas isso na interface de Cad de Veiculo. Agora estou nessa ULTIMA tela que é Locacao de Veiculos e que insiste em dar esse erro de Violação de chave estrangeira pq nao consigo capturar a chave estrangeira(fkcodcarro) pra salvar na minha tbLocacao. Por favor quem souber me ajuda só falta essa ultima tela pra eu acabar o sistema por completo.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar