Biometria + Banco

4 respostas
P

Bom dia pessoal,

Estou mexendo um leitor de digitais da Digital Persona.

Ele vem com umas bibliotecas junto.

Estou com problema na hora de gravar no banco de dados o template e principalmente para recuperar.

Creio que para gravar foi certinho, pois utilizei o comando:

template.serialize()

Este comando é da biblioteca e ele retorno um array de bytes[] que eu salvo em um campo blob.

Agora para recuperar eu estou tentando utilizar o deserialize() mas não da certo. O comando deserialize() não retorna nada e pede um array de bytes como parametro.
Eu tentei fazer isso

byte[] digital = rs.getBytes("digital");
DPFPTemplate template = null;
template.deserialize(digital);

Porém da o erro de nullException. Eu não sei se só fazendo do byte[] digital = rs.getBytes(“digital”); está retornando um array corretamente. Alguem já mexeu com isso, sabe como fazer para converter para template de novo?

4 Respostas

P

É, fiz uns testes aqui e já constatei que o comando

byte[] digital = rs.getBytes("digital");

não retorna o array de byte.

Na hora de gravar eu usei o comando o serialize() e sempre ele me da um array de bytes de 1632 posições. Quando utilizo o byte[] digital = rs.getBytes(“digital”); o array digital está apenas com 10 posições.

Como faço para recuperar o Array? Creio que se eu conseguir recuperar ele de volta com 1632 posições o deserialize() vai funcionar já que ele está dando nullpointer.

Edit ->

Fiz os testes aqui, e realmente funciona o deserialize() se o array de bytes estiver completo. Então minha dúvida é: Como recuperar o array de bytes que está salvo no campo blob?

A

Cara , não sei se entendi …mais se o seu campo esta gravado no banco de dados …faça assim :

rs.getClob("digital");

String sql = "SELECT digital FROM TESTE";
        try{
	            PreparedStatement ps = conexao.prepareStatement(sql);
	            ResultSet rs = ps.executeQuery();
	 
	            while(rs.next()){
	                Clob clob = rs.getClob("digital");
	                BufferedReader reader = new BufferedReader(clob.getCharacterStream());
	                StringBuffer strBuf = new StringBuffer();
	 
	                String linha = null;
	                while((linha = reader.readLine()) != null){
	                    strBuf.append(linha);
	//Character.LINE_SEPARATOR insere a quebra de linha
	                    strBuf.append((char)Character.LINE_SEPARATOR);
	                }
	 
	                System.out.println("=========== CLOB ===========");
	                System.out.println(strBuf.toString());
	            }
	 
	            rs.close();
	            ps.close();
	        }catch (Exception e) {
	            e.printStackTrace();
	        }

Veja se te ajuda …

D

Boa Tarde, alguem conseguiu resolver ?

E

Normalmente você não puxa os bytes de um Blob usando getBytes diretamente e sim algo como getBlob().getBytes() - cada driver de banco tem sua forma diferente de resolver o problema.
Veja que o JDBC não consegue esconder completamente a diferença entre os diversos bancos de dados.

Criado 1 de outubro de 2012
Ultima resposta 21 de nov. de 2012
Respostas 4
Participantes 4