Executar Query e passar o conteúdo por parâmetro

4 respostas
Filipe_Sartor

Boa tarde,

Estou fazendo um programa onde tenho uma Tela Principal montada com VE (visual editor - eclipse), uma classe de passagem de parâmetros, uma de conexão (BD Oracle) e uma classe que executa as query para buscar os dados no BD. O problema acontece na hora que executa a query não consigo retornar os valores e passa-los por parâmetro, alguém pode me ajudar ?

Segue abaixo a parte do meu código onde executo a query e passo por parametro:

public Vector<Duplicata> buscar (String numDuplic, String cpfCnpj, String numParc, String quantParc, String valFatura){

		conectar();

		

		Vector<Duplicata> resultados = new Vector<Duplicata>();

		ResultSet rs;

		

		try{			

			rs=comando.executeQuery("SELECT a.nome_cliente, a.endereco_cliente , " +

					"a.cidade_cliente, b.valdup_duplic, b.numero_duplic, b.desdobramento_duplic " +

					"FROM t_dupcliente a, t_dupduplic b WHERE a.cgc_cliente = " + cpfCnpj +

					" AND b.numero_duplic = " + numDuplic + " AND b.desdobramento_duplic = " + numParc +

					" AND b.cliente_duplic = a.codigo_cliente AND b.empresa_duplic = 01 AND " +

					" a.empresa_cliente = 01");

			

			while(rs.next()){

				

				Duplicata temp = new Duplicata();

				

				temp.setNumDuplic(rs.getString(numDuplic));

				temp.setCpfCnpj(rs.getString(cpfCnpj));

				temp.setNumParc(rs.getString(numParc));

				temp.setQuantParc(rs.getString(6));

				temp.setValFatura(rs.getString(4));

				resultados.add(temp);

			}

			return resultados;

			

		} catch(SQLException e){

			imprimeErro("Erro ao buscar Duplicata!", e.getMessage());

			return null;

		}

	}

4 Respostas

caio.ribeiro.pereira

O problema não esta na query e sim no loop de instancia de Duplicata.

while(rs.next()){  
   Duplicata temp = new Duplicata();  
   temp.setNumDuplic(rs.getString(numDuplic));  // errado
   temp.setCpfCnpj(rs.getString(cpfCnpj));   // errado
   temp.setNumParc(rs.getString(numParc));   // errado
   temp.setQuantParc(rs.getString(6));  // dependendo da ordem dos resultados pode estar certo ou errado
   temp.setValFatura(rs.getString(4));  // dependendo da ordem dos resultados pode estar certo ou errado
   resultados.add(temp);  
}  
return resultados;

Uma boa prática seria fazer assim…

while(rs.next()){  
   Duplicata temp = new Duplicata();  
   // Vamos supor que os resultados venham nessa ordem, então apenas numeramos cada um no index do metodo rs.getString ou outros métodos do rs como getDouble, getInteger.
   temp.setNumDuplic(rs.getString(1)); 
   temp.setCpfCnpj(rs.getString(2));  
   temp.setNumParc(rs.getString(3));
   temp.setQuantParc(rs.getString(4));
   temp.setValFatura(rs.getString(5)); 
   resultados.add(temp);  
}  
return resultados;

Tirando isso o código esta totalmente correto.

felipe.far

Cara, não é uma boa prática colocar os parâmetro direto na String.

Da uma olhada neste post:
http://www.guj.com.br/articles/7

Acho que isso vai te ajudar bastante :smiley:

mauricioadl

seu select sem falha de segurança, use preparedStatement. e faça a captura dos parametros como amigo ae de cima disse.

[]'s

caio.ribeiro.pereira

Concordo com Felipe e Mauricio, tinha esquecido do PreparedStatement, que é a melhor coisa a se fazer. Porém quando citei “Boa Prática” foi apenas para resolver aquele ResultSet.

Criado 20 de janeiro de 2012
Ultima resposta 20 de jan. de 2012
Respostas 4
Participantes 4