ola pessoal toh precisando de uma ajuda, é o seguinte conforme o figura abaixo eu tenho tres registro no Recordstore
o problema é o seguinte ao recuperar o os registro atravez de uma busca eu nao estou conseguindo lista todos os registros, teria que funcionar da seguinte forma:
ao fazer a busca pelo nome “rafael” a saida teria que ser os tres nomes que estao armazenados no recordstore, mais ao inves disso esta aparecendo apenas dois nomes
segue o codigo abaixo:
[code] try
{
reNomes = rsNomes.enumerateRecords(null, null, false);
}
catch (Exception erro)
{
}
if (reNomes.numRecords()>0)
{
ByteArrayInputStream bStream;
DataInputStream dStream;
String nameRMS = null;
byte [] record = reNomes.nextRecord();
while (reNomes.hasNextElement())
{
bStream = new ByteArrayInputStream (record);
dStream = new DataInputStream (bStream);
nameRMS = dStream.readUTF();
eu acho que isso está acontecendo pq a o vetor record nao está sendo inicializado com o registro do id 0 (linha 13). Sendo assim eu criei um vetor dentro do while (linha14) para reber todos os ids do recordstrore e utilizei o vetIds.elementAt(0) para recuperar o id 0, so q msm assim nao consegui, será que alguem pode me ajudar ?
.........
if (reNomes.numRecords()>0)
{
ByteArrayInputStream bStream;
DataInputStream dStream;
String nameRMS = null;
while (reNomes.hasNextElement())
{
dStream = new DataInputStream(new ByteArrayInputStream(rsNomes.getRecord(reNomes.nextRecordId())));
nameRMS = dStream.readUTF();
if (nameRMS.compareTo(tf_Buscar.getString())== 0)
{
findAddress = true;
String nameRMS2;
nameRMS2 = dStream.readUTF();
list.append(nameRMS+" - "+nameRMS2,null);
}
record = reNomes.nextRecord();
}
if (!findAddress)
System.out.println("nao cadastrado");
}
else
{
System.out.println("nao cadastrado");
}
..................
Desculpa errei nessa linha
dStream = new DataInputStream(new ByteArrayInputStream(rsNomes.getRecord(reNomes.nextRecordId())));
a cada interação do “while” crio um novo input , dando um geRecord do proximo id …
try
{
reNomes = rsNomes.enumerateRecords(null, null, false);
}
catch (Exception erro)
{
}
if (reNomes.numRecords()>0)
{
ByteArrayInputStream bStream;
DataInputStream dStream;
String nameRMS = null;
byte [] record = reNomes.nextRecord();
while (reNomes.hasNextElement())
{
bStream = new ByteArrayInputStream (record);
dStream = new DataInputStream (bStream);
nameRMS = dStream.readUTF();
if (nameRMS.compareTo(tf_Buscar.getString())== 0)
{
findAddress = true;
String nameRMS2;
nameRMS2 = dStream.readUTF();
list.append(nameRMS+" - "+nameRMS2,null);
}
record = reNomes.nextRecord();
}
if (!findAddress)
System.out.println("nao cadastrado");
}
else
{
System.out.println("nao cadastrado");
}
}
nao deu certo nao continuou listando apenas dois registro. agora pouco eu fui ler de novo o topico e percebi que eu nao expliquei direiro agora eu editei o topico. É assim o recordstore tem tres registro iguais soh que quando eu fasso uma busca com o nome do registro a saida eh apenas de dois registro fica faltando um, tah ai desconfinça que esse registro que está faltando está no record do id 0 porque c vc reparar quando eu fasso a busca eu utilizo o nextRecord(); (linha 14) para inicializar o vetor record. eu acho que o certo seria inicializar o vetor record com o record do id 0, soh que o nextRecord nao começa do id 0 neh ? ai eh que ta eu nao sei como fazer para inicializar o vetor record do id 0.
[quote=Rafael Oliveira da Silva][quote=npereirajr]Lembre-se de que o primeiro ID de registro do recordstore é o 1, e não o 0 como você citou.
Sua busca deve iniciar pelo registro 1.[/quote]
pq c fazer isso aqui nao da certo ?
Pq não é sempre garantido que vá existir no recordstore um registro com ID 1.
Como o id do record é incremental, e este record pode vir a ser deletado, se o for, da próxima vez que vc abrir de novo este recordstore e executar esta linha, é para ganhar uma linda InvalidRecordIDException…
[quote=boone][quote=Rafael Oliveira da Silva][quote=npereirajr]Lembre-se de que o primeiro ID de registro do recordstore é o 1, e não o 0 como você citou.
Sua busca deve iniciar pelo registro 1.[/quote]
pq c fazer isso aqui nao da certo ?
Pq não é sempre garantido que vá existir no recordstore um registro com ID 1.
Como o id do record é incremental, e este record pode vir a ser deletado, se o for, da próxima vez que vc abrir de novo este recordstore e executar esta linha, é para ganhar uma linda InvalidRecordIDException…[/quote]
entao como q eu fasso para inicializar o vetor record com o record do id 1 ?
[quote=Rafael Oliveira da Silva][quote=boone][quote=Rafael Oliveira da Silva][quote=npereirajr]Lembre-se de que o primeiro ID de registro do recordstore é o 1, e não o 0 como você citou.
Sua busca deve iniciar pelo registro 1.[/quote]
pq c fazer isso aqui nao da certo ?
Pq não é sempre garantido que vá existir no recordstore um registro com ID 1.
Como o id do record é incremental, e este record pode vir a ser deletado, se o for, da próxima vez que vc abrir de novo este recordstore e executar esta linha, é para ganhar uma linda InvalidRecordIDException…[/quote]
entao como q eu fasso para inicializar o vetor record com o record do id 1 ?[/quote]
A chave de tudo é sempre usar a enumeração (enumerateRecords e nextRecordId) para popular o vetor com os IDs.
ah tah, mais eu jah fiz isso ja e depois utilizei o vetIds.elementAt() para recuperar o id mais continuou listando apenas dois regitros ai inves dos tres
[quote=Rafael Oliveira da Silva][quote]
A chave de tudo é sempre usar a enumeração (enumerateRecords e nextRecordId) para popular o vetor com os IDs.
[/quote]
ah tah, mais eu jah fiz isso ja e depois utilizei o vetIds.elementAt() para recuperar o id mais continuou listando apenas dois regitros ai inves dos tres[/quote]
Cara…posta os 2 trechos de código:
:arrow: O laço while onde vc percorre a enumeração e preenche o vetIds
:arrow: O trecho onde usa o elementAt
Só vendo o que vc está fazendo é que dá para apontar o erro.