[RESOLVIDO] Dúvida - Erro ao salvar um um atributo do tipo BYTE[] no Banco de Dados

1 resposta
N

Estou fazendo um sistema desktop em java, e faço a criptografia da senha, usando uma função básica que criptografa o texto em um valor de 16 bytes, esta função retorna uma variável do tipo byte[]. Pois bem, estou pegando esta variável e setando no atributo senha da minha class TBUSUARIO, que esta atribuída como byte[] senha;

Ao fazer o insert desta informação (MYSQL), é passado um valor totalmente diferente do que devia ser, me parece ser o endereço de memória. Enfim, a linha de insert é esta, e obviamente não é possível fazer insert dela.

insert into tbusuario (usu_login, usu_master, usu_senha, usu_descricao) values (‘SERVIDOR’,1,x’E2BBD4024EF17FEBA389D74F46B77BB0’,‘SERVIDOR’)

A classe tbusuario esta assim:

public class Usuario {

String login;
boolean master;
byte[] senha;
String descricao;

public byte[] getSenha() {
    return senha;
}

public void setSenha(byte[] senha) {
    this.senha = senha;
}

E a classe que salvo a informação esta assim:

private void salvarRegistro() {
    byte[] senhaAES = null;
    usuario = new Usuario();
    try {
        senhaAES = lib.criptaAES(edtSenha.getText());
        usuario.setLogin(edtLogin.getText());
        usuario.setSenha(senhaAES);
        usuario.setMaster(chMaster.isSelected());
        usuario.setDescricao(edtDescricao.getText());
   ....

E a classe que faz a inserção do registro e onde esta retornando erro é esta:

public void insereUsuario(Usuario novoUsuario) throws SQLException, ClassNotFoundException {
    Connection conn = null;
    try {
        conn = ConexaoConfig.getInstance().getConexao();
        PreparedStatement pstmt = conn.prepareStatement(sqlInsere);
        pstmt.setString(1, novoUsuario.getLogin());
        pstmt.setBoolean(2, novoUsuario.getMaster());
        pstmt.setBytes(3, novoUsuario.getSenha());
        pstmt.setString(4, novoUsuario.getDescricao().toUpperCase());
        System.out.println(pstmt);
        pstmt.executeUpdate();
    } catch (SQLException e) {
        throw e;
    } catch (ClassNotFoundException ex) {
        throw ex;
    }
}

Observação: Estava salvando corretamente e também estava retornando do banco corretamente, onde eu conseguia pegar o retorno do banco e descriptografar, porém por algum motivo, não faz mais, instalei o MYSQL novamente, mas esta tudo como era antes.

Segue a tabela no banco :

CREATE TABLE tbusuario (
            usu_login VARCHAR(30) NOT NULL,
            usu_master BOOLEAN NOT NULL,
            usu_senha VARCHAR(500) NOT NULL,
            usu_descricao VARCHAR(30) NOT NULL,
            PRIMARY KEY (usu_login)

);

Já não sei mais o que testar para corrigir…

1 Resposta

N

Pessoal, erro meu…

Mesmo que ninguém tenha respondido, mas vi que alguns até visualizaram, vou postar o que fiz, vai que alguém passe por isso também…

Enfim, como descrito acima, erro ao dar o insert, achei que o erro estava na aplicação, pois pelo System.out.print, retornava uma string completamente diferente da correta.

MAS… depois de tudo desligado e com a cabeça fria, comecei a pensar no que fiz, e me toquei que havia reinstalado o servidor MYSQL, e no fim das contas, o collation da base estava errrado :confused:

Alterei para latin1_swedish_ci e tudo voltou a ficar como tem que ser…

Flw…

Criado 29 de junho de 2016
Ultima resposta 29 de jun. de 2016
Respostas 1
Participantes 1