Inserir em 2 tabelas ao mesmo tempo

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?

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,

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();

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.

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.

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

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

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