Insercao de tabelas

Boa tarde galera do GUJ… Primeiramente estou usando banco de dados oracle 10g Express…galera eu tenho uma tabela chamada pessoa com 3 campos: idPessoa(esse campo é auto increment), nome, cpf. E tenho outra tabela que se chama compromisso com 4 campos: idCompromisso, idPessoa(que é chave extrangeira de Pessoa),assunto, dataAssunto. A minha dúvida é. Como eu vou resgatar um dado do campo (idPessoa)da tabela pessoa e colocar na tabela compromisso?
Ex:

 PreparedStatement smtp = this.conexao.prepareStatement("insert into compromisso(idcompromisso,idPessoa," +
				"assunto,anotacao,datacompromisso) values(seq_compromisso.nextval,?,?,?,?)");
		//smtp.setInt(1, );//como eu insiro o campo idPessoa da tabela pessoa que é auto increment
		smtp.setString(2, compromisso.getAssunto());
		smtp.setString(3, compromisso.getAnotacao());
		smtp.setDate(4, compromisso.getDataCompromisso());
		smtp.execute();
		smtp.close();

Espero que vcs entendam… obrigado

Você pode fazer um Insert com Select

Ex:

INSERT INTO `respostas`  (IDENVIO, NOME, IDDESTINO)
  SELECT xoops_users.uid, xoops_users.uname,
         xoops_xoopscomments.com_id
         FROM xoops_users, xoops_xoopscomments
         WHERE xoops_users.uid = xoops_xoopscomments.com_uid

[quote=Pedrosa]Você pode fazer um Insert com Select

Ex:

INSERT INTO `respostas` (IDENVIO, NOME, IDDESTINO) SELECT xoops_users.uid, xoops_users.uname, xoops_xoopscomments.com_id FROM xoops_users, xoops_xoopscomments WHERE xoops_users.uid = xoops_xoopscomments.com_uid [/quote]

Boa tarde Pedrosa.

Deixa eu te perguntar uma coisa. Eu tenho uma tela de cadastro de Pessoa que tem os campos para serem armazenados:
Nome, CPF… o campo idPessoa é auto increment.

Dai eu tenho uma outra tela de cadastro de compromisso que tem os campos para serem armazenados:
assunto,anotacao, o campo idCompromisso é auto increment e o campo idPessoa é chave externa de Pessoa.
Para eu cadastrar um compromisso eu vou selecionar um nome de uma pessoa e preencher os campos citados acima. No meu metodo cadastraCompromisso, como eu vou saber o id do nome selecionado. Como eu vou amarrar os dados do compromisso com o campo nome da tabela pessoa? O nome eu seleciono de uma combo box … que tem o codigo

select * from pessoa...

e me retorna um:

rs.getString(pessoa.getNome());

Agradeco a sua colaboracao

Você tem uma primeira tela que cadastra a pessoa e uma segunda que cadastra o compromisso, o certo seria passar o código da pessoa para outra tabela, sua aplicação é web ou desktop?

É web… estou usando jsp… esse é o problema… Nesta combo eu tenho o id e o nome… dai eu tenho um metodo que envia esse parametro para o metodo Compromissos.setId();

Qual a dificuldade?, você utiliza o value do combo para o código e passa para um método que receba essa parametro, onde exatamente está seu problema?

Compromissos compromissos = new Compromissos();
compromissos.setId(Integer.parseInt(request.getParameter("nomeCampo")));
compromissos.setOutraCoisa(request.getParameter("nomeCampo2"))
CompromissosDAO comp = new CompromissosDAO();
comp.add(compromissos);

Aqui… ta dando erro…

Dao d = new Dao();
	   Compromissos compromisso = new Compromissos();
	   compromisso.setPessoa(request.getParameter("pessoa"));
	   d.adcionaCompromisso(compromisso);

O metodo setPessoa()… recebe como parametro um valor int… e o metodo request.getParameter(“pessoa”) retorna uma string… essa string tem o codigo e o nome da pessoa… por isso nao da pra fazer unbox…

olha o metodo setPessoa:

public void setPessoa(String pe) {
		String[] ar = pe.split("[\d]");
		for (String resp : ar){
			pessoa.setId(Integer.parseInt(resp));
		}
		
	}

ele agora ta dando erro:

java.lang.NumberFormatException: For input string: ""

Não faça nada no setPessoa ele deve apenas conter

public void setPessoa(int pessoa) {
	this.pessoa = pessoa;
}

E converta para int o seu request:

compromissos.setPessoa(Integer.parseInt(request.getParameter("nomeCampo")));

[quote=Pedrosa]Não faça nada no setPessoa ele deve apenas conter

public void setPessoa(int pessoa) {
	this.pessoa = pessoa;
}

E converta para int o seu request:

compromissos.setPessoa(Integer.parseInt(request.getParameter("nomeCampo")));

[/quote]

Desculpe - me Pedrosa…
Talvez eu nao estou sabendo te passar…
o campo que o request.getParameter(“pessoa”) esta pegando, contem int e String…por isso da o erro…

java.lang.NumberFormatException: For input string: "13 felipe"

Por isso que eu estou pegando com split()…

Você poderia fazer esse split antes de setar o objeto, por que está usando String e int no value do combo?

Pedrosa…
Eu consegui… olha oq eu usei…

public void setPessoa(String pessoa) { Pattern p = Pattern.compile("\d"); Matcher m = p.matcher(pessoa); boolean b = false; String resto = ""; while(b = m.find()){ resto += m.group(); } this.pessoa = new Pessoa(); this.pessoa.setId(Integer.parseInt(resto)); }

Mais uma pergunta… com esse metodo eu estou fazendo POG…(Programação Orientada a Gambiarra)?

Seria mais elegante esse trecho que contém o expressão regular fosse em um método separado, um bean não deve ter nenhum tipo de inteligencia.