[RESOLVIDO] Blob MySQL com JTextArea

9 respostas
Marcos.Oliveira.dev

Meu CRUD tá funcionando corretamente! Aliás, a mesma lógica eu uso em três telas já, no esquema MVC, swing, com banco MYSQL
Mas tô apanhando pra salvar campos BLOB. Ainda não entendi se o problema tá na gravação ou na exibição no jTextArea!
Vou transcrever as linhas que julgo importantes:

//populando objeto Tabela. Demais dados salvam tabela.setObs(taObs.getText().getBytes());
//no DAO, preparedStatement pstmt pstmt.setBytes(3, Obs);
//na rotina que exibe os dados //Se eu faço assim dá erro de compilação taObs.setText(tabela.getObs().toString()); //e sugere isso taObs.setText(Arrays.toString(tabela.getObs()));
Feito tudo isso, parece que o texto é salvo, pois no banco aparecem valores diferentes em bytes. Mas no jTextArea surge algo assim:

[77, 111, 116, 111, 114, 32, 100, 97, 32, 77, 101, 114, 99, 101, 100, 101, 115]

Onde é que eu tô errando???
Agradeço antecipadamente! A dúvida é simples e exatamente por isso tô achando difícil achar solução nos fóruns!

9 Respostas

Jonas_B_a_r_r_o_s

Se voce mudar de tabela.setObs(taObs.getText().getBytes());
para tabela.setObs(taObs.getText()); o que acontece?

Marcos.Oliveira.dev

Aí ele não compila, @Jonas_B_a_r_r_o_s

incompatible types: String cannot be converted to byte[]

Marcos.Oliveira.dev

Fiz um teste agora com o texto:
Testando salvar blog

  • No banco ele salvou isso: 0x54657374616e646f2073616c76617220626c6f62
  • No meu programa (jTextArea) ele exibe: [84, 101, 115, 116, 97, 110, 100, 111, 32, 115, 97, 108, 118, 97, 114, 32, 98, 108, 111, 98]

O drama é que eu ainda não sei se tô SALVANDO errado ou EXIBINDO errado!
IDE: NetBeans
SGBD: USBWebServer (é simples, mas me atende pra estudos!)

T

Marcos, tudo bom?

Deixa eu ver se entendi. Você, no java, está fazendo alguma codificação do texto e salvando no banco de dados no formato Blob, correto?

Quando você tenta recuperar esse Blob ele vem diferente do teu select no mysql?

Marcos.Oliveira.dev

Opa!
Então @thiagobasalles… Na verdade eu não sei se tô salvando corretamente ou não.
O que eu quero é simples:

  • Pegar o texto (string digitada no jTextArea)
  • Transformar esse texto em bytes e salvar no campo blob
  • “Fazer o caminho de volta”, exibindo esse campo do banco no jTextArea

Há outras formas de salvar essa string, como um Varchar. Mas eu tô querendo aprender a usar o Blob mesmo!

Jonas_B_a_r_r_o_s

Quando voce pegar de volta do banco, tenta converter novamente em String

Marcos.Oliveira.dev

Aí chegamos nisso que eu postei de início:

Marcos.Oliveira.dev

Mais um teste aqui, sem sucesso.
Se eu cadastro direto no SGBD a partir de um arquivo txt (ele não deixa digitar valor em BLOB), a exibição do texto continua essa array de números. Então o erro pode estar na exibição!

Marcos.Oliveira.dev

Achei o problema!
A gravação no banco estava correta

tabela.setObs(taObs.getText().getBytes());

e no PreparedStatement…

pstmt.setBytes(numeroOrdem, Obs);

O problema, de fato, estava na exibição dos dados no jTextArea. Porque eu precisava fazer uma conversão dos bytes para String.
Resolvi assim:

String bytesEmString = new String(tabela.getObs(), “UTF-8”);
taObs.setText(bytesEmString);

:relaxed:

Criado 30 de maio de 2016
Ultima resposta 3 de jun. de 2016
Respostas 9
Participantes 3