Ajuda com ResultSet sem resultados

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?

Grato

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!!!

Após esse trecho

rs = pstm.executeQuery(); 

coloque um

while(rs.next()){
   ... // tratamentos, etc.
}

Creio que seja isso.

Der Meister

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.

Grato

[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.

[code] rs = pstm.executeQuery();

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]

vhmolinar

Segue a exception…

org.postgresql.util.PSQLException: ResultSet não está posicionado corretamente, talvez você precise chamar next.

Der Meister

Vou tentar o que vc falou, mas acho que a excessão é gerada após a instrução do executeQuery().

[quote=Der Meister][code] rs = pstm.executeQuery();

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…

Está incializada sim, no topo da classe, esqueci de colocar as declarações no post. De qualquer forma obrigado.