Problemas com select. O problema continua

12 respostas
V

Bom dia a todos,

A minha animação durou pouco. rs
O problema ainda continua, acho q minha query não esta retornando nada.
Vou mandar os códigos para melhorar a visibilidade de vcs.

Agradeço desde já,

Vitor Bonfim

public class CadGCDAO extends ConnectionDAO {
	
	public List listaGC(String strGC){
	  	List listarGC = new ArrayList();	  	
			try{
				System.out.println("Entrou ListaGC");
				Connection con = getConnection();
				
				pstm = con.prepareStatement("SELECT cod_gc, cod_gr, descr_gc FROM tblgerenteconta WHERE cod_gc = " + strGC + "");
											
				System.out.println("Antes da query GC");
				//System.out.println("SELECT cod_gc, cod_gr, descr_gc FROM tblgerenteconta WHERE cod_gc ='" + strGC + "'");
				rs = pstm.executeQuery();				
				System.out.println("Antes da query GC08j8j");
				while(rs.next()){
					
					CadGCVO cadGC = new CadGCVO();
					cadGC.setCodGC(rs.getInt("cod_gc"));
					System.out.println("Codigo GC: " + rs.getInt("cod_gc"));
					cadGC.setCodGR(rs.getInt("cod_gr"));
					cadGC.setDescrGC(rs.getString("descr_gc"));
					System.out.println("Resultado do select de GC: " + (rs.getInt("cod_gc")));
										
					listarGC.add(cadGC);					
				};				
			
			System.out.println("Depois do While GC");	
				}      
			catch(java.sql.SQLException sqlException){
					System.out.println("sqlException: "+ sqlException);
				}
			catch(Exception e){
					System.out.println("Exception: "+ e);
			}
		//System.out.println("Listar GC");	
		return listarGC;
	}
}

Segue a minha action:

Segue minha Action:

public ActionForward executaListaGC( ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		CadGCDAO GCDAO = new CadGCDAO();		
		CadRedeForm redeForm = (CadRedeForm) form;
		System.out.println("executaListaGC: " + redeForm.getCodGC());
		List listarGC = GCDAO.listaGC(redeForm.getCodGC());		
		//System.out.println("executaListaGC: " + listarGC);

		HttpSession session = request.getSession(); 
		
		/*if (redeForm.equals("")){
			session.removeAttribute("lstGC");
			
		}else{
			session.setAttribute("lstGC", listarGC);
		}*/
		
		request.setAttribute("CodGC", redeForm.getCodGC());
		request.setAttribute("lstGC", listarGC);		
						
		return mapping.findForward("success");
	}
	
	
	public ActionForward executaListaRede( ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		
		CadUFDAO ufDAO = new CadUFDAO();
		System.out.println("CadUFDAO: antes de listar");
		List listarUF = ufDAO.listaUF();
		
		CadGRDAO grDAO = new CadGRDAO();
		System.out.println("CadGRDAO: antes de listar");
		List listarGR = grDAO.listaGR();
		
		//CadCidadeDAO cidadeDAO = new CadCidadeDAO();
		//System.out.println("CadCidadeDAO: antes de listar");
		//List listarCidade = cidadeDAO.listaCidade();
				
		
		CadRedeDAO redeDAO = new CadRedeDAO();
		System.out.println("CadRedeAction: antes de listar");
		List listaRedeVO = redeDAO.listaRede();
		//Carregando um objeto form
		List listaCadRedeForm = new ArrayList();  
		Iterator it = listaRedeVO.iterator();
		while (it.hasNext()){
			CadRedeVO cadRede = new CadRedeVO();			
			cadRede = (CadRedeVO)it.next();
			CadRedeForm cadRedeForm = new CadRedeForm();
			//System.out.println(Integer.toString(cadRede.cod_rede));
			cadRedeForm.setCodigo(Integer.toString(cadRede.getCodigo()));
			cadRedeForm.setDescrRede(cadRede.getDescRede());
			cadRedeForm.setUf(cadRede.getUf());
			cadRedeForm.setCidade(cadRede.getCidade());
			cadRedeForm.setFone1(cadRede.getFone1());
			cadRedeForm.setContato1(cadRede.getContato1());			
			cadRedeForm.setEmail1(cadRede.getEmail1());
			cadRedeForm.setFone2(cadRede.getFone2());
			cadRedeForm.setContato2(cadRede.getContato2());
			cadRedeForm.setEmail2(cadRede.getEmail2());
			cadRedeForm.setRazaoSocial(cadRede.getRazao());
			cadRedeForm.setInscrEst(cadRede.getInscEst());
			cadRedeForm.setCnpj(cadRede.getCnpj());
			cadRedeForm.setEndereco(cadRede.getEnder());
			cadRedeForm.setBanco(cadRede.getBanco());
			cadRedeForm.setAgencia(cadRede.getAgencia());
			cadRedeForm.setContaCorrente(cadRede.getConta());
			cadRedeForm.setCadFor(cadRede.getCadFor());			
			cadRedeForm.setNumContrato(cadRede.getNumContrato());
			cadRedeForm.setEnderProm(cadRede.getEnderProm());
			cadRedeForm.setCodGR(cadRede.getCodGR());
			cadRedeForm.setCodGC(cadRede.getCodGC());
			cadRedeForm.setIsAtivo(cadRede.getIsAtivo());
			//System.out.println("CadRedeAction: Depois do Form");
			if (cadRede.getDataStatus() == null){			
				cadRedeForm.setDataStatus("");
			}else{
				cadRedeForm.setDataStatus(cadRede.getDataStatus().toString());
			}
			
			cadRedeForm.setObs(cadRede.getObs());
     	
			//System.out.println("CadRedeAction: Depois do Form");
			listaCadRedeForm.add(cadRedeForm);
			//System.out.println("CadRedeAction: Depois da lista");
    }		
		//
		System.out.println("CadRedeAction: depois de listar");
		HttpSession session = request.getSession(); 
		System.out.print("CadRedeAction: listaCadRede = ");
	
		if (listaCadRedeForm.isEmpty()){
			session.removeAttribute("lstUF");
			
		}else{
			session.setAttribute("lstUF", listarUF);
		}
						
		if (listaCadRedeForm.isEmpty()){
			session.removeAttribute("lstGR");			
		}else{
			session.setAttribute("lstGR", listarGR);			
		}	
		
		if (listaCadRedeForm.isEmpty()){ 
			//session.removeAttribute("lstUF");
			session.removeAttribute("lstRede");						
		}
		else{
			//session.setAttribute("lstUF", listarUF);
			session.setAttribute("lstRede", listaCadRedeForm);
		}
		return mapping.findForward("success");
	}

