Persistir Texto + Imagem no BD

Olá,

Tenho uma aplicação Java Swing que possui uma tela de cadastro.
A tela de cadastro possui um JTextPane com opção de importar imagem, ou seja, além do usuário inserir o texto poderá também inserir imagem na mesma área.
Minha dúvida é, posso persistir os dados desse JTextPane que está incorporando String + Img?
Estou persistindo os textos tranquilamente, entretanto estou tendo dificuldade para gravar/recuperar as imagens.

A String que você fala é o caminho da imagem? Se for, salva só o caminho mesmo:

pst.setString(N, seuTextPane.getText());

Aí pra recuperar vc faz assim:

     String caminho = conecta.rs.getString("colunaDoBancoOndeVcGravou");
     ImageIcon i = new ImageIcon(new ImageIcon(caminho).getImage().getScaledInstance(campofoto.getWidth(), campofoto.getHeight(), Image.SCALE_SMOOTH));
     campofoto.setIcon(i);

Pode, o texto você salva numa coluna do tipo varchar e a imagem em uma coluna do tipo blob.

1 curtida

@staroski aproveitando… Dizem que é mais indicado salvar o caminho da imagem, ok, mas porquê seria o mais indicado se o caminho é absoluto? Qualquer alteraçãozinha eu posso perder a informação do caminho no sistema

Não. A string é o texto que o usuário digita no campo e a imagem é a que ele insere no mesmo campo.
Consigo gravar esse jTextArea em uma única coluna no banco de dados, contemplando texto e imagem?

Certo, mas como eu distingo texto e imagem no banco se na minha view o texto e a imagem estão juntos?
Pensei em gravar o jTextArea (texto + img) em uma única coluna do banco de dados, é possível?

Quem diz?
Então pra que usar banco de dados se vai guardar as imagens no sistema de arquivos, não faz sentido, pelo menos pra mim.

Primeiramente, como é que você está inserindo uma imagen no JTextArea?

@staroski
Dessa forma:

     JFileChooser fileChooser = new JFileChooser();
     fileChooser.setDialogTitle("Importar imagem");
     fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
         if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
             ImageIcon icone = new ImageIcon(fileChooser.getSelectedFile().getPath());
             txtPaneDescricao.insertIcon(icone);
        }

Até um tempo atrás tinha bastante tópico sobre isso. Acabei pesquisando um pouco sobre isso, e nos fóruns fala que ter a imagem diretamente no banco pode comprometer o desempenho do servidor. Enfim, eu sempre estranhei também…

Putz, não percebi que você estava usando JTextPane, achei que era JTextArea.

Bom, o JTextPane não tem algo pronto para obter as imagens que foram adicionadas nele.

Nesse post, alguém conseguiu resolver de outra forma: [Resolvido] - JTextPane (I/O e I/O de imagens)

De repente você poderia estender o JTextPane e sobrescrever o método insertIcon e adicionar a imagem em alguma lista para posteriormente obter na hora de salvar no banco.

Como seria feito então? Quais as opções?

A primeira resposta que dei neste post:
O texto em uma coluna varchar e a imagem em uma coluna blob.

1 curtida