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.