Erro ao atualizar a coluna foto(tipo Binary) de uma tabela no hsqldb

0 respostas
M

Bom Dia Pessoal,

Estou implementando o módulo de cadastro para um sistema que estou desenvolvendo.
O módulo está gravando os dados certos (tanto os textos e os bytes do arquivo .jpg que o usuario selecionar), está excluindo normalmente, exibindo na tela, etc.

O problema está na hora de realizar o UPDATE dos dados na tabela (modo edição do cadastro). A parte de texto ele atualiza certo, no entando quando o usuário deseja adicionar uma foto ao registro ou simplesmente trocar a foto, é retornado o erro: java.sql.SQLException: data exception: string data, right truncation. Não entendo o porque desse erro estar ocorrendo.

Pois basicamente utilizei o mesmo trecho de código para inserir os dados (os quais são inseridos normalmente), mas ao fazer o update da foto, ou melhor, dos bytes da foto, ele retorna esse erro. Estou utilizando o PreparedStatement.

Trecho da insercao dos dados (funcionando normalmente):

pstmt = c.prepareStatement("INSERT INTO clientes (pessoa,cpf,rg,datanasc, bloqueado,cadastradopor,em,nome,cep,endereco,num,complemento,bairro,cidade,estado,telres,cel,telcom,email,obs,foto) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");

 if(!caminhoFoto.equals("")){
                            imageByteArray = new Global().ArqToByteArray(caminhoFoto);  //converte o arquivo de imagem em array de bytes
                            pstmt.setBytes(21, imageByteArray);                            
                            jLabelFoto.setText("");
                        }
                        else
                            if(caminhoFoto.equals("")){
                                imageByteArray = null;                                
                                pstmt.setBytes(21, imageByteArray);
                            }


                        pstmt.executeUpdate();
                        pstmt.close();
                    }

A parte do Update que está com problemas ao atualizar a coluna foto:

pstmt = c.prepareStatement("UPDATE clientes SET pessoa = ?,cpf = ?,rg = ?,datanasc = ?,bloqueado = ?,cadastradopor = ?,em = ?,nome = ?,cep = ?,endereco = ?,num = ?,complemento = ?,bairro = ?,cidade = ?,estado = ?,telres = ?,cel = ?,telcom = ?,email = ?,obs = ?,foto = ? WHERE cpf = ?");

if(!caminhoFoto.equals("")){
                    imageByteArray = new Global().ArqToByteArray(caminhoFoto);  //converte o arquivo de imagem em array de bytes                    
                    pstmt.setBytes(21, imageByteArray);                    
                    jLabelFoto.setText("");                    
                }
                else
                    if(caminhoFoto.equals("")){
                        imageByteArray = null;                        
                        pstmt.setBytes(21, imageByteArray);
                    }                
                pstmt.executeUpdate();
                pstmt.close();
            }

Se forem atualizadas apenas os dados de texto, ele atualiza normalmente, mas se for adicionar ou alterar a imagem, dá o erro.

Obs: Seria melhor armazenar as fotos em uma tabela só para elas para melhor desempenho? Pq sao apenas pequenas imagens apenas para "referenciar"cada cliente no caso. =)

Agradeço desde já a ajuda :wink:

Criado 6 de janeiro de 2011
Respostas 0
Participantes 1