Select e update no mesmo PreparedStatement?[Resolvido]

Preciso realizar um update em uma tabela, mas preciso realizar um select para recuperar alguns dados e tratá-los. Gostaria de uma ajuda para colocá-los no mesmo método. Se colocar rs.last() no ResultSet funciona, mas atualiza só o último registro, colocando rs.next() dá como null.

public void valorPagar() throws Exception { Connection con = Conexao.obterCon(); PreparedStatement ptmt = con.prepareStatement("SELECT m.data,m.hora_entr,m.hora_saida,v.placa,v.categoria FROM movimentacao m,veiculo v WHERE m.cod_vei=v.cod_vei"); ResultSet rs = ptmt.executeQuery(); while (rs.next() { Movimentação m = new Movimentação(); Veiculo v = new Veiculo(); m.setData(rs.getString("data")); m.setHora_entr(rs.getString("hora_entr")); m.setHora_saida(rs.getString("hora_saida")); v.setPlaca(rs.getString("placa")); v.setCategoria(rs.getString("categoria")); PreparedStatement psmt = con.prepareStatement("UPDATE movimentacao m INNER JOIN veiculo v SET m.periodo=?,m.valor_pagar=? WHERE v.placa=? AND m.cod_vei=v.cod_vei"); Date h_entr = Util.strToDate(m.getHora_entr()); Date h_saida = Util.strToDate(m.getHora_saida()); m.setPeriodo(Util.difHoras(h_saida, h_entr)); if (v.getCategoria().equals("Motocicleta")) { m.setValor_hora(4.50); } if (v.getCategoria().equals("Automóvel")) { m.setValor_hora(9.00); } if (v.getCategoria().equals("Utilitário")) { m.setValor_hora(13.5); } m.setValor_pagar(m.getValor_hora() * m.getPeriodo()); psmt.setLong(1, m.getPeriodo()); psmt.setDouble(2, m.getValor_pagar()); psmt.setString(3, v.getPlaca()); psmt.executeUpdate(); } }

Bem pessoal ninguem deu uma sugestão, ou será que eu poderia resolver esse problema de outra maneira.

Oi.

Da forma como postou o código, você realiza uma consulta e itera sobre todos os resultados.
Para cada resultado você realiza uma atualização (poderia criar isso em outro método).

A principio, não vi problemas. Está gerando exceção e/ou não atualizando os dados corretamente?
E sobre não responderem o seu tópico, lembre-se que é de livre escolha alguém ajudar ou não, portanto, deve ter paciência.

Valeu pela resposta. Na verdade quero atualizar somente sobre o resultado conforme a placa informada. O seguinte erro apareçe:
GRAVE: null
java.lang.NullPointerException

[quote=wsm]Valeu pela resposta. Na verdade quero atualizar somente sobre o resultado conforme a placa informada. O seguinte erro apareçe:
GRAVE: null
java.lang.NullPointerException[/quote]

Bom, o erro é simples, seria praticamente isso:

String s = null; s.trim();

Uma referência ou objeto nulo tentando executar uma ação, no caso acessar um método.
Veja em qual linha aponta o seu erro e verifique o que pode estar nulo.

Abraços.

[quote=wsm]Valeu pela resposta. Na verdade quero atualizar somente sobre o resultado conforme a placa informada. O seguinte erro apareçe:
GRAVE: null
java.lang.NullPointerException[/quote]

No stacktrace deve ter a linha onde a exceção foi lancacada. Assim vc consegue ir direto ao objeto q está gerando a exeção.

O erro está na linha que faz a comparação com a String da coluna categoria.

De certeza que não existem registos com categoria a NULL na BD?

Não, eu utilizei caixa de combinação para inserir e o bd ta preenchido.

creio nesta hipotese tambem…

Verdade, tinha registros nulos na tabela hora_saida. Só estou com mais um problema, alguem sabe um método para transformar long em int?

[quote=wsm]Verdade, tinha registros nulos na tabela hora_saida. Só estou com mais um problema, alguem sabe um método para transformar long em int?
[/quote]

http://download.oracle.com/javase/6/docs/api/java/lang/Long.html#intValue()

Considerando que estamos falando do objeto Long.
Não esqueça que o espaço em bits do Long é superior ao do Integer.

Abraços.