Dúvida para enviar ao SQL

18 respostas
D

Bom Dia amigos :smiley:

Se estiver postando na área errada, desculpe. Mas aí vai minha dúvida:

Tenho um projeto web e na página do JSP tem um botão com o nome de “adicionar”. Cada vez que este botão é clicado, ele abrte uma nova caixa de texto para o usuário digitar algum dado e as caixas de texto vão aparecendo e nenhuma some e todas elas possuem o mesmo valor no property, que seria “fornecedores”.

Fiquei pensando em como enviar ao banco já que todos os properties são iguais e pensei em fazer um array ( mesmo não sabendo como fazer ). O SQL aceita receber array?

E outra, quando eu for montar no projeto o array, onde que eu coloco? Coloco ele no ValueObject ou no Action ou no Form?

Eu uso beans para as outras variáveis do projeto então criei um bean exemplo apenas para que os amigos do fórum possam me dizer se isso está correto, aqui vai ele:

public class FornecedoresVO extends ValueObject { 

public String[] fornecedores = ""; 

public String getFornecedores() { 
      return fornecedores; 
} 

public void setFornecedores(String fornecedores) { 
      this.fornecedores = fornecedores; 
} 

public String[] getRelationshipAttributes (){ 
      return null; 
} 
}

Esse meu bean, seria um array correto ou nada a ver? rs Já dei uma procurada no google, mas não achei nada que pudesse me ajudar nisso!

Valew

[]'s

18 Respostas

M

Se cada caixa de texto for um registro vc pode fazer um for para ir gravando na tabela, eu faço assim:

for (int i=0;i<fornecedores.length;i++){			
      sql = conn.prepareStatement("INSERT INTO fornecedor (texto)VALUES (?)");				
      sql.setString(1, fornecedores[i]);		
      sql.executeUpdate();			
      sql.close();
}
D

É um registro sim.

Para entender melhor, olha estas 2 imagens. Uma delas está assim que entra na página e a outra é após clicar no botão. Note que aquele botão não incluir nada no banco, ele apenas abre outro campo de texto. No final do resto da página tem um ‘incluir’ que manda tudo para o SQL.

Essa é a imagem sem clicar no botão para abrir um novo campo:

E aqui é a imagem após clicar no botão que abre um novo campo:

Entendi seu código, mas eu posso botar ele no mesmo VO que estou usando com as outras variáveis? E uma outra dúvida…na página .jsp, quando eu jogar o campo, como que eu coloco a property dele? “fornecedores[]”??

E meu bean que mostrei acima, está correto? Coloco meu bean no VO?

Valew
[]'s

D

Desculpem se estão confusas minhas dúvidas, mas é que to super perdido nisso, entendi o conceito de array, mas não to sabendo aplicar ele!

Valew

[]'s

M

O código que te mandei vc tem que colocar na sua ActionInsert, pois lá vc faz o Insert dos campos únicos do formulário e abaixo vc coloca este código.

Na sua página jsp, no name do campo vc coloca apenas “fornecedores”, pois ao submeter o formulário ele reconhece que existe mais que um campo com o mesmo nome e joga da String array.

Eu aconselho vc a não misturar lógica e regras de negócios com seu VO.

D

Entendi!!

Aquele bean, eu coloco ele onde? Pq no projeto, estou declarando variáveis no VO e no Form! :?

O seu código já entendi e entendi como funciona também :D…valeu Marcelo

M

Vc declara variaveis no Form quando for uma variável que vc usará apenas ali, agora se for do fornecedor vc só chama ela:

Abaixo um código de exemplo de chamada de atributos de um VO:

import java.sql.*;
import vo.VOFornecedor;
import java.util.*;

public class DAOFornecedor{
   public VOFornecedor inserirCurso (VOFornecedor fornecedor){
            Statement  sta = null;
            Connection con = null;
            String     sql = "INSERT INTO fornecedor (nome) VALUES ('"+fornecedor.getNome()+"')";
             try{
      	     con = DAOConexao.getConnection();
      	     sta = con.createStatement();
      	     sta.execute(sql);        			
             }
            catch(SQLException sqle){sqle.getMessage();}
            finally{
      	       DAOConexao.desalocarRecursos();
            }
            return fornecedor;
      }
}
D

Entendi…eu fiz diferente com a ajuda de um colega. Vou lhe mostrar o que fizemos:

Action

