Fazer insert no BD em 3 tabelas usando o mesmo Bean

5 respostas
I

Bom dia amigos,

Estou com uma dúvida. Tenho uma pagina jsp de cadastro onde possui 3 formulario separados por aba, tenho um bean que é populado e depois vai para a classe DAO que tem um metodo que faz o insert no BD. A dúvida é a seguinte, para um form ta funfando certinho, mas que implementar para mais dois forms que coloquei, qual é a melhor forma de fazer isto, popular somente 1 bean e depois separar em 3 partes quando for fazer o insert no metodo ou criar um bean para cada form, sabendo que os 3 forms sao relacionados (1 - Dados do fornecedor, 2 - endereco, 3 - contato)…

Estou pensando em fazer (popular) tudo no mesmo bean e depois separa-lo dentro do metodo e inserir cada parte em cada tabela, essa seria a melhor forma de fazer isto?

Como poderia separar esse bean dentro deste metodo?

Metodo que inseri o bean no BD:

public int incluirFornecedor(BeanFornecedor beanFornecedor) throws SQLException {
		
		int flag = 0;
		try {
			String queryDados = "INSERT INTO TBL_FORNECEDOR (" +
								" ID_FORNECEDOR, " +
								" NOME_FORNECEDOR, " +
								" RAZAO_SOCIAL_FORNECEDOR, " +
								" CNPJ_FORNECEDOR, " +
								" IE_FORNECEDOR) " +
								" VALUES(" +
								beanFornecedor.getIdFornecedor() 			+",'"+
								beanFornecedor.getNomeFornecedor() 			+"','"+
								beanFornecedor.getRazaoSocialFornecedor() 	+"','"+
								beanFornecedor.getCnpjFornecedor() 			+"','"+
								beanFornecedor.getIeFornecedor() 			+"')";
			
		
								xConn = new XConnection();
								flag = xConn.atualiza(queryDados);
						
		
			
			// flag = 1 (INSERT OK) 
			if(flag == 1) {
				// Obter ID_FORNECEDOR gerado automaticamente por AUTO_INCREMENT
				queryDados = "SELECT LAST_INSERT_ID()";
				xConn.rs = xConn.seleciona(queryDados);
				xConn.rs.first();
				flag = xConn.rs.getInt(1);
			}
			xConn.fechaConexao();
			return flag;

		} catch(SQLException e) {
			System.out.println("ERRO insertPaciente: "+e);
			xConn.fechaConexao();
			return flag;			
		} catch(Exception e) {
			System.out.println("ERRO insertPaciente: "+e);
			xConn.fechaConexao();
			return flag;
		}	
		
	}

5 Respostas

yoshikichi
IgorFranco:
Bom dia amigos,

Estou com uma dúvida. Tenho uma pagina jsp de cadastro onde possui 3 formulario separados por aba, tenho um bean que é populado e depois vai para a classe DAO que tem um metodo que faz o insert no BD. A dúvida é a seguinte, para um form ta funfando certinho, mas que implementar para mais dois forms que coloquei, qual é a melhor forma de fazer isto, popular somente 1 bean e depois separar em 3 partes quando for fazer o insert no metodo ou criar um bean para cada form, sabendo que os 3 forms sao relacionados (1 - Dados do fornecedor, 2 - endereco, 3 - contato)...

Estou pensando em fazer (popular) tudo no mesmo bean e depois separa-lo dentro do metodo e inserir cada parte em cada tabela, essa seria a melhor forma de fazer isto?

Como poderia separar esse bean dentro deste metodo?

Metodo que inseri o bean no BD:

public int incluirFornecedor(BeanFornecedor beanFornecedor) throws SQLException {
		
		int flag = 0;
		try {
			String queryDados = "INSERT INTO TBL_FORNECEDOR (" +
								" ID_FORNECEDOR, " +
								" NOME_FORNECEDOR, " +
								" RAZAO_SOCIAL_FORNECEDOR, " +
								" CNPJ_FORNECEDOR, " +
								" IE_FORNECEDOR) " +
								" VALUES(" +
								beanFornecedor.getIdFornecedor() 			+",'"+
								beanFornecedor.getNomeFornecedor() 			+"','"+
								beanFornecedor.getRazaoSocialFornecedor() 	+"','"+
								beanFornecedor.getCnpjFornecedor() 			+"','"+
								beanFornecedor.getIeFornecedor() 			+"')";
			
		
								xConn = new XConnection();
								flag = xConn.atualiza(queryDados);
						
		
			
			// flag = 1 (INSERT OK) 
			if(flag == 1) {
				// Obter ID_FORNECEDOR gerado automaticamente por AUTO_INCREMENT
				queryDados = "SELECT LAST_INSERT_ID()";
				xConn.rs = xConn.seleciona(queryDados);
				xConn.rs.first();
				flag = xConn.rs.getInt(1);
			}
			xConn.fechaConexao();
			return flag;

		} catch(SQLException e) {
			System.out.println("ERRO insertPaciente: "+e);
			xConn.fechaConexao();
			return flag;			
		} catch(Exception e) {
			System.out.println("ERRO insertPaciente: "+e);
			xConn.fechaConexao();
			return flag;
		}	
		
	}

