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

32 respostas
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

32 Respostas

rmendes08

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.

nel

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.

fernandopaiva

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…

EduFranzoni

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. =(

EduFranzoni

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

socorrrrroo!!

ruben_m

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

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

rmendes08

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.

fernandopaiva

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+

rmendes08

ruben_m:
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

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

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.

EduFranzoni

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

pmlm

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.

rmendes08

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

EduFranzoni

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!

rmendes08

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.

EduFranzoni

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!

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

EduFranzoni

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!

rmendes08

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.

nel

Compartilho a mesma certeza :smiley:

EduFranzoni

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?

EduFranzoni

o arquivo é muito grande, vo passar o mode, pode serr?

EduFranzoni

meu projeto, basicamente é baseado em arquivos .jsp e arquivos pra acesso a dados.

Tem uns comentários que foi tentativa de fazer o bagulho!

EduFranzoni
ResultSet resultado = usuario.GetTipous(idUsuario, request.getRemoteHost());
            int idT = 0;
            if(resultado.next())
            {
                idT = resultado.getInt(1);
            }
           if(idT == 3)
           {
            String a = "";
           }else
           {
            String a1 = "";
           }

kra, idT recebe 3!, ele não cai nem no if e nem no else!

g4j

É o típico caso de problema de sincronia do teu código fonte com o código compilado. Alguém já comentou em um post anterior, tente limpar cache, executar um “Clean” no projeto, excluir a pasta “work” do tomcat…

EduFranzoni

g4j:

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!

É o típico caso de problema de sincronia do teu código fonte com o código compilado. Alguém já comentou em um post anterior, tente limpar cache, executar um “Clean” no projeto, excluir a pasta “work” do tomcat…


Já tentei lmpar e contruis o projeto, não aconteceu nada!

a pasta work do tomcat pod ser apagada mesmo?

Obrigado!

g4j

EduFranzoni:

Já tentei lmpar e contruis o projeto, não aconteceu nada!

a pasta work do tomcat pod ser apagada mesmo?

Obrigado!

Não custa tentar, renomeie a pasta somente pra testar.

EduFranzoni

tentei, e nada meu amigo!

novamente observe que estranho

ResultSet resultado = usuario.GetTipous(idUsuario, request.getRemoteHost());
            int idT = 0;
            if(resultado.next())
            {
                idT = resultado.getInt(1);
            }
           if(idT == 3)
           {
            String a = "";
           }else
           {
            String a1 = "";
           }
            String mensagem = "";

idT recebe o resultado.getInt(1); certinho! porem quando ele tenta executa o if(idT == 3) ele pula para a linha = String mensagem = "";

Limpei e construi o projeto, limpei cache dos navegadores, removi a pasta work que estava vazia do tomcat, e nada!

Caramba meu! que loucura!
Umas pessoas podem garantir que não é bug do java, mas eu to quase garantido que o erro não é meu!

Aguardo, plzzz

g4j

Faz mais um teste. Crie outro arquivo e cole o código e teste novamente…

EduFranzoni

Também não adiantou!

Karamba meu! =S

pmlm

Que instruções tens dentro do if? Se forem só essas, como queres saber se entra no if ou não?

EduFranzoni

Eu sei, porque uso o netbeans e depuro o arquivo linha por linha!

percebi o erro logo no começo da implementação, compreende, se não teria outras centanas de linha dentro de cada if ai!

pmlm

Mas se só tens uma declaração que não é usada, o compilador é esperto para não incluir essa linha e ignorar esse if.

EduFranzoni

KKKKKKKKKKKKKKKKKKKKKKKKKKK!

Não é possível! funcionou!

Justificativa: Não achei que isso poderia acontecer, pois estou declarando uma váriavel ali dentro e poderia ser importante p/ a aplicação!
Mas ok! agora funcionou muito obrigado! espero que continue funcionando!

Iniciante com muito orgulho! rsrs

OBRIGADO A TODOSSS!

Criado 26 de agosto de 2011
Ultima resposta 26 de ago. de 2011
Respostas 32
Participantes 7