public ActionForward insert(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws WebActionException {
        BusinessDelegate delegate = getBusinessDelegate();
        Serializable serializable = null;
        SoftwareVO softwareVO = (SoftwareVO) ((FormBean) form).getPersistentObj();
        String[] fornecs = request.getParameterValues("fornec");
        List listSoftwareFornecedor = new ArrayList();
        for(int i = 0; i < fornecs.length; i++) {
        	String codFornecedor = fornecs[i];
        	SoftwareFornecedor sof = new Sof;
        	sof.setCodFornecedor;
        	listSoftwareFornecedor.add(sof);
        }
        softwareVO.setSoftwareFornecedor(listSoftwareFornecedor);
        try {
            serializable = delegate.insert(softwareVO);
        } catch (GpbrPersistException e) {
            throw new WebActionException("Erro ao inserir registro", e);
        }
        cleanSession(mapping, form, request);
        request.setAttribute(BasicAction.MESSAGE_ATTRIBUTE, "Inclusão realizada com sucesso!");
        return dispatch(mapping, form, request, response, CommandTypeConstants.INSERIR);
    }

Criamos um outro VO ( SoftwareFornecedorVO ) para poder deixar ‘preso’ o código de fornecedor com o software:

SoftwareFornecedorVO

package br.teste.integration.vo;


public class SoftwareFornecedorVO extends SoftwareVO {
	public Integer id;
	public Integer codFornecedor;
	
	public Integer getId(){
		return id;
	}
	
	public void setId(Integer id){
		this.id = id;
	}
	
	public Integer getCodFornecedor() {
		return codFornecedor;
	}
	
	public void setCodFornecedor(Integer codFornecedor){
		this.codFornecedor = codFornecedor;
	}
}

e o SoftwareVO, fcou da seguinte maneira:

public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
    	if(softwareFornecedor != null) {
    		Iterator i = softwareFornecedor.iterator();
    		while(i.hasNext()) {
    			SoftwareFornecedor softwareFornecedor = i.next();
    			softwareFornecedor.set
    		}
    	}
        this.id = id;
    }

    public String[] getRelationshipAttributes() {
        return new String[] {"softwareFornecedor"};
    }

Estou com o problema na linha

SoftwareFornecedor softwareFornecedor = i.next();
    			softwareFornecedor.set

ela está quebrando, passar o parâmetro, pode me ajudar?

E nessa outra linha

SoftwareFornecedor sof = new Sof;
        	sof.setCodFornecedor;

Está quebrada também, mas eu passei certo =/

Valew

[]'s

M

davidhc:

Estou com o problema na linha

SoftwareFornecedor softwareFornecedor = i.next();
   softwareFornecedor.set

ela está quebrando, passar o parâmetro, pode me ajudar?
E nessa outra linha

SoftwareFornecedor sof = new Sof;
    sof.setCodFornecedor;

Está quebrada também, mas eu passei certo =/
[]'s

vc está setando errado, qdo vc for setar algum atributo faz assim:

Objeto.setAtributo(VALOR);

vc não está informando o valor a setar.

D

Certo

Acho que me perdi no código…não to sabendo o que passar!

Nesta parte do Action:

for(int i = 0; i < fornecs.length; i++) {
        	String codFornecedor = fornecs[i];
        	SoftwareFornecedor sof = new Sof;
        	sof.setCodFornecedor
        	listSoftwareFornecedor.add(sof);
        }

Eu fiz o ‘for’ para que fosse incrementado Array, mas nao to sabendo o que passar em “sof.setCodFornecedor”

E na parte do SoftwareVO:

if(softwareFornecedor != null) {
    		Iterator i = softwareFornecedor.iterator();
    		while(i.hasNext()) {
    			SoftwareFornecedore softwareFornecedor = i.next();
    			softwareFornecedor.set
    		}
    	}

Seria o list do Array, mas me perdi e não sei o que passar tb :oops:

Será que alguém do Fórum pode dar uma mãozinha??

[]'s

M

é só ver o seguinte, que valor vc quer mandar ??

no 1º código seu não p codFornecedor ?? então fica assim:

for(int i = 0; i < fornecs.length; i++) {
     String codFornecedor = fornecs[i];
     SoftwareFornecedor sof = new Sof;

     sof.setCodFornecedor(codFornecedor);

     listSoftwareFornecedor.add(sof);
}

Agora, o seu 2º código não entendi o que vc quer fazer e nem pra que serve!!!

E na parte do SoftwareVO: 
if(softwareFornecedor != null) {
    Iterator i = softwareFornecedor.iterator();
    while(i.hasNext()) {
     	SoftwareFornecedore softwareFornecedor = i.next();
     	softwareFornecedor.set
     }
}
D

Fala marceloplis!!

Valew pela força que vc esta dando cara, desculpa se as perguntas são estúpidas, é pq to começando a mexer com isso, eu meio que cai de paraquedas aqui e por isso que me perco no que to fazendo :slight_smile:

Na 2ª parte do código(vou por ele inteiro pra q seja mais fácil de entender )

public class SoftwareVO extends ValueObject {
    public Integer id;
    private List softwareFornecedor;

    public List getSoftwareFornecedor() {
		return softwareFornecedor;
	}

