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: