Select retornando valor errado

9 respostas
J

Ola,

galera estou com um problema no select , segue o codigo :

try {

			java.sql.ResultSet res = null;
			PreparedStatement select;

			select = connection.prepareStatement("select Valor_Consulta from Medico where ID_Medico = ?");
			select.setInt(1, IdMedico);

			res = select.executeQuery();

			if (res.next()) {

			String valorConsulta = res.getString("Valor_Consulta");

			}

		} catch (Exception e) {
			System.out.println("Erro valor consulta");
			e.printStackTrace();
		}
		System.out.println(valorConsulta);
		
              return valorConsulta;

	}

O valor da consulta no banco de dados está declarado como nvarchar(13) = R$ 150,00

O problema é que o valorConsulta está retornando "1" ao invés de "R$ 150,00" , já tentei mudar no banco para varchar e char , mas mesmo assim continua retornando o valor "1" , alguém saberia me dizer como faço para retornar o valor respectivo ao banco de dados?

9 Respostas

D

Esse seu código está estranho, teoricamente o escopo de sua variável seria apenas dentro do bloco IF, suponho que vc tenha outra variável na classe com o mesmo nome, tente fazer o seguinte para ver se vai imprimir o valor correto:

if (res.next()) {  
  
        String valorConsulta = res.getString("Valor_Consulta");  
        System.out.println(valorConsulta); 
  
}
J
dudu795:
Esse seu código está estranho, teoricamente o escopo de sua variável seria apenas dentro do bloco IF, suponho que vc tenha outra variável na classe com o mesmo nome, tente fazer o seguinte para ver se vai imprimir o valor correto:
if (res.next()) {  
  
        String valorConsulta = res.getString("Valor_Consulta");  
        System.out.println(valorConsulta); 
  
}

Oi, obrigado pela resposta , então na verdade eu coloquei " String valorConsulta " só para mostrar que meu atributo valorConsulta é uma string , mas ele está declarado no inicio do código e não dentro do if , fiz oq vc sugeriu e mesmo assim ele continua exibindo valor "1"

drsmachado
dudu795:
Esse seu código está estranho, teoricamente o escopo de sua variável seria apenas dentro do bloco IF, suponho que vc tenha outra variável na classe com o mesmo nome, tente fazer o seguinte para ver se vai imprimir o valor correto:
if (res.next()) {  
  
        String valorConsulta = res.getString("Valor_Consulta");  
        System.out.println(valorConsulta); 
  
}
Muito estranho.
JulianAssange:
try {  
  
        java.sql.ResultSet res = null;  
        PreparedStatement select;  
  
        select = connection.prepareStatement("select Valor_Consulta from Medico where ID_Medico = ?");  
        select.setInt(1, IdMedico);  
  
        res = select.executeQuery();  
  
        if (res.next()) {  
  
        String valorConsulta = res.getString("Valor_Consulta");  
  
        }  
  
    } catch (Exception e) {  
        System.out.println("Erro valor consulta");  
        e.printStackTrace();  
    }  
    System.out.println(valorConsulta);  
      
             return valorConsulta;  
  
}
1 - Onde está a definição do parâmetro esperado pelo PreparedStatement? 2 - Nunca use
if(rs.next())
Pois o ResultSet é meio "burrinho", afinal, quando você invoca o método next, ele já passa para o próximo elemento, o mais adequado é utilizar
while(rs.next())
Então você pode utilizar todos os elementos que estão no resultSet.
J
drsmachado:
dudu795:
Esse seu código está estranho, teoricamente o escopo de sua variável seria apenas dentro do bloco IF, suponho que vc tenha outra variável na classe com o mesmo nome, tente fazer o seguinte para ver se vai imprimir o valor correto:
if (res.next()) {  
  
        String valorConsulta = res.getString("Valor_Consulta");  
        System.out.println(valorConsulta); 
  
}
Muito estranho.
JulianAssange:
try {  
  
        java.sql.ResultSet res = null;  
        PreparedStatement select;  
  
        select = connection.prepareStatement("select Valor_Consulta from Medico where ID_Medico = ?");  
        select.setInt(1, IdMedico);  
  
        res = select.executeQuery();  
  
        if (res.next()) {  
  
        String valorConsulta = res.getString("Valor_Consulta");  
  
        }  
  
    } catch (Exception e) {  
        System.out.println("Erro valor consulta");  
        e.printStackTrace();  
    }  
    System.out.println(valorConsulta);  
      
             return valorConsulta;  
  
}
1 - Onde está a definição do parâmetro esperado pelo PreparedStatement? 2 - Nunca use
if(rs.next())
Pois o ResultSet é meio "burrinho", afinal, quando você invoca o método next, ele já passa para o próximo elemento, o mais adequado é utilizar
while(rs.next())
Então você pode utilizar todos os elementos que estão no resultSet.

Então , ele estava como while(rs.next()) , eu mudei para If somente pra teste , mas sem sucesso =/

drsmachado

Por que não posta o código correto?

J
drsmachado:
Por que não posta o código correto?
public class Servicos {

	String valorConsulta ;


      public String valorConsulta(String Id) {

		IdMedico = Integer.parseInt(Id);
		
		try {

			java.sql.ResultSet res = null;
			PreparedStatement select;

			select = connection.prepareStatement("select Valor_Consulta from Medico where ID_Medico = ?");
			select.setInt(1, IdMedico);

			res = select.executeQuery();

			while (res.next()) {

				valorConsulta = res.getString("Valor_Consulta");
				
                                           }

		} catch (Exception e) {
			System.out.println("Erro valor consulta");
			e.printStackTrace();
		}
		System.out.println(valorConsulta);
		return valorConsulta;

	}
}
D

Boa Tarde amigo,

Acredito que o erro esta na função

String valorConsulta = res.getString("Valor_Consulta");

altere para:

String valorConsulta = res.getString("NOME_COLUNA");
float n = rs.getFloat("COLUNA_PRECO");
J

DiiH:
Boa Tarde amigo,

Acredito que o erro esta na função

String valorConsulta = res.getString("Valor_Consulta");

altere para:

String valorConsulta = res.getString("NOME_COLUNA");
float n = rs.getFloat("COLUNA_PRECO");
</blockquote>

Boa Tarde , obrigado pela resposta , fiz a alteração como vc sugeriu , mas continua exibindo “1” =(

J

Galera resolvi aqui , dei um refresh no DataBase e um clean no TomCat , misteriosamente exibiu o valor correto =) .

Obrigado pela ajuda !

Criado 20 de março de 2013
Ultima resposta 20 de mar. de 2013
Respostas 9
Participantes 4