Alguém me ensina a tratar retorno nulo?

Olá pessoal,

Estou passando por um problema no desenvolvimento do meu sistema. Vejam o erro que retorna:

[quote]java.lang.NullPointerException
at org.postgresql.jdbc2.ResultSet.getString(ResultSet.java:148)
at org.postgresql.jdbc2.ResultSet.getString(ResultSet.java:531)
at dedao_ponto_util.verificaES(dedao_ponto_util.java:257)
at dedao_ponto_util.registroPonto(dedao_ponto_util.java:229)
at dedao_ponto_util.identify(dedao_ponto_util.java:181)
at dedao_ponto_util.processImage(dedao_ponto_util.java:123)
at dedao_ponto_util.onImageAcquired(dedao_ponto_util.java:112)
at com.griaule.grfingerjava.GrFingerJavaNative.callbackImage(GrFingerJavaNative.java:148)
[/quote]

Vou explicar o que a rotina faz. Ele faz uma busca no banco de dados pra saber qual foi a ultima ação do usuário, se ele entrou ou saiu. Se o usuário nunca fez nenhuma ação, ele não vai ter nada gravado no banco de dados, e acontece isso. da esse erro de null. Eu não consigo tratar isso, veja o if:

try { // Verifica qual foi a ultima acao do funcionario // E - Entrada // S - Saida PreparedStatement ps_tipo = conexao.conn.prepareStatement("SELECT * FROM dedao.ponto WHERE cadf_codigo = ? ORDER BY pon_codigo ASC"); ps_tipo.setInt(1,codigo); ResultSet rs = ps_tipo.executeQuery(); rs.last(); if (rs.getString("pon_tipo").equalsIgnoreCase("E") && rs.getString("pon_codigo") != null) retorno = "S"; else retorno = "E"; } catch (SQLException ex) { ex.printStackTrace(); } catch (NullPointerException ex) { ex.printStackTrace(); }

Eu não sei como fazer!! Alguém poderia me ajudar?

Obrigado.

onde foi q vc declarou a varíavel E ???

vc a iniciou antes de tentar usa-la ???

Antes de vc fazer o rs.last(), vc tem que verificar se o rs não voltou nullo. :wink:

Antes de Executar o .equalsIgnoreCase pode atribuir o retorno do record set a uma variável local e verificar se ela está nula.

Então pessoal, eu verifiquei se o retorno do rs está nulo, e mesmo assim não da certo:

PreparedStatement ps_tipo = conexao.conn.prepareStatement("SELECT * FROM dedao.ponto WHERE cadf_codigo = ? ORDER BY pon_codigo ASC"); ps_tipo.setInt(1,codigo); ResultSet rs = ps_tipo.executeQuery(); if (rs != null) { rs.last(); if (rs.getString("pon_tipo").equalsIgnoreCase("E") && rs.getString("pon_codigo") != null) retorno = "S"; else retorno = "E"; } else { retorno = "E"; }

Alguma outra alternativa?

if(rs.next()){
rs.last();

}

tenta assim ! nao sei se via funcionar. nunca fiz isso asism
abraço

[quote=rbroz85]if(rs.next()){
rs.last();

}

tenta assim ! nao sei se via funcionar. nunca fiz isso asism
abraço[/quote]

Assim funcionou, vou fazer mais alguns testes.

Valeu pela ajuda galera.
[]'s