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