Alguém me ensina a tratar retorno nulo?

6 respostas
Pilantra

Olá pessoal,

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

<blockquote>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)

</blockquote>

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.

6 Respostas

Giulliano

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

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

spycall

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

S

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

Pilantra

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?

rbroz85
if(rs.next()){

rs.last();

…

}

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

Pilantra
<blockquote><div class="quote-author">rbroz85:</div>if(rs.next()){

rs.last();

…

}

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

Assim funcionou, vou fazer mais alguns testes.

Valeu pela ajuda galera.
[]'s

Criado 6 de agosto de 2007
Ultima resposta 6 de ago. de 2007
Respostas 6
Participantes 5