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();
}
}
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.
[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.
[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]