usa o relacionamento:
class Fornecedor{

//outros atributos

private Contato contato;
private Endereco endereco;

}

falow

I

Saquei amigo,

Criei mais 2 beans, e seus construtores para dar o set dos atributos e depois no bean “principal” dei o new desses beans, ficou assim:

A dúvida está na hora de fazer os inserts nas tabelas no mesmo método, sei que tenho que usar o codigo abaixo para pegar os atributos dos beans, como fica o SQL deste metodo?

beanFornecedor.getBeanEndereco().getIdFornecedorEnd()

BeanFornecedor:

package br.com.sce.fornecedor;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

public class BeanFornecedor extends ActionForm {

	private static final long serialVersionUID = 1L;
	
	private String opcao;
	private String idFornecedor;
	private String nomeFornecedor;
	private String razaoSocialFornecedor;
	private String cnpjFornecedor;
	private String ieFornecedor;
	
	BeanEndereco beanEndereco;
	BeanContato beanContato;
		
	
	public String getOpcao() {
		return opcao;
	}

	public void setOpcao(String opcao) {
		this.opcao = opcao;
	}

	public String getIdFornecedor() {
		return idFornecedor;
	}

	public void setIdFornecedor(String idFornecedor) {
		this.idFornecedor = idFornecedor;
	}

	public String getNomeFornecedor() {
		return nomeFornecedor;
	}
	public void setNomeFornecedor(String nomeFornecedor) {
		this.nomeFornecedor = nomeFornecedor;
	}
	public String getRazaoSocialFornecedor() {
		return razaoSocialFornecedor;
	}
	public void setRazaoSocialFornecedor(String razaoSocialFornecedor) {
		this.razaoSocialFornecedor = razaoSocialFornecedor;
	}
	public String getCnpjFornecedor() {
		return cnpjFornecedor;
	}
	public void setCnpjFornecedor(String cnpjFornecedor) {
		this.cnpjFornecedor = cnpjFornecedor;
	}
	public String getIeFornecedor() {
		return ieFornecedor;
	}
	public void setIeFornecedor(String ieFornecedor) {
		this.ieFornecedor = ieFornecedor;
	}
	public static long getSerialVersionUID() {
		return serialVersionUID;
	}

	public BeanEndereco getBeanEndereco() {
		return beanEndereco;
	}
	
	// Setando o construtor da classe BeanEndereco
	public void setBeanEndereco (String idFornecedorEnd, String enderecoFornecedorEnd, String bairroFornecedorEnd, String CidadeFornecedorEnd, String ufFornecedorEnd, String referenciaFornecedorEnd, String obsFornecedorEnd) {
		this.beanEndereco = beanEndereco;
		beanEndereco = new BeanEndereco (idFornecedorEnd, enderecoFornecedorEnd, bairroFornecedorEnd, CidadeFornecedorEnd, ufFornecedorEnd, referenciaFornecedorEnd, obsFornecedorEnd);
	}

	public BeanContato getBeanContato() {
		return beanContato;
	}

	// Setando o construtor da classe BeanContato
	public void setBeanContato (String idFornecedorCont, String nomeContatoFornecedorCont, String nuTelFornecedorCont, String nuFaxFornecedorCont, String siteFornecedorCont, String emailFornecedorCont ) {
		this.beanContato = beanContato;
		beanContato = new BeanContato (idFornecedorCont, nomeContatoFornecedorCont, nuTelFornecedorCont, nuFaxFornecedorCont, siteFornecedorCont, emailFornecedorCont);
		
	}

	public void reset (ActionMapping mapping, HttpServletRequest request) {
		
		this.opcao = null;
		this.idFornecedor = null;
		this.nomeFornecedor = null;
		this.razaoSocialFornecedor = null;
		this.cnpjFornecedor = null;
		this.ieFornecedor = null;
		
		this.beanEndereco = null;
		this.beanContato = null;
	}
		
}

BeanEndereco:

package br.com.sce.fornecedor;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

public class BeanEndereco extends ActionForm {

	private static final long serialVersionUID = 1L;
	
