Equals não funciona ajuda

14 respostas
L

no código a seguir uso o equals la em baixo no else

try{
Class.forName("org.postgresql.Driver"); // carrega drive

Connection con= DriverManager.getConnection("jdbc:postgresql://localhost/jsp","postgres","1989"); 
//conectando no banco
	
Statement st=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); //usa conexão

ResultSet rs = null;

if(request.getParameter("acao")!= null)
{
st.executeUpdate("delete from login where codigo= "+ request.getParameter("codigo") );
}
if(request.getParameter("orde")!= null)
{
rs= st.executeQuery("select * from login ");
}
else if (request.getParameter("orde").equals("cres"))
{
rs = st.executeQuery("select * from login order by login");
}
//ResultSet rs= st.executeQuery("select * from login");
// executa comando

o .equals do else não funciona tentei testar ele em outro lugar e não consegui
alguem sabe oque poderia ser e se tem algum erro no código aqui?

14 Respostas

L

mal ja arrumei esqueci. eu so novo aqui

drsmachado

Agora me diga, como não funciona?
O que vem em

request.getParameter("orde") ?
Primeiro, debugue e veja se é realmente igual a

"cres"

Depois, por que não cria uma String para receber o valor do parâmetro orde?

H

Talvez esteja falando besteira, mas o retorno tanto request.getParameter() geralmente é um Object. Logo, dificilmente ele seria igual a uma String. Sugiro que faça como o rapaz acima disse e receba o valor numa variável e depois faça a comparação.

S

request.getParameter(str) retorna uma String (que é um objeto).

Da um System.out.println(request.getParameter(“orde”));

H

request.getParameter(str) retorna uma String (que é um objeto).

Da um System.out.println(request.getParameter(“orde”));

Tem razão, o getAttribute() que retorna um objeto.

S

E só uma dica para você:

Ao usar o equals, sempre invoque o metodo equals da constante. Por exemplo, você colocou assim:

if (request.getParameter("orde").equals("cres"))

Mude para:

if ("cres".equals(request.getParameter("orde"))

Porque se por algum motivo request.getParameter(“orde”) vier null ele irá lançar um NullPointerException.

L

eu fiz oque você falou coloquei o if (“cres”.equals(request.getParameter(“orde”))
só que ai da erro no meu ResultSet que ja esta fora por sinal e no caso dele vir null ja esta tratado no if o caso é se ele não vier null
eu dei o out.printl nele a primeira vez veio null se eu acessar ele vem cres eu não sei qual o problema mais é na comparação creio eu

drsmachado

O retorno pode ser uma instância de Object, mas o equals vai comparar o hash do mesmo, caso você tenha

Object o = "ABC";
String s = "ABC";
System.out.println(o.equals(s));

Terá como saída true, pois o objeto o possui o mesmo hash que o objeto s.

S

locuradk:
eu fiz oque você falou coloquei o if (“cres”.equals(request.getParameter(“orde”))
só que ai da erro no meu ResultSet que ja esta fora por sinal e no caso dele vir null ja esta tratado no if o caso é se ele não vier null
eu dei o out.printl nele a primeira vez veio null se eu acessar ele vem cres eu não sei qual o problema mais é na comparação creio eu

Coloque aqui o StackTrace.

Obs:

A minha dica foi só para evitar um possível NullPointerException. O que eu quis dizer é que você deveria SEMPRE usar o equals do objeto constante 8)

L
ae galera consegui ! eu não percebi que o else estava igual o if testando se é diferente de null oque no caso ia ser sempre diferente e nunca ia entrar no else Obrigado a todos. código arrumado
try{
Class.forName("org.postgresql.Driver"); // carrega drive

Connection con= DriverManager.getConnection("jdbc:postgresql://localhost/jsp","postgres","1989"); //conectando no banco
	
Statement st=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); //usa conexão

ResultSet rs = null;

out.println(orde);

if(request.getParameter("acao")!=(null))
{
st.executeUpdate("delete from login where codigo= "+ request.getParameter("codigo") );
}
if(request.getParameter("orde")==null )
{
rs= st.executeQuery("select * from login ");
}
//out.println(""+request.getParameter("orde"));
else 
if (request.getParameter("orde").equals("cres"))
{
rs = st.executeQuery("select * from login order by login");
}
drsmachado

locuradk:
eu fiz oque você falou coloquei o if (“cres”.equals(request.getParameter(“orde”))
só que ai da erro no meu ResultSet que ja esta fora por sinal e no caso dele vir null ja esta tratado no if o caso é se ele não vier null
eu dei o out.printl nele a primeira vez veio null se eu acessar ele vem cres eu não sei qual o problema mais é na comparação creio eu

Sinceramente, o erro não deve ser da comparação.
Eu sugiro que você faça como indiquei, instancie uma variável temporária e obtenha o valor do parâmetro

String ordem = (String) request.getParameter("orde");

Altere a comparação para este cara

if("cres".equals(ordem)){
//faz algo
}

E, se preferir, faça um System.out.println(“cres”.equals(ordem)), caso tenha um true, o trecho dentro do else if deve ser executado, caso contrário, o valor que vem no request é:
null
Diferente de “cres” por possuir:

  • Algum caractere em maiúsculo - neste caso, um “cres”.equalsIgnoreCase(ordem) resolve.
  • Ter caracteres a mais/menos que “cres”
  • Não ser cres - ser “des” ou qualquer outra coisa
cogumello

Amigo, posso estar errado, mas nesse trecho:

if(request.getParameter("orde")!= null) { rs= st.executeQuery("select * from login "); } else if (request.getParameter("orde").equals("cres")) { rs = st.executeQuery("select * from login order by login"); }

Como no primeiro if você verifica se request.getParameter(“orde”) é diferente de null, ele só entrará no else se for null, ou seja, nunca será igual a “cres”.

Você pode tentar primeiro verificar se é igual a “cres” e depois ver se é diferente de null:

if (request.getParameter("orde").equals("cres")) { rs = st.executeQuery("select * from login order by login"); } else if(request.getParameter("orde")!= null) { rs= st.executeQuery("select * from login "); }

L

sim isso mesmo eu tava testando ser diferente de null se sempre for diferente de null não ia entrar no else if

drsmachado

Sem_Nome:
locuradk:
eu fiz oque você falou coloquei o if (“cres”.equals(request.getParameter(“orde”))
só que ai da erro no meu ResultSet que ja esta fora por sinal e no caso dele vir null ja esta tratado no if o caso é se ele não vier null
eu dei o out.printl nele a primeira vez veio null se eu acessar ele vem cres eu não sei qual o problema mais é na comparação creio eu

Coloque aqui o StackTrace.

Obs:

A minha dica foi só para evitar um possível NullPointerException. O que eu quis dizer é que você deveria SEMPRE usar o equals do objeto constante 8)


E é isso mesmo.
Sempre que colocamos da forma como o autor do tópico está fazendo, corremos o risco de um NPE, afinal, o método equals, herdado da classe Object, é chamado.
O correto é fazer como você disse, verificar se algo que se conhece é igual a alguma coisa que vem do usuário, do banco, de outro sistema ou de outra parte do aplicativo. Se essa outra coisa vier nula, ainda será diferente do que nós temos e conhecemos.

Criado 24 de julho de 2012
Ultima resposta 24 de jul. de 2012
Respostas 14
Participantes 5