Consulta com RecordFilter

bom pessoal! Eu to tendo uma problema na ora de consultar um registro por nome, sempre q eu passo um string nome ele diz que o id é inexistente,no meu projeto criei um classe filtro pra que possa filtrar essa minha consulta e tb criei meu metodo de consulta. agradeço a todos desde já.

Segue a abaixo meu código.

Minha Classe Filtro.

/**
 *
 * @author maxdavis
 */
public class Filtro implements RecordFilter {

    private String textoBuscado;

     public Filtro(String textoBuscado) {
		//este é o texto a ser pesquisado
		this.textoBuscado = textoBuscado.toLowerCase();
	}

	public boolean matches(byte[] candidato) {
		String str = new String(candidato).toLowerCase();
		//procura uma correspondência
		if ( textoBuscado != null && str.indexOf(textoBuscado) != -1 ) {
                   
			return true;
		} else {
			return false;
		}
	}

}

Meu metodo na minha camada de persistencia

 public Eventos printEnumFilter(String nome) throws RecordStoreException {
       rs = RecordStore.openRecordStore("Eventos", true);
        //String retorno = null;

        try {
            Filtro filtros = new Filtro(nome);
            RecordEnumeration re = rs.enumerateRecords(filtros, null, false);
            while (re.hasNextElement()) {
            System.out.println("-- getRecord = " + rs.getRecord(re.nextRecordId()));
               eventos = returnEventos(rs.getRecord(re.nextRecordId()));
            
            }
        } catch (InvalidRecordIDException ex) {
            System.out.println("-- ID inexistente");
        } catch (RecordStoreNotOpenException ex) {
            System.out.println("-- O Record Store esta fechado");
        }
        return eventos;
    }

O erro é que você está tentando ler um ID do “re” no “rs” e não vai dar certo, pois os indices da variável “re” são formados conforme o filtro que você criou, que são diferentes do “rs” original não filtrado. Tente mudar esta parte do código:

            while (re.hasNextElement()) {
            System.out.println("-- getRecord = " + rs.getRecord(re.nextRecordId()));
               eventos = returnEventos(rs.getRecord(re.nextRecordId()));
            }
        } catch (InvalidRecordIDException ex) {
            System.out.println("-- ID inexistente");
        } catch (RecordStoreNotOpenException ex) {
            System.out.println("-- O Record Store esta fechado");
        }
        return eventos;
    }

Para:

            while (re.hasNextElement()) {
            System.out.println("-- getRecord = " + re.nextRecord());
               eventos = returnEventos(re.nextRecord());
            }
//para saber se o Id é inexistente tem que ver se re.hasNextElement()==false, ou se o contador de records é maior que zero.
        } catch (InvalidRecordIDException ex) {
            System.out.println("-- ID inexistente");
        } catch (RecordStoreNotOpenException ex) {
            System.out.println("-- O Record Store esta fechado");
        }
        return eventos;
    }

um abraço.

Troquei pelo código que vc enviou e ainda continua lançando a mensagem . :confused:

Bom Pessoal conseguir fazer a consulta com RecordFilter Segue meu código pra quem precisar futuramente! Muito Obrigado pelo Edwagner por mais uma vez tem mim ajudado

Minha Classe filtro


/**
 *
 * @author maxdavis
 */
public class Filtro implements RecordFilter {

    private String textoBuscado;

     public Filtro(String textoBuscado) {
		//este é o texto a ser pesquisado
		this.textoBuscado = textoBuscado.toLowerCase();
	}

	public boolean matches(byte[] candidate) {
		String str = new String(candidate).toLowerCase();
		//procura uma correspondência
		if ( textoBuscado != null && str.indexOf(textoBuscado) != -1 ) {
                   
			return true;
		} else {
			return false;
		}
	}

}

Meu Metodo da minha classe Persistencia

 public Eventos buscarPorNome(String nome) throws RecordStoreException {
        rs = RecordStore.openRecordStore("Eventos", true);

       
        try {
            Filtro filtro = new Filtro(nome);
            RecordEnumeration re = rs.enumerateRecords(filtro, null, false);

            while (re.hasNextElement() != false) {
                     eventos = returnEventos(re.nextRecord());
       
            }
           

        } catch (InvalidRecordIDException ex) {
            System.out.println("-- ID inexistente");
        } catch (RecordStoreNotOpenException ex) {
            System.out.println("-- O Record Store esta fechado");
        }
        rs.closeRecordStore();
       
        return eventos;

    }

oi maxdavis, legal que deu certo, a alteração que você fez e deu certo foi justamente a que te indiquei, não sei porque não deu certo na sua primeira tentativa. Para complementar acho que você deve implementar um “if” para o caso de não encontrar o nome filtrado.

um abraço.