	private String idFornecedorEnd;
	private String enderecoFornecedorEnd;
	private String bairroFornecedorEnd;
	private String CidadeFornecedorEnd;
	private String ufFornecedorEnd;
	private String referenciaFornecedorEnd;
	private String obsFornecedorEnd;
	
	//Classe construtora, inicia a classe passando os parametros.
	public BeanEndereco (String idFornecedorEnd, String enderecoFornecedorEnd, String bairroFornecedorEnd, String CidadeFornecedorEnd, String ufFornecedorEnd, String referenciaFornecedorEnd, String obsFornecedorEnd){
		
		this.idFornecedorEnd = idFornecedorEnd;
		this.enderecoFornecedorEnd = enderecoFornecedorEnd;
		this.bairroFornecedorEnd = bairroFornecedorEnd;
		this.CidadeFornecedorEnd = CidadeFornecedorEnd;
		this.ufFornecedorEnd = ufFornecedorEnd;
		this.referenciaFornecedorEnd = referenciaFornecedorEnd;
		this.obsFornecedorEnd = obsFornecedorEnd;
	}
	
	public String getIdFornecedorEnd() {
		return idFornecedorEnd;
	}
	public void setIdFornecedorEnd(String idFornecedorEnd) {
		this.idFornecedorEnd = idFornecedorEnd;
	}
	public String getEnderecoFornecedorEnd() {
		return enderecoFornecedorEnd;
	}
	public void setEnderecoFornecedorEnd(String enderecoFornecedorEnd) {
		this.enderecoFornecedorEnd = enderecoFornecedorEnd;
	}
	public String getBairroFornecedorEnd() {
		return bairroFornecedorEnd;
	}
	public void setBairroFornecedorEnd(String bairroFornecedorEnd) {
		this.bairroFornecedorEnd = bairroFornecedorEnd;
	}
	public String getCidadeFornecedorEnd() {
		return CidadeFornecedorEnd;
	}
	public void setCidadeFornecedorEnd(String cidadeFornecedorEnd) {
		CidadeFornecedorEnd = cidadeFornecedorEnd;
	}
	public String getUfFornecedorEnd() {
		return ufFornecedorEnd;
	}
	public void setUfFornecedorEnd(String ufFornecedorEnd) {
		this.ufFornecedorEnd = ufFornecedorEnd;
	}
	public String getReferenciaFornecedorEnd() {
		return referenciaFornecedorEnd;
	}
	public void setReferenciaFornecedorEnd(String referenciaFornecedorEnd) {
		this.referenciaFornecedorEnd = referenciaFornecedorEnd;
	}
	public String getObsFornecedorEnd() {
		return obsFornecedorEnd;
	}
	public void setObsFornecedorEnd(String obsFornecedorEnd) {
		this.obsFornecedorEnd = obsFornecedorEnd;
	}
	
	
}

BeanContato:

package br.com.sce.fornecedor;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

public class BeanContato extends ActionForm {

	private static final long serialVersionUID = 1L;
	
	private String idFornecedorCont;
	private String nomeContatoFornecedorCont;
	private String nuTelFornecedorCont;
	private String nuFaxFornecedorCont;
	private String siteFornecedorCont;
	private String emailFornecedorCont;
	
	public BeanContato (String idFornecedorCont, String nomeContatoFornecedorCont, String nuTelFornecedorCont, String nuFaxFornecedorCont, String siteFornecedorCont, String emailFornecedorCont ){
		
		this.idFornecedorCont = idFornecedorCont;
		this.nomeContatoFornecedorCont = nomeContatoFornecedorCont;
		this.nuTelFornecedorCont = nuTelFornecedorCont;
		this.siteFornecedorCont = siteFornecedorCont;
		this.emailFornecedorCont = emailFornecedorCont;
	}
	
	
	public String getIdFornecedorCont() {
		return idFornecedorCont;
	}
	public void setIdFornecedorCont(String idFornecedorCont) {
		this.idFornecedorCont = idFornecedorCont;
	}
	public String getNomeContatoFornecedorCont() {
		return nomeContatoFornecedorCont;
	}
	public void setNomeContatoFornecedorCont(String nomeContatoFornecedorCont) {
		this.nomeContatoFornecedorCont = nomeContatoFornecedorCont;
	}
	public String getNuTelFornecedorCont() {
		return nuTelFornecedorCont;
	}
	public void setNuTelFornecedorCont(String nuTelFornecedorCont) {
		this.nuTelFornecedorCont = nuTelFornecedorCont;
	}
	public String getNuFaxFornecedorCont() {
		return nuFaxFornecedorCont;
	}
	public void setNuFaxFornecedorCont(String nuFaxFornecedorCont) {
		this.nuFaxFornecedorCont = nuFaxFornecedorCont;
	}
	public String getSiteFornecedorCont() {
		return siteFornecedorCont;
	}
	public void setSiteFornecedorCont(String siteFornecedorCont) {
		this.siteFornecedorCont = siteFornecedorCont;
	}
	public String getEmailFornecedorCont() {
		return emailFornecedorCont;
	}
	public void setEmailFornecedorCont(String emailFornecedorCont) {
		this.emailFornecedorCont = emailFornecedorCont;
	}
			
}
yoshikichi