Segue o resultado do log:

CadRedeAction: depois de listar
CadRedeAction: listaCadRede = executaListaGC: null
Entrou ListaGC
Antes da query GC
Antes da query GC08j8j
Depois do While GC

12 Respostas

Micke

Por favor coloca o codigo dentro da tag Code…

dicabeca

vitorbonfim coloca seus codigos dentro do Code, e uma dica problema com querys,vai debugando,printa todas as consultas copia e cole no editor sql do seu banco e manda executalo vc vai ver sempre erro q esta na query as vezes é bobeira como string sem o ’ ou algo do tipo esse jeito é muito eficas de pegar erros de sintax!!!

dicabeca

tenta

pstm = con.prepareStatement("SELECT cod_gc, cod_gr, descr_gc FROM tblgerenteconta WHERE cod_gc = '" + strGC + "'");
Micke

Testei aki um select usando as aspas simples e sem elas e me retorno o mesmo valor, creio que o problema esteja no valor da variavel strGC, que provavelmente esta vindo null… se estiver vindo null ele retorna no select null…

Espero ter ajudado!!

dev-ailson

Bom dia a todos.

vitorbonfim,

Retorna alguma mensagem de erro ou simplesmente não mostra nada?

Existe algum registro no banco?

t+

baudamix
É boa pratica verificar se seu atributo(s) está a vir como você gostaria que estivesse.... isso evita esse erro e ler o Stack Trace ajuda muito vc. ex.:
...
  if(strGC == null){
        throw new NullPointerException("Codigo da Gerente da conta não pode ser nulo!");			
  }

  try{  
                 System.out.println("Entrou ListaGC");  
                 Connection con = getConnection();  
                   
                 pstm = con.prepareStatement("SELECT cod_gc, cod_gr, descr_gc FROM tblgerenteconta WHERE cod_gc = " + strGC + "");  
...

Outro cuidado é fechar suas conexao com finally para não ficarem abertas e sem uso caso tenha uma erro na conexao ou codigo..

...
    } catch( java.sql.SQLException sqlException){  
        System.out.println("sqlException: "+ sqlException);  
    }  finally {
        try {
	    con.close();
	    pstm .close();
	} catch (SQLException e) { 
	    e.printStackTrace();			
	}
   }
...

enfim se for uma lição da facu nem se preocupe com isso mais no dia a dia é outra boa pratica.
abr e sucesso

lucao