	public void setSoftwareFornecedor(List softwareFornecedor) {
		this.softwareFornecedor = softwareFornecedor;
	}

	public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
    	if(softwareFornecedor != null) {
    		Iterator i = softwareFornecedor.iterator();
    		while(i.hasNext()) {
    			SoftwareFornecedor softwareFornecedor = i.next();
    			softwareFornecedor.set
    		}
    	}
        this.id = id;
    }
    public String[] getRelationshipAttributes() {
        return new String[] {"softwareFornecedor"};
    }

}

Usei o iterator e o hasNext pra q ele percorra até a lista acabar, só que não to sabendo o q setar ali =/

M

Cara, continuo não entendendo, qual é o conteúdo desta lista ?? como e onde vc popula ela ??

D

O conteúdo dela são os valores do fornecs[]

Estou populando ela aqui:

public ActionForward insert(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws WebActionException {
        BusinessDelegate delegate = getBusinessDelegate();
        Serializable serializable = null;
        SoftwareVO softwareVO = (SoftwareVO) ((FormBean) form).getPersistentObj();
        String[] fornecs = request.getParameterValues("fornec");
        List listSoftwareFornecedor = new ArrayList();
        for(int i = 0; i < fornecs.length; i++) {
        	String codFornecedor = fornecs[i];
        	SoftwareFornecedor sof = new sof;
        	sof.setCodFornecedor(fornecs[i]);
        	listSoftwareFornecedor.add(sof);
        }
}

E populo ela através do insert…aquela parte que não sei o que colocar, é para listar os valores que foram preenchidos!

D

Após muita briga, consegui fazer aquela parte. Eu estava indicando tudo errado.

O certo ficou:

public void setId(Integer id) {
    	if(softwareFornecedor != null) {
    		Iterator i = softwareFornecedor.iterator();
    		while(i.hasNext()) {
    			SoftwareFornecedorVO softwareFornecedor = (SoftwareFornecedorVO) i.next();
    			softwareFornecedor.setCodSoftware(id);
    		}
    	}
        this.id = id;
    }

O problema está no primeiro caso que eu mostrei acima, agora ele indica que está faltando um ‘.’ antes do ‘;’

public ActionForward insert(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws WebActionException {
        BusinessDelegate delegate = getBusinessDelegate();
        Serializable serializable = null;
        SoftwareVO softwareVO = (SoftwareVO) ((FormBean) form).getPersistentObj();
        String[] fornecs = request.getParameterValues("fornec");
        List listSoftwareFornecedor = new ArrayList();
        for(int i = 0; i < fornecs.length; i++) {
        	String codFornecedor = fornecs[i];
        	SoftwareFornecedor sof = new Sof;*************
        	sof.setCodFornecedor(codFornecedor);
        	listSoftwareFornecedor.add(sof);
        }
}

Os ****** indicam a ‘;’ que fala q falta o ponto antes.

M

tenta:

SoftwareFornecedor sof = new SoftwareFornecedor();*************
D
String[] fornecs = request.getParameterValues("fornec");
        List listSoftwareFornecedor = new ArrayList();
        for(int i = 0; i < fornecs.length; i++) {
        	String codFornecedor = fornecs[i];
        	SoftwareFornecedorVO softwareFornecedor = new SoftwareFornecedorVO;*****
        	softwareFornecedor.setCodFornecedor(codFornecedor);
        	listSoftwareFornecedor.add(softwareFornecedor);
        }
        softwareVO.setSoftwareFornecedor(listSoftwareFornecedor);

Tentei o que vc falou, mas não consegui…mudei o sof para softwareFornecedor e não resolveu…em ambos os casos, fala q falta o ‘.’ antes dos ****

M

Cara, faltou vc chamar o construtor na hora de criar um novo objeto:

está assim:

SoftwareFornecedorVO softwareFornecedor = new SoftwareFornecedorVO;*****

Deixe assim:

SoftwareFornecedorVO softwareFornecedor = new SoftwareFornecedorVO();
D

consegui :smiley:

Valew mesmo marceloplis

o código já está sem erros, mas o programinha ainda não funciona iauhseiuae

a parte com erro ficou da seguinte maneira:

String[] fornecs = request.getParameterValues("fornec");
        List listSoftwareFornecedor = new ArrayList();
        for(int i = 0; i < fornecs.length; i++) {
        	String codFornecedor = fornecs[i];
        	SoftwareFornecedorVO sof = new SoftwareFornecedorVO();
        	sof.setCodFornecedor(Integer.valueOf(codFornecedor));
        	listSoftwareFornecedor.add(codFornecedor);
        }

Valew pela atenção cara

Criado 26 de julho de 2006
Ultima resposta 27 de jul. de 2006
Respostas 18
Participantes 2