pessoal,
estou com um problemão no sistema que estou desenvolvendo. No banco tem uma coluna chamada bi_template do tipo bytea, só que quando vou consultar, via aplicação, o resultado é totalmente diferente. Ex: se no banco eu tenho um array {46,4D} o meu retorno deveria ser 46 no primeiro indice e 4D no segundo, porém me retorna 52 e 54. Alguém sabe o porque disso e como eu corrijo?
Consulta no banco
4 Respostas
pessoal,
estou com um problemão no sistema que estou desenvolvendo. No banco tem uma coluna chamada bi_template do tipo bytea, só que quando vou consultar, via aplicação, o resultado é totalmente diferente. Ex: se no banco eu tenho um array {46,4D} o meu retorno deveria ser 46 no primeiro indice e 4D no segundo, porém me retorna 52 e 54. Alguém sabe o porque disso e como eu corrijo?
Esse array é de bytes ou de integer?
Pode postar aqui o comando que grava no banco e o comando que lê do banco?
Isso tá cheirando a conversão de tipo.
[]s
o array que tenho na aplicação é de bytes.
gravar no banco eu to gravando manualmente, porque essa aplicação não tem função de inserção.
Também acho que deve ser algum problema com conversão porque, o valor 4D é uma valor hexadecimal, e quando é retornado não me retorna ele. Então pensei em fazer um array de string só q não está funcionando.
código que busca no banco:
public PerfilBiometrico getPerfilBiometrico(Cliente cliente,
MensagemRequisicao mensagem) throws Exception {
// TODO Auto-generated method stub
PerfilBiometrico perfilBiometrico = null;
String jpql = "FROM PerfilBiometrico as pb WHERE pb.clienteFK.nis = :nis AND pb.tipoDedoFK.sigla = :dedo";
this.query = this.entityManager.createQuery(jpql);
this.query.setParameter("nis", cliente.getNis());
this.query.setParameter("dedo", mensagem.getDedo());
try {
perfilBiometrico = (PerfilBiometrico) this.query.getSingleResult();
} catch (Exception e) {
// TODO: handle exception
e.getStackTrace();
this.logger.warning("Perfil n�o encontrado");
}
return perfilBiometrico;
}
o array que tenho na aplicação é de bytes.
gravar no banco eu to gravando manualmente, porque essa aplicação não tem função de inserção.
Também acho que deve ser algum problema com conversão porque, o valor 4D é uma valor hexadecimal, e quando é retornado não me retorna ele. Então pensei em fazer um array de string só q não está funcionando.código que busca no banco:
public PerfilBiometrico getPerfilBiometrico(Cliente cliente, MensagemRequisicao mensagem) throws Exception { // TODO Auto-generated method stub PerfilBiometrico perfilBiometrico = null; String jpql = "FROM PerfilBiometrico as pb WHERE pb.clienteFK.nis = :nis AND pb.tipoDedoFK.sigla = :dedo"; this.query = this.entityManager.createQuery(jpql); this.query.setParameter("nis", cliente.getNis()); this.query.setParameter("dedo", mensagem.getDedo()); try { perfilBiometrico = (PerfilBiometrico) this.query.getSingleResult(); } catch (Exception e) { // TODO: handle exception e.getStackTrace(); this.logger.warning("Perfil n�o encontrado"); } return perfilBiometrico; }
creio que mensagem.getDedo() retorna byte[] ok?
Qual é o tipo do campo no banco de dados?
Como voce esta gravando a informacao no banco?
Da um select dedo from sua tabela retorna como?
[]s
oi Kemperacc,
não é dedo que é o array não. O que é um array de bytes é um atributo da classe perfilbiometrico. Dedo é só um parametro para restringir a busca.
na base o tipo de dado é bytea e na aplicação é um array de bytes.
quando eu dou um select na base, o resultado retornado é o array de string que inserir manualmente pois a aplicação não faz inserção no banco.