Como capturar mais de um atributo a partir de uma chave estrangeira?
01/02/2017
0
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
Posts
01/02/2017
Bianca Reis
01/02/2017
Fernando C
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)
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
01/02/2017
Luciano Silva
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
01/02/2017
Bianca Reis
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;
02/02/2017
Bianca Reis
Clique aqui para fazer login e interagir na Comunidade :)