veiw não precisa criar um bean ActionForm para os atributos, cria para os Pojo saca? q vc vai utilizar, por exemplo:
Suponha q eu tenho aluno e telefone, e q aluno só tem um telefone para ficar mais simples.
Eu crio duas classes ou seja dois pojo seguindo o esquema de Javabeans get e set. entao vamos lá.

class Aluno{
 private String nome, outroartibuto;
 private Telefone telefone;
 
 //get e set...

}

//-----

class Telefone{

  private String telefone;
  //get e set
}

//----ActionForm------

public class BeanAluno extends ActionForm{

  private Alunoo aluno=new Aluno();

public Aluno getAluno(){return aluno;}
}

com isso, no seu form da view (jsp), vc usa as tag do Struts, como nesse exemplo q eu dei,
vc colocaria, aluno.nome no campo desejado, sacou?
Ja q vc qr preencher os dois POJO, ou tres de uma vez vc coloca,

public class Beanparatodos extends ActionForm{

  private Aluno aluno=new Aluno();
  private Telefone telefone = new Telefone();
public Aluno getAluno(){return aluno;}
public Telefone getTelefone(){return telefone;}

}

ai vc só referencia no form da mesma forma q vc referencia os seus antigos atributos, mas nao se esquece de
colocar no seu caso fornecedor.propriedade…
qlq coisa posta ai, q se vc nao entender, eu coloco um exemplo meio completo desse ai q eu falei.

Agora o insert vc recupera o seu FormAction e seus objetos fornecedor, endereco etc…
E ai vc da um insert seguindo a ordem, por exemplo se endereco puxar a chave do fornecedor, vc tem q fazer o insert primeiro no endereco, depois no fornecedor.

falow

I

Amigo yoshikichi entendi mais ou menos… teria como vc postar um exemplo mais completo que vc falou…

Enquanto isso vou tentando fazer aqui… mas se puder postar o exemplo completo, agradeceria muito…

Vlw…

Abraços…

Ate +…

I

Depois de algum tempo, resolvi voltar a este post para tirar uma dúvida. Tinha feito somente 1 bean (Fornecedor, Endereco e Contato) para as 3 tabelas, funfou certinho, mas agora resolvi tentar novamente fazer pela forma que o amigo yoshikichi postou. Estou enfrentando um problema, na pagina jsp tenho os campos do formulário da seguinte forma:

Para Fornecedor (1º Aba):

<input name="nome" type="text" value="${beanFornecedor.nome}" size="50">

Para Endereço (2º Aba):

<input name="endereco" type="text" value="${beanFornecedor.endereco.cidade}" size="50">

Para Contato (3º Aba):

<input name="email" type="text" value="${beanFornecedor.contato.email}" size="50">

Não apresenta nenhum erro, mas os valores dos texts dos campos referentes a endereco e contato não chegam até a classe Action e DAO onde pego os atributos do BeanFornecedor desta forma:

beanFornecedor.getNome(); --> Funciona

beanFornecedor.getEndereco().getCidade(); --> Null (Não funciona)

beanFornecedor.getContato().getEmail(); --> Null (Não funciona)

Meu BeanFornecedor está assim:

package br.com.sce.business.bean.fornecedor;

import org.apache.struts.action.ActionForm;

public class BeanFornecedor extends ActionForm {

	private static final long serialVersionUID = 1L;
	
	private String opcao;
	private String id;
	private String nomeFantasia;
	private String razaoSocial;
	private String cnpj;
	private String ie;
	
	BeanEndereco endereco = new BeanEndereco();
	BeanContato contato = new BeanContato() ;
	
	
	// Gets and Sets dos atributos "opcao" até "ie" 

	
	public BeanEndereco getEndereco() {
		return endereco;
	}

	public void setEndereco(BeanEndereco endereco) {
		this.endereco = endereco;
	}

	public BeanContato getContato() {
		return contato;
	}

	public void setContato(BeanContato contato) {
		this.contato = contato;
	}
		
}

Como deve ficar o nome do campo e o value para os casos endereco e contato amigos?

Vlw…

Muito obrigado.

Criado 20 de setembro de 2008
Ultima resposta 10 de out. de 2008
Respostas 5
Participantes 2