Pessoal alguém pode me ajudar?

Meu código ta assim:

public class Clientes_DAO {
public void salvar_Clientes(Clientes clientes) throws SQLException{
Connection conexao_Banco_Dados = Conexao_Banco_Dados.getConexaoBD();
try{
PreparedStatement stmt = conexao_Banco_Dados.prepareStatement("insert into "
+ “cadastro_clientes (nome_cliente, cadastro_pessoa_fisica, telefone_cliente_id, \n”
+ “endereco_cliente_id, genero_cliente_id, status_cliente) \n”
+ “values (?, ?, ?, ?, ?, ?)”);
stmt.setString(1, clientes.getNome_Cliente());
stmt.setString(2, clientes.getCadastro_Pessoa_Fisica());
stmt.setInt(3, clientes.getTelefone_Cliente_ID().getId_Telefone());
stmt.setInt(4, clientes.getEndereco_Cliente_ID().getId_Endereco());
stmt.setInt(5, clientes.getGenero_Cliente_ID().getId_Genero());
stmt.setBoolean(6, clientes.isStatus_Cliente());
stmt.executeUpdate(); //executar e atualizar la dentro
}catch(SQLException error){
throw new SQLException("FALHA AO INSERIR CLIENTE "+error);
}
}
}

clientes.setNome_Cliente(txt_Nome_Cliente.getText());
clientes.setCadastro_Pessoa_Fisica(txt_CPF.getText());
clientes.setTelefone_Cliente_ID(telefone);
clientes.setEndereco_Cliente_ID(endereco);
clientes.setGenero_Cliente_ID(genero);
clientes.setStatus_Cliente(false);
try {
clientes_DAO.salvar_Clientes(clientes);
Alert a = new Alert(Alert.AlertType.CONFIRMATION);
a.setHeaderText(“CLIENTE SALVO NO BANCO DE DADOS!”);
a.show();
} catch (SQLException ex) {
Alert a = new Alert(Alert.AlertType.ERROR);
a.setHeaderText(“FALHA AO SALVAR CLIENTE NO BANCO DE DADOS!!”+ex);
a.show();
}
}

Agradeço a quem pode me ajudar

A mensagem de erro é explicita. Estás a introduzir um valor para uma Foreign Key que não existe. O valor que está a ser colocado na coluna telefone_cliente_id da tabela cadastro_clientes não existe na tabela telefone.

1 curtida

você quer dizer que eu tenho que fazer um select para dai sim inserir? pois ai eu vou ter o valor

Como estás agora a obter o valor para lá colocar?

1 curtida

Então estamos a trabalhar com varias tablas que tem ligação, como endereço, telefone e clientes, ai estou a fazer um insert, no caso eu devo inserir primeiro em endereço e depois em telefone e por último na de clientes. E é isso que eu fiz!
Mas quando eu vou fazer um insert em clientes eu vou setando:

Bloco de Citação
clientes.setNome_Cliente(txt_Nome_Cliente.getText());
clientes.setCadastro_Pessoa_Fisica(txt_CPF.getText());
clientes.setTelefone_Cliente_ID(telefone);
clientes.setEndereco_Cliente_ID(endereco);

Mas ai da aquele erro!
Antes de Inserir eu tenho que pegar o id de telefone e de endereço do Banco de Dados para ai sim inserir um cliente?
No caso o certo seria fazer um retorno de id para obter o numero que eu desejasse?
Um Select ?

Sim, se o que tens na tua tabela de clientes é uma referencia para a tabela de telefones, o que precisas settar aqui não é o telefone mas o id do telefone na tua tabela de telefones.

1 curtida

Mais como eu seto?
Pois como eu estou mexendo com JavaFx, estou me embaçando tudo, no meu caso pensei em assim que o usuário salvar o cliente, faz o insert no banco de telefones e depois faz um select e passando por parâmetros os números e retornando o id no arrayList, mas eu não estou conseguindo pegar o valor do arrayList e setar na chave FK de clientes.

Porque ArrayList?

1 curtida

Tem como fazer o Select sem que retorne uma lista?
Oque eu não entendo é como eu vou pegar esse id de telefone.

Aconselho aprender o básico daqui: https://docs.oracle.com/javase/tutorial/jdbc/basics/index.html