Cara, não fica concatenando string não. Isso é uma má prática.
Para receber um sql injection no caso não precisa muito. Cuidado.

Segue um jeito melhor de fazer isso.

PreparedStatement stmt = con.prepareStatement("SELECT cod_gc, cod_gr, descr_gc FROM tblgerenteconta WHERE cod_gc = ?"); stmt.setString(1, strGC); stmt.execute(); stmt.close();

Além de evitar problemas com sql injection, você reduz os custos no parse.

brunoha

por que é uma má prática a concatenação de string?

peczenyj
  • Evitar Sql Injection
  • Caracteres estranhos como aspas e apóstrofos podem causas erros bizarros (sim, imagine que alguem pode ter o sobrenome D’avilla).
brunoha

Então o método setString() mostrado acima tem o tratamento para estas ocorrências?

V

Galera,

Muito obrigado pelas dicas, mas infelizmente ainda não funcionou.
A query esta certinha, ela esta retornando o código como “int” e logo depois atribuo o valor a variável strCod.

pstm.setInt(1, Integer.parseInt(strGC));

Mas acho q o problema não esta aqui e sim no meu Action.
Quando varro a lista:

CadRedeDAO redeDAO = new CadRedeDAO();
		System.out.println("CadRedeAction: antes de listar");
		List listaRedeVO = redeDAO.listaRede();
		//Carregando um objeto form
		List listaCadRedeForm = new ArrayList();  
		Iterator it = listaRedeVO.iterator();
		while (it.hasNext()){
			CadRedeVO cadRede = new CadRedeVO();			
			cadRede = (CadRedeVO)it.next();
			CadRedeForm cadRedeForm = new CadRedeForm();
			//System.out.println(Integer.toString(cadRede.cod_rede));
			cadRedeForm.setCodigo(Integer.toString(cadRede.getCodigo()));
			cadRedeForm.setDescrRede(cadRede.getDescRede());
			cadRedeForm.setUf(cadRede.getUf());
			cadRedeForm.setCidade(cadRede.getCidade());
			cadRedeForm.setFone1(cadRede.getFone1());
			cadRedeForm.setContato1(cadRede.getContato1());			
			cadRedeForm.setEmail1(cadRede.getEmail1());
			cadRedeForm.setFone2(cadRede.getFone2());
			cadRedeForm.setContato2(cadRede.getContato2());
			cadRedeForm.setEmail2(cadRede.getEmail2());
			cadRedeForm.setRazaoSocial(cadRede.getRazao());
			cadRedeForm.setInscrEst(cadRede.getInscEst());
			cadRedeForm.setCnpj(cadRede.getCnpj());
			cadRedeForm.setEndereco(cadRede.getEnder());
			cadRedeForm.setBanco(cadRede.getBanco());
			cadRedeForm.setAgencia(cadRede.getAgencia());
			cadRedeForm.setContaCorrente(cadRede.getConta());
			cadRedeForm.setCadFor(cadRede.getCadFor());			
			cadRedeForm.setNumContrato(cadRede.getNumContrato());
			cadRedeForm.setEnderProm(cadRede.getEnderProm());
			cadRedeForm.setCodGR(cadRede.getCodGR());			
			
			cadRedeForm.setCodgc(cadRede.getCodgc());
			
			System.out.println("GC: Depois do Form " + cadRede.getCodgc());
			cadRedeForm.setIsAtivo(cadRede.getIsAtivo());
			//System.out.println("CadRedeAction: Depois do Form");
			if (cadRede.getDataStatus() == null){			
				cadRedeForm.setDataStatus("");
			}else{
				cadRedeForm.setDataStatus(cadRede.getDataStatus().toString());
			}
			
			cadRedeForm.setObs(cadRede.getObs());
     	
			//System.out.println("CadRedeAction: Depois do Form");
			listaCadRedeForm.add(cadRedeForm);
			//System.out.println("CadRedeAction: Depois da lista");
    }		
		//
		System.out.println("CadRedeAction: depois de listar");
		HttpSession session = request.getSession(); 
		System.out.print("CadRedeAction: listaCadRede = ");

A linha abaixo recebe o valor “null”:

cadRedeForm.setCodgc(cadRede.getCodgc());

Com certeza o problema é aqui, mas não estou conseguindo enxergar.

Mais uma vez muito obrigado,

Vitor Bonfim

furutani

Tem certeza que o select traz resultados?
Você começou usando setCodGC() e depois é setCodgc(). Qual é o certo?

Criado 12 de março de 2008
Ultima resposta 12 de mar. de 2008
Respostas 12
Participantes 9