Bem… estou desenvolvendo um sistema web de uma transportadora, e precisava de um método que verificasse entre uma lista de veiculos e uma determinada data, o primeiro veículo que não possua um serviço em status pendente, para que o mesmo possa ser agendado a uma nova entrega.
Ai que vem o problema, eu estou usando a seguinte query:
String consultaNotificacaoVeiculo = "Select not_status, not_num_servico from notificacao where vei_placa = ? and not_dia_entrega = ? and not_mes_entrega = ?"
Ou seja, quero que a mesma não retorne nenhum registro, pois ai saberei que o veiculo não possui nenhum serviço…
Usei este método:
public String verificaNotificacaoPendenteDeVeiculo(List<VeiculoBean> veiculos, int dia, int mes){
String placaVeiculo = "";
boolean encontrou = false;
VeiculoBean veiculo = new VeiculoBean();
try {
pstm = bd.conectar().prepareStatement(consultaNotificacaoVeiculo);
int i = 0;
//Loop para buscar o primeiro Veiculo
while((!encontrou) && (i < veiculos.size())){
//atribui ao bean de veiculo o veiculo da lista da posição i.
veiculo = veiculos.get(i);
System.out.println(veiculo.getPlaca());
//Seta os Parâmetros da query
pstm.setString(1, veiculo.getPlaca());
pstm.setInt(2, dia);
pstm.setInt(3, mes);
rs = pstm.executeQuery();
//Verifica o resultado da query, se há um serviço pendente para o veiculo na data informada.
if((rs.getInt("not_num_servico") > 0) && (rs.getString("not_status").equals("pendente"))){
/*Significa que existe um serviço pendente,
incrementa i para passar para o próximo veiculo da lista.*/
i++;
}
else{
//Não tem serviço, poderá ser retornado, encerrando o laço.
placaVeiculo = veiculo.getPlaca();
encontrou = true;
}
i++;
}
bd.desconectar();
} catch (SQLException e) {
e.printStackTrace();
bd.desconectar();
}
return placaVeiculo;
}
O meu resultSet está trazendo uma sqlException… e daí não consigo tratar o resultado vazio apra retornar a placa do veículo que não possui serviço…
Alguem poderia me ajudar com uma sujestão ou correção?
Colega, eu nao sei se eu entendi bem o que voce quer.
pelo o que eu entendi, ele esta dando erro mo
rs = pstm.executeQuery();
por que ele retorna null e voce nao sabe o que fazer, nao é?
por que voce nao coloca esse executeQuery dentro de um bloco try, e ai no catch voce adiciona a placa do veiculo na string…
nao sei se entendi o que voce quer…
fala em que linha exatamente ta dando o erro e posta o erro ai,se possivel…
======== 1 alteraçao minha ================
e outra, tem dois i++ ??
se voce tem dois carros na lista, o primeiro entra no primeiro if, é incrementado i , quando sair do if, sera incrementado novamente… indo direto para o carro… 3!!!
Não é exatamente um erro, o que quero é o seguinte, tornar válido um resultSet nulo. Pois para confirmar que não existe um serviço, a query que informei acima não deve retornar registros.
Dai quando dou o
rs = pstm.executeQuery();
é gerada uma exception, caindo diretamente no bloco catch…
O que vc falou de colocar a placa diretamente em uma string dentro do catch acho que talvez funcione, mas ficará com uma inconsistencia para outras excessões.
Quanto aos i++, é erro meu, vale apenas o que está dentro do bloco if.
[quote=Rpozza]Não é exatamente um erro, o que quero é o seguinte, tornar válido um resultSet nulo. Pois para confirmar que não existe um serviço, a query que informei acima não deve retornar registros.
Dai quando dou o
rs = pstm.executeQuery();
é gerada uma exception, caindo diretamente no bloco catch…
O que vc falou de colocar a placa diretamente em uma string dentro do catch acho que talvez funcione, mas ficará com uma inconsistencia para outras excessões.[/quote]
Cara aí complica né, se bug ta dando na hora de executar a query então pode ser 1 milhao de coisas
cola a exceção aí que já ajuda bastante.
if(rs == null){
placaVeiculo = “Não foi encontrado nenhuma placa”;
encontrou = true;
i++;
}else if((rs.getInt(“not_num_servico”) > 0) && (rs.getString(“not_status”).equals(“pendente”))){
// continuaçao do bloco if …[/code][/quote]
Tentei como vc disse, ele nem chega a entrar no if… Detalhe que o laço tem que encerrar ou quando acabar a lista ou quando encontrar um veiculo sem serviço.
cara…certifique-se se voce inicializou a variavel rs, se voce tiver inicializado ela e mesmo assim esta dando erro, eu nao me recordo do que pode ser feito nesse caso…