[RESOLVIDO]Muito esquesito, resultset retorna valor certo e não cai no if()

Boa tarde GUJ,

é o seguinte, chamo uma função do banco, ele retorna o número certo, mas na hora do teste ele não cai na condição que deveria cair! MUITOOOO ESQUESITO!

            ResultSet rsTipo = usuario.GetTipoUsuario(idUsuario, request.getRemoteHost());
            int TipoUsuario1 = 0;
            if(rsTipo.next())
            {
                TipoUsuario1 = (int) rsTipo.getShort(1);  
                
            } 
            if(TipoUsuario1 == 3)
            {            
            String aa = "";
            String aa112 = "";
            String aa2 = "";
            }

O usuário que estou logado é do tipo 3! debugando, quando chego na linha if(TipoUsuario1 == 3)
a variavel TipoUsuario1 está valendo 3! e não cai dentro do if! MUITOO ESQUESITO, o que pode ser?

Obrigado

Troque:

TipoUsuario1 = (int) rsTipo.getShort(1);

por

TipoUsuario1 = rsTipo.getInt(1);

Essas conversões devem perder algum bit no meio do caminho, fazendo com que o operador == não reconheça os valores como iguais.

Oi!

Não dê nome a variavéis que iniciem com letra maíuscula, por favor.
E não está esporrando nenhum erro?

E ao invés de fazer o parser de um short para int, porque simplesmente não usa o short?
Abraços.

Kra, ja passei por isso qdo estava começando.

veja, tente assim

if(rs.next()){
   Short tipoUsuario1 = rs.getShort("tipousuario");
   if(tipoUsuario == 3){
      String aa = "";
      //etc...
   }
}

t+ e boa sorte

P.S:Procure usar convenções de códigos do java…

Valeu galera pela ajuda, mas fiz os dois testes e ainda nada!

No banco de dados o tipo de dado é smallint, deveria usar então short certo?
eu usei, e acontece o mesmo problema, o bagulho retorna 3, mas não cai dentro do if!

