Inserir em 2 tabelas ao mesmo tempo

6 respostas
N

Bom dia, estou com uma dúvida, estou desenvolvendo um projeto de escola em JSP, tomamos como exemplo que possuo 2 tabelas: Cliente e Endereço

Um cliente pode ter apenas um endereço e vice-versa, digamos que o Cliente tenha a chave estrangeira de Endereço, no meu formulário serão enviados tantos os dados de cliente, quanto os dados de endereço, então pela lógica devo salvar primeiro o endereço na base de dados dai preciso saber o número do registro para fazer o relacionamento ao salvar o cliente, gostaria de saber como posso fazer para obter este número, poderia usar “select last(*) from endereco” mas como é um acesso pela web não creio que isto seja correto, será que alguém pode me ajudar?

6 Respostas

leorbarbosa

Colega,

  1. Sua normalização de banco não está muito legal. Um cliente pode ter um endereço comercial ou de residência,…etc
  2. A sintaxe de SELECTs pode variar de banco para banco; (você não disse qual está usando)

Estes detalhes pode faciltar no momento da codificação.

At,

viniciusfaleiro

Também concordo com nosso amigo… Como o cara vai ter 3…4…5…n endereços residenciais… 3.4.5…n… endereços comerciais ou enfim…

Crie uma coluna para cada tipo de endereço que precisar… pra pegar o last ID inserido… NO mYsql SELECT LAST_INSERT_ID();

N

Bem, vlw pelas respostas, mas o relacionamento creio que não venha ao caso, talvez não tenha ficado muito claro minha dúvida, a questão é que preciso garantir que a fk que eu vou passar ao cliente seja a mesma do endereço salvo, porém como é um processo web creio que durante a obtenção da última id de endereço cadastrado possa haver um cliente cadastrando então os endereços estariam errados, deixe eu ilustrar de forma simplificada, usando um fluxograma:

1- RECEBER DADOS DO FORMULÁRIO HTML
2- GRAVAR DADOS NA TABELA ENDEREÇO
3- RECUPERAR O ID DO ENDEREÇO QUE ACABOU DE SER REGISTRADO
4- GRAVAR DADOS NA TABELA CLIENTE

Porém entre as etapas 2 e 3 pode ocorrer de um outro cliente que esteja se cadastrando em paralelo, e ao invés de recuperar o id relacionado ao cliente A, recupera o id do cliente B, espero solução. A propósito estou utilizando Access.

ctdaa

Você deve estar usando a classe Statement para preparar o comando sql.
Pesquise sobre o atributo:

A chave gerada irá retornar junto com os valores do ResultSet.

Metaleiro

[color=darkblue]Seria isso aqui: [/color]

ResultSet rsGenerated = pstmt.getGeneratedKeys();
            rsGenerated.first();
            if ( rsGenerated.isFirst() ) {
            	resultReturn = rsGenerated.getInt(1);
            } else {
                resultReturn = -1;
            }
N

Valeu mesmo, ainda não testei, mas creio que seja exatamente isto, obrigado!

Criado 19 de novembro de 2009
Ultima resposta 19 de nov. de 2009
Respostas 6
Participantes 5