Java

37 respostas
java
F

Como salvar imagem no banco de dados??? Para depois mostrar juntos com os dados gravados nele.

37 Respostas

R

FABIANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA, EU JÁ TE MANDEI O CÓDIGO DISSO MULHER, funcionando melhor do que uma água caindo da cachoeira

R
F


olha eu já tenho um botão adicionar imagem
mais eu queria um botão para salvar imagem no banco de dados

J

olha você pode implementar o botão de salvar imagem e faz uma verificação se a imagem inserida for igual a do banco não salva senão altera a que está no banco de dados ou adiciona uma nova

Mas senão for o que quer pode dar mais detalhes por favor

F

a imagem no banco de dados é bytea certo, eu queria salvar imagem dentro do banco de dados e quando eu for pesquisar uma pessoa do banco mostre a imagem também.

J

ok. Primeiro você vai fazer um select na sua tabela e quando obter os dados Pode ser num array ou que você preferir você converte a imagem que no caso está em formato binário para a forma original dela novamente

F

como que eu faço isso??? Eu nunca fiz isso você pode me ensinar a fazer ???

J
Este código abaixo deve ajudar, não fui eu que fiz e está na internet e funciona muito bem,  que adaptei ele para o caso:

InputStream leitura  = new ByteArrayInputStream(byteImagem);

try {

BufferedImage novaimagem = ImageIO.read(leitura);

lblImagem.setIcon(new ImageIcon(novaimagem));

} catch (IOException ex) {

Logger.getLogger(EnviarImagem.class.getName()).log(Level.SEVERE, null, ex);

}

}

Se não entender me fala

J

esse byteimagem é os bytes que o banco retorna, através da consulta

F
assim que é o código:

private void jButtonSalvarImagemActionPerformed(java.awt.event.ActionEvent evt) {

byte[] byteImagem = null;

InputStream leitura = new ByteArrayInputStream(byteImagem);

try {

BufferedImage novaimagem = ImageIO.read(leitura);

jButtonSalvarImagem.setIcon(new ImageIcon(novaimagem));

} catch (IOException ex) {
}

}
F
mais ele esta dando esse erro:

Exception in thread AWT-EventQueue-0 java.lang.NullPointerException

at java.io.ByteArrayInputStream.(ByteArrayInputStream.java:106)

at telas.TelaMoradores.jButtonSalvarImagemActionPerformed(TelaMoradores.java:683)

at telas.TelaMoradores.access$800(TelaMoradores.java:26)

at telas.TelaMoradores$9.actionPerformed(TelaMoradores.java:239)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)

at java.awt.Component.processMouseEvent(Component.java:6533)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)

at java.awt.Component.processEvent(Component.java:6298)

at java.awt.Container.processEvent(Container.java:2236)

at java.awt.Component.dispatchEventImpl(Component.java:4889)

at java.awt.Container.dispatchEventImpl(Container.java:2294)

at java.awt.Component.dispatchEvent(Component.java:4711)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)

at java.awt.Container.dispatchEventImpl(Container.java:2280)

at java.awt.Window.dispatchEventImpl(Window.java:2746)

at java.awt.Component.dispatchEvent(Component.java:4711)

at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)

at java.awt.EventQueue.access$500(EventQueue.java:97)

at java.awt.EventQueue$3.run(EventQueue.java:709)

at java.awt.EventQueue$3.run(EventQueue.java:703)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)

at java.awt.EventQueue$4.run(EventQueue.java:731)

at java.awt.EventQueue$4.run(EventQueue.java:729)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
F

esse código pra mim não deu , o que faço???

F

eu estou usando esse código:
pat.setBytes(8, mod.getImagem());

e no banco eu estou utilizando bytea que eu mandei a foto pra você ver

F

ok

J
J

Aqui é o meu projeto ele está no NetBeans

https://mega.nz/#F!j7IBkI7I!mOyNo8Y7bUKZkAogxWqv7g

F
<div class="lightbox-wrapper"><a class="lightbox" href="/uploads/3X/3/9/392bbd834048132eba25536d942f12683e01e600.png.webp" data-download-href="/uploads/default/392bbd834048132eba25536d942f12683e01e600" title="image.png"><img src="/uploads/3X/3/9/392bbd834048132eba25536d942f12683e01e600.png.webp" alt="image" data-base62-sha1="89KVAQQAwLfhft21D3J1zUTbauY" width="690" height="388" srcset="/uploads/3X/3/9/392bbd834048132eba25536d942f12683e01e600.png.webp, /uploads/3X/3/9/392bbd834048132eba25536d942f12683e01e600.png.webp 1.5x, /uploads/3X/3/9/392bbd834048132eba25536d942f12683e01e600.png.webp 2x" data-small-upload="/uploads/3X/3/9/392bbd834048132eba25536d942f12683e01e600.png.webp"><div class="meta">
<svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use xlink:href="#far-image"></use></svg>image.png1920×1080 118 KB<svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use xlink:href="#discourse-expand"></use></svg>
</div></a></div>

