Query nao retorna o valor correto JDBC

5 respostas
R

Boa tarde gente, estou com um problema com query jbdc:

try{

this.connection = ConnectionFactory.getConnection();
		
		Statement stmt = connection.createStatement();			
		
		ResultSet rs = stmt.executeQuery("select sum(valor) from refeicao where TO_DAYS(NOW()) - TO_DAYS(data_refeicao) <= 7 and id_usuario = " + user.getId_usuario()+ "");
		
		while(rs.next()){
			user = new Usuario();
			user.setValor_refeicao(rs.getInt("sum(valor)"));
				
			System.out.println("sum(valor): " + user.getValor_refeicao());
		}				
		
		rs.close();			
		stmt.close();
		this.connection.close();
		
	}catch(SQLException e){
		throw new DAOException("Erro ao selecionar contato. ", e);
	}

Faço o select normalmente, só que tem um problema, não retorna o valor correto, por exemplo:
Se a soma der 5.30, nao aparece 5.30 apenas 5.00, ele arredonda, so que eu preciso do valor certo.

Se alguem puder me ajudar, agradeço.

5 Respostas

Alys

Olá,

Parece que você está recuperando o valor como inteiro:

user.setValor_refeicao(rs.getInt("sum(valor)"));

O atributo valorRefeicao na classe Usuário é Inteiro, pelo que percebo? Neste caso, está ocorrendo um cast implícito (Double -> Integer), e as casas decimais estão sendo perdidas. Você deverá alterá-lo para algum tipo numérico ponto flutuante (double, por exemplo), e recuperar o valor do ResultSet como double (ou o tipo que você declarar, pode ser float tb).

Obs: Sempre use a opção CODE quando for postar códigos fontes, para facilitar a leitura e a sua escrita :wink:

[]'s

R

Ok… Mas nao deu certo.

realves

Acredito que se vc fizer todas as regras dentro de uma view, além de mais rápido, resolverá seu problema.

Alys

Você modificou a declaração do atributo na classe User, alterou o método setter para receber este mesmo tipo, e passou a recuperar o valor do ResultSet como Double, por exemplo? Se o método setter ainda estiver recebendo um Inteiro (esse é um erro bem comum), o problema ainda vai permanecer.

Você pode também efetuar um debug, desde a leitura do valor no banco de dados até recuperar este valor no objeto User criado, para verificar aonde as casas decimais estão sendo perdidas.

Só para eliminarmos opções, quando você executa a query direto no banco, ela retorna o valor que você deseja, 5.3?

Depende do que se deseja fazer. Se é uma aplicação da empresa, ou um exercício da faculdade, por exemplo. Arquiteturalmente falando (to gastando o português hj, rsss) , você tem razão, formatações na view ficam mais elegantes. Mas, tem que saber o contexto do problema, para saber se é aplicável :wink:

R

Obrigada gente, deu certo.

Criado 3 de março de 2011
Ultima resposta 30 de mar. de 2011
Respostas 5
Participantes 3