Eu tenho duvida de como deve ser implementado o metodo find da certificacao sun certified java developer, eu nao entendi muito bem o que dizer abaixo:
// Returns an array of record numbers that match the specified
// criteria. Field n in the database file is described by
// criteria[n]. A null value in criteria[n] matches any field
// value. A non-null value in criteria[n] matches any field
// value that begins with criteria[n]. (For example, “Fred”
// matches “Fred” or “Freddy”.)
public int [] find(String [] criteria) throws RecordNotFoundException;
No meu ponto de vista eu deveria criar um janela onde todos os campos do arquivo(diga-se atributos do bean) disponiveis para o usuario inputar valores, no caso de qualquer campo ser deixado em branco e o usuario clicar no botao pesquisar o campo seria null no array. Entao esse array seria repassado para o metodo find in String[] criteria e seria utilizado para a pesquisa. Caso o usuario nao preencha nenhum valor da janela de pesquisa o array seria null e todos os registros seriam retornados. No caso de dois ou mais campos serem preenchidos o sistema deve implementar a logica de “and” para fazer a pesquisa onde cada string do criteria deve ser testado utilizando startWith
Sera que estou no caminho correto, alguem que ja fez a SCJD implementou desta forma?
E mais ou menos por ai.
Entao esse metodo vai ler os valores que vc passou no array de busca (no meu caso, so vai haver 2 fields desse array preenchidos, que sao nome de lugar e nome da cidade, os outros sempre serao nulos).
O metodo vai retornar um array de ID’s, que satisfazem o criterio da busca. NOTE que esse ID nao existe no arquivo binario, ele existe apenas EM MEMORIA para que sua aplicacao saiba distinguir os registros (visto que nao ha chave primaria, nem nada que identifique unicamente o registro).
No meu caso, estou construindo esses ID’s e armazenando no momento que rodo a aplicacao, baseado na POSICAO do registro no arquivo.
AQUI tem praticamente TUDO que vc precisa sobre SCJD. Inclusive falando sobre esses metodos de procura, sobre como “construir” os locNo (IDs) e muito +++
DICA: Seja interface grafica, seja acesso a dados, seja controle… preze pela SIMPLICIDADE.
Vi la um relato de um cara que fez 400/400. E ele fez APENAS o que estava na especificacao, nada mais.
Não sei qual versão exatamente… mas um amigo meu fez o mesmo trabalho e a única coisa que era diferente era o nome da interface, no caso dele era DBAccess no meu caso a interface é chamada DBMain
package suncertify.db;
public interface DBMain {
// Reads a record from the file. Returns an array where each
// element is a record value.
public String [] read(int recNo) throws RecordNotFoundException;
// Modifies the fields of a record. The new value for field n
// appears in data[n].
public void update(int recNo, String [] data)
throws RecordNotFoundException;
// Deletes a record, making the record number and associated disk
// storage available for reuse.
public void delete(int recNo) throws RecordNotFoundException;
// Returns an array of record numbers that match the specified
// criteria. Field n in the database file is described by
// criteria[n]. A null value in criteria[n] matches any field
// value. A non-null value in criteria[n] matches any field
// value that begins with criteria[n]. (For example, “Fred”
// matches “Fred” or “Freddy”.)
public int [] find(String [] criteria)
throws RecordNotFoundException;
// Creates a new record in the database (possibly reusing a
// deleted entry). Inserts the given data, and returns the record
// number of the new record.
public int create(String [] data) throws DuplicateKeyException;
// Locks a record so that it can only be updated or deleted by this client.
// If the specified record is already locked, the current thread gives up
// the CPU and consumes no CPU cycles until the record is unlocked.
public void lock(int recNo) throws RecordNotFoundException;
// Releases the lock on a record.
public void unlock(int recNo) throws RecordNotFoundException;
// Determines if a record is currenly locked. Returns true if the
// record is locked, false otherwise.
public boolean isLocked(int recNo)
throws RecordNotFoundException;
}