Muito impossível isso, to ficando nervoso aqui! rsrs. =(

fernando paiva, usei a sua forma também e não caiu dentro do if!

socorrrrroo!!

[quote=EduFranzoni]Boa tarde GUJ,

é o seguinte, chamo uma função do banco, ele retorna o número certo, mas na hora do teste ele não cai na condição que deveria cair! MUITOOOO ESQUESITO!

            ResultSet rsTipo = usuario.GetTipoUsuario(idUsuario, request.getRemoteHost());
            int TipoUsuario1 = 0;
            if(rsTipo.next())
            {
                TipoUsuario1 = (int) rsTipo.getShort(1);  
                
            } 
            if(TipoUsuario1 == 3)
            {            
            String aa = "";
            String aa112 = "";
            String aa2 = "";
            }

O usuário que estou logado é do tipo 3! debugando, quando chego na linha if(TipoUsuario1 == 3)
a variavel TipoUsuario1 está valendo 3! e não cai dentro do if! MUITOO ESQUESITO, o que pode ser?

Obrigado[/quote]

E isso , tens de evitar esse Parse ai no meio … ou usa Int ou use short

cara, pode ser que o código executando não seja exatamente correspondente ao fonte que você está editando. Dá um clean no seu projeto e compila novamente.

Faz o seguinte…

if(rs.next()){
    System.out.println(rs.getShort("camposhort"));
}
//aqui vc verifica se tem alguma coisa no result set, se cair no if vc faz outro teste
if(rs.next()){
    System.out.println("aqui eh o if do meu rs");
    if(rs.getShort("camposhort") == 1){
         System.out.println("o rs.next retornou 1");
    }
}

Desta maneira vc vai testar se o seu rs.next() realmente tem alguma coisa e se tiver ele vai cair no segundo if…

t+

[quote=ruben_m][quote=EduFranzoni]Boa tarde GUJ,

é o seguinte, chamo uma função do banco, ele retorna o número certo, mas na hora do teste ele não cai na condição que deveria cair! MUITOOOO ESQUESITO!

            ResultSet rsTipo = usuario.GetTipoUsuario(idUsuario, request.getRemoteHost());
            int TipoUsuario1 = 0;
            if(rsTipo.next())
            {
                TipoUsuario1 = (int) rsTipo.getShort(1);  
                
            } 
            if(TipoUsuario1 == 3)
            {            
            String aa = "";
            String aa112 = "";
            String aa2 = "";
            }

O usuário que estou logado é do tipo 3! debugando, quando chego na linha if(TipoUsuario1 == 3)
a variavel TipoUsuario1 está valendo 3! e não cai dentro do if! MUITOO ESQUESITO, o que pode ser?

Obrigado[/quote]

E isso , tens de evitar esse Parse ai no meio … ou usa Int ou use short[/quote]

isso não é parse, é cast. São coisas completamente diferentes. De qualquer maneira, se ele declara a variável como short o cast é feito implicitamente na comparação.

Velho! que mentiraida que está isso!

fiz dessa forma:

          ResultSet rsTipo = usuario.GetTipoUsuarioByIdUsuario(idUsuario, request.getRemoteHost());
                if(rsTipo.next())
                {  
                  short idTipo = rsTipo.getShort(1);
                }  
    //aqui vc verifica se tem alguma coisa no result set, se cair no if vc faz outro teste  
     if(rsTipo.next())
     {  
         
        if(rsTipo.getShort("idTipo") == 3)
        {  
             String a = "";  
        }  
     }  

ele cai no primeiro, passa pela linha onde armazena o getShort, mas no segundo if não entra!

obs: a condição do segundo é igual do primeiro! o que explica isso?

TOMA NO *** viu!

E obrigado a todos pela ajuda, e espero que continuem. stress! rsrs

Errado.
Se o teu SQL, devolve uma linha, no primeiro if devolve true e fica a apontar para essa linha. Fazendo novamente o if, e como não há mais linha nenhuma, devolve false.

Isso não dá certo. Quando você faz uma chamada ao método next() do ResultSet ele avança o cursor para o próximo registro, de forma que duas chamadas seguidas a next() não retornam o mesmo resultado, necessariamente.
Tenta esse código:

ResultSet rsTipo = usuario.GetTipoUsuario(idUsuario, request.getRemoteHost());  
  
if(rsTipo.next())  {  
    short tipoUsuario1 = rsTipo.getShort(1);

    if( tipoUsuario1 == (short) 3 )  {              
       String aa = "";  
       String aa112 = "";  
       String aa2 = "";   
    }else{
       throw new RuntimeException("tipo de usuário inválido: " + tipoUsuario1);
    }
}else{
    throw new RuntimeException("tipo de usuário não encontrado");
}   
  

poste o que acontece nesse caso

Velho, deu na mesma, ele recebe o valor (short)3, e na hora de testa o if() ele pura pro final do mode!

estou programando pra web! isso nao interfere em nada logico. ta osso!

como assim final do mode ? não entendi isso não …

o fato é que com o código acima ou ele entra no if ou ele dispara a exceção. Se ela não for capturada e ignorada em algum lugar, ela tem que no mínimo aparecer no log do servidor. De qualquer maneira, eu desconfio que código que está no servidor está desatualizado.

Velho, realmente muito estranho!

o mode eh mais ou menos assim.

<%
try{

 if (mode != null && mode.equals("edit"))
        {


         }
catch(Exception e)
{

}
%>

Não sei exatamente como funciona isso. mas é isso, quando o kra clica no botao editar, vai redireciona pra essa parte do if ai! e tdo acontece ai dentro!!

Voltando no problema, eu vou debugando e tudo vai acontecendo direitinho!
quando ele cai na linha que compara se a variavel é igual a 3, ele pula pro final do mode, não cai em nenhuma exception nem nada!

=(((((((((((((

em relação a servidor, acredito que não, pois se não ele não retornaria 3 pra variavel,

debugando eu vejo os valores da variavel e é muito engraçado, pois vejo a linha formada sendo 3 == 3, e ele fala que não é! rsrs

fala sério! vou tentar fazer pra emvez de retornar o resultset ja retorar o valor boolean. e ja posto o resultado disso!

Faz o seguinte, coloca o arquivo completo em que está esse código, pra entendermos o contexto. Tenha apenas 1 certeza: não é bug do Java.

Compartilho a mesma certeza :smiley:

meu deus! fiz a função de consulta, ela retorna normalmente o valor. POREM, quando passo para a proxima linha, ele ja pula pro final do mode!
MEU DEUSSSSSSSSSSSSSSSSSSSSSSSSSSSS!

que issoooo…

short rsTipo = usuario.GetTipous(idUsuario, request.getRemoteHost());
          
String a = "";
String a1 = "";

Ele vai pra função, faz tudo direitinho o valor que retorna fica valendo 3, que eh o que deveria ser mesmo. quando ele volta ele nao chega nem na segunda linha

String a = "";

Ou seja, o problema não é no if! nem na consulta! estou certo?

O que pode ser?