´plComo faço para fazer um insert com um select?
tenho duas tabelas
Cliente
id_cliente PK
nome
cpf
Endereco
id_cliente FK
endereco
numero
mas queria inserir um cliente novo e seus endereços, mas como faço isso pois se ele é um cliente novo eu nao tenho o id_cliente dele.
pensei em pegar pelo cpf mas estou tendo problemas em fazer a query, alguem poderia me ajudar?
era algo algo assim q (isso está redondamente errado)
“insert into Cliente (id_cliente,nome,cpf) values ((select id_cliente from cliente where cpf = ‘123.123.123-2’),nome,cpf)”
se alguem puder me ajudar agradeço muito!!!
Eu não entendi qual é a sua dúvida exatamente , mas vou responde de um jeito mais completo.
Antes de mais nada, você deve configurar seu banco para gerar as PK’s automaticamente. Isso varia de banco para banco, por exemplo, no Derby você tem que declarar a PK como GENERATED AS IDENTITY. Assim, ao fazer o INSERT basta omitir o campo da PK que o banco gera a sequencia automaticamente.
Para obter a ultima sequencia gerada, mais uma vez, isso depende do banco de dados, geralmente existe uma pseudo-tabela da qual você pode fazer um SELECT e obter esse resultado. Do lado Java, você pode fazer isso de maneira transparente com JDBC. Após fazer o insert do Cliente é só você chamar no seu PreparedStatemente o método getGeneratedKeys() que ele te devolve um ResultSet com as chaves geradas.
Vou tentar se mais claro
Queria fazer uma query para cadastrar um cliente e N endereços pois o cliente pode ter N endereços.
O problema:
quando eu vou cadastrar um cliente só tenho no objeto o nome e cpf e uma lista de endereços, sendo q o id_cliente no banco é serial dessa maneira eu nao passo o id_cliente no objeto pois vai ser gerado pelo banco.
O problema vem agora, como eu tenho uma tabela só para endereço eu preciso do id_cliente para relacionar o endereço para o cliente certo, COMO EU FAÇO ISSO?
Sei q em uma query da pra resolver isso mas nao sei como…
Se alguem tiver alguma sugestão agradeço!!
[quote=williamnwz]Vou tentar se mais claro
Queria fazer uma query para cadastrar um cliente e N endereços pois o cliente pode ter N endereços.
O problema:
quando eu vou cadastrar um cliente só tenho no objeto o nome e cpf e uma lista de endereços, sendo q o id_cliente no banco é serial dessa maneira eu nao passo o id_cliente no objeto pois vai ser gerado pelo banco.
O problema vem agora, como eu tenho uma tabela só para endereço eu preciso do id_cliente para relacionar o endereço para o cliente certo, COMO EU FAÇO ISSO?
Sei q em uma query da pra resolver isso mas nao sei como…
Se alguem tiver alguma sugestão agradeço!!
[/quote]
Pois é como eu te expliquei … No seu DAO você tem que alterar a inclusão do objeto Cliente. Basta você configurar o seu PreparedStatement que faz o insert na tabela de Clientes para retornar as chaves geradas. Daí é só usar o método getGeneratedKeys() que ele te retorna um ResultSet com as chaves geradas. Agora, se você quer fazer a recuperação das chaves na mão é preciso saber qual o SGBD que você está usando, se é o MySQL, Oracle, SQL Server, Derby, etc.
Abrigado rmendes08!
Vou tentar aqui!!