Insercao de tabelas

11 respostas
O

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

11 Respostas

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
O

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

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

Pedrosa

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?

O

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

Pedrosa

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

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: ""
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")));
O

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

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

Pedrosa

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

O

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)?

Pedrosa

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.

Criado 19 de março de 2007
Ultima resposta 19 de mar. de 2007
Respostas 11
Participantes 2