aonde esta a seta minha eu não poderia usar porque eu tinha feito o código de adicionar olha:

private void jButtonAdicionarImagemActionPerformed(java.awt.event.ActionEvent evt) {

JFileChooser arquivo = new JFileChooser();

arquivo.setDialogTitle(Selecione uma foto);

arquivo.setFileSelectionMode(JFileChooser.FILES_ONLY);
int opc = arquivo.showOpenDialog(this);
    if(opc == JFileChooser.APPROVE_OPTION){
        File file = new File("caminho");
        file = arquivo.getSelectedFile();
        String filename = file.getAbsolutePath();
        jTextFieldPath.setText(filename);
        
        ImageIcon imagem = new ImageIcon(arquivo.getSelectedFile().getPath());
        jLabelImagem.setIcon(new ImageIcon(imagem.getImage().getScaledInstance(jLabelImagem.getWidth(), jLabelImagem.getHeight(), Image.SCALE_DEFAULT)));           
    }
           
}

eu não poderia só fazer o botão de salvar imagem ???

F

você poderia explicar de uma outra forma não consegui entender.

J

Bom a forma que expliquei não específica o arquivo que recebe do gerenciador de arquivo.

O adiconar imagem e o salvar imagem seria a mesma coisa.
Ou só salvaria se fosse no salvar imagem

F
eu mudei o código para esse:

JFileChooser se = new JFileChooser();

se.setFileSelectionMode(JFileChooser.FILES_ONLY);

int estado = se.showOpenDialog(null);
if(estado == JFileChooser.APPROVE_OPTION){
        try {
            fis = new FileInputStream (se.getSelectedFile());
            this.longitudBytes = (int) se.getSelectedFile().length();

            Image icono = ImageIO.read(se.getSelectedFile()).getScaledInstance(jLabelImagem.getWidth(), jLabelImagem.getHeight(), Image.SCALE_DEFAULT);

            jLabelImagem.setIcon(new ImageIcon(icono));
            jLabelImagem.updateUI();

        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        } catch (IOException ex){
            ex.printStackTrace();
        }
    }

e eu queria um código que ajudasse a colocar ele dentro do banco de dados.

J

Para lançar no banco precisa converter em array de bytes .
E eu preciso armazenar a imagem temporariamente para mandar para o banco. O que faço aqui:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ImageIO.write(imagem,"JPEG",baos);
            byteImagem=baos.toByteArray();

Bom se você quiser também permitir uma função para alterar a imagem você teria que verificar se a imagem é existente no banco

Bom poderia fazer só o botão salvar a imagem sim

F

eu estou usando esse site de base o que você acha?
https://respostas.guj.com.br/39233-como-salvaralterarler-uma-imagem-no-banco-de-dados
ele é bom ou você acha melhor não

J

Excelente agora entendi o que você queria fazer.

Sim é ótimo usar sites que quanto mais ajuda tiver melhor é

F
eu estou utilizando esse código:

private FileInputStream Imagem;

public FileInputStream getImagem() {

return Imagem;

}
public void setImagem(FileInputStream Imagem) {
    this.Imagem = Imagem;
}

eu teria que usar o private byte[ ] Imagem; também.

J

Vou adaptar o meu código para o que você quer.E testar depois te falo

Sim pois o banco só seu só está aceitando os dados em bytes[]

F

ok fico na espera então…

F

oi você esqueceu de mim com código que você tinha prometido ontem???

J

Não é que estou fazendo um programa baseado na imagem que me mostrou

F

ok então, é que eu achei que você tinha esquecido de mim…

J

Link atualizado

https://mega.nz/#F!j7IBkI7I!mOyNo8Y7bUKZkAogxWqv7g

F

e se eu quiser colocar assim olha:

tudo junto morador e imagem no mesmo código.

J

Pode,mas não é aconselhável pois pesaria muito a tabela e não redimensionaria o banco de dados

Se seu sistema for só pra você faça do jeito que achar melhor

F

ok

J

Se conseguiu resolver não esqueça de marcar o tópico como resolvido.Para marcar a solução é só pegar e clicar na checkbox verde é editar o título do tópico colocando [RESOLVIDO] antes do título do tópico

F

mais deixa eu te fazer um mais uma pergunta.

o que eu coloco no lugar do dao, porque esta dando erro.

J

o dao ai é o pacote.Você pode remover isso

F

ok obrigada

Criado 25 de novembro de 2019
Ultima resposta 28 de nov. de 2019
Respostas 37
Participantes 3