[RESOLVIDO] Salvando imagem do banco de dados

E aí galera, seguinte, eu tenho um cadastro de visitantes, ok, quando eu realizo o cadastro de um visitante, o programa envia um email para o supervisor com os dados do visitante, ou seja, gera um “Relatório”, até aí tranquilo. Ele salva a imagem bonitinho, MASSSSSSSS, quando minha internet não está funcionando ele salva os dados menos a imagem, ele não cadastra a imagem da pessoa. Alguém sabe pq ocorre isso?

Minha verificação se a foto está vazia, pra ninguém ficar sem foto:

    if (campofoto.getIcon() == null) {
        JOptionPane.showMessageDialog(null, "Por favor, escolha uma foto!");
    }

Meu insert no banco:

PreparedStatement pst = conecta.conn.prepareStatement("insert into visitantes (nome,bloco,apto,rg,veiculo,placa,cracha,dataentrada,horaentrada,datasaida,horasaida,prestador,imagem)values(?,?,?,?,?,?,?,?,?,?,?,?,?)");
                pst.setString(1, camponome.getText());
                pst.setString(2, (String) combobloco.getSelectedItem());
                pst.setString(3, (String) comboapto.getSelectedItem());
                pst.setString(4, camporg.getText());
                pst.setString(5, campoveiculo.getText());
                pst.setString(6, campoplaca.getText());
                pst.setString(7, campocracha.getText());
                pst.setString(8, dataentrada.getText());
                pst.setString(9, horaentrada.getText());
                pst.setString(10, datasaida.getText());
                pst.setString(11, horasaida.getText());
                pst.setString(12, campoprestador.getText());
                pst.setBytes(13, person_image);
                pst.executeUpdate();
                JOptionPane.showMessageDialog(rootPane, "Cadastrado com Sucesso");

Minha classe de email:

String host = "smtp.gmail.com";
            String user = "Usuário que vai enviar";
            String pass = "Senha";
            String to = "Destinatário 1";
            String to2 = Destinatário 2";
            //String to3 = "Destinatário 3";
            String from = "Email do Remetente";
            String qmEnvia = "Nome de quem envia";
            String subject = "Relátorio de Posto do "+comboporteiro.getText()+" (Entrada de Visitante)";
            String messageText = "<html><head></head><body><b>Olá Supervisor!</b><br/><br/>O Porteiro <b>"+comboporteiro.getText()+"</b> autorizou a entrada do visitante: <b>"+camponome.getText()+"</b> que foi ao: <b>"+combobloco.getSelectedItem()+"</b> - <b>"+comboapto.getSelectedItem()+"</b>.<br/><br/><b>RG:</b> "+camporg.getText()+" <br/><br/><b>Empresa:</b> "+campoprestador.getText()+" <br/><br/><b>Veículo:</b> "+campoveiculo.getText()+", <b>Placa:</b> "+campoplaca.getText()+" <br/><br/><b>Data e Hora:</b> "+campodh.getText()+"<br/><br/><br/><b>Obrigado.</b></body></html>";
            boolean sessionDebug = true;
            
            Properties props = System.getProperties();
            
            props.put("mail.smtp.starttls.enable", "true");
            props.put("mail.smtp.host", host);
            props.put("mail.smtp.port", "587");
            props.put("mail.smtp.auth", "true");
            props.put("mail.smtp.starttls.required", "true");
            
            java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
            Session mailSession = Session.getDefaultInstance(props, null);
            mailSession.setDebug(sessionDebug);
            Message msg = new MimeMessage(mailSession);
            msg.setFrom(new InternetAddress(from));
            InternetAddress[] address = {new InternetAddress(to),new InternetAddress(to2)};// new InternetAddress(to2),new InternetAddress(to3)};
            msg.setRecipients(Message.RecipientType.TO, address);
            msg.setFrom(new InternetAddress(qmEnvia));
            msg.setSubject(subject);
            msg.setSentDate(new Date());
            msg.setContent(messageText, "text/html;charset=UTF-8");
            
                        // Setando anexo
                        // FileDataSource fds = new
                        // FileDataSource("C:\\Users\\rbrasil\\Documents\\tre.pptx");
                        // msg.setDataHandler(new DataHandler(fds));
                        // msg.setFileName(fds.getName());
            
            Transport transport = mailSession.getTransport("smtp");
            transport.connect(host, user, pass);
            transport.sendMessage(msg, msg.getAllRecipients());
            transport.close();
            System.out.println("Enviado com Sucesso");

Qual estratégia você adotou para armazenar a imagem?
Salva num diretório e, apenas, o path da mesma no banco ou transforma a imagem em um array de bytes e, depois, grava no banco de dados?

1 curtida

Eu transformo em array e salvo no banco!

filename = f.getAbsolutePath();
ImageIcon imageIcon = new ImageIcon(new ImageIcon(filename).getImage().getScaledInstance(campofoto.getWidth(), campofoto.getHeight(), Image.SCALE_DEFAULT));
campofoto.setIcon(imageIcon);

try {

    File image = new File(filename);
    FileInputStream fix = new FileInputStream(image);
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    byte[] buf = new byte[1024];

    for (int number; (number = fix.read(buf)) != -1;) {
        bos.write(buf, 0, number);
    }
    person_image = bos.toByteArray();

} catch (IOException e) {
    JOptionPane.showMessageDialog(null, e);
}

Puts, foi um erro simples… Eu tava fechando o meu else no local errado, agora ele tá salvando bonitinho. Valeu pela atenção Darlan.

if (campofoto.getIcon() == null) {
                JOptionPane.showMessageDialog(null, "Por favor, escolha uma foto!");
            } else {
                PreparedStatement pst = conecta.conn.prepareStatement("insert into visitantes (nome,bloco,apto,rg,veiculo,placa,cracha,dataentrada,horaentrada,datasaida,horasaida,prestador,imagem)values(?,?,?,?,?,?,?,?,?,?,?,?,?)");
                pst.setString(1, camponome.getText());
                pst.setString(2, (String) combobloco.getSelectedItem());
                pst.setString(3, (String) comboapto.getSelectedItem());
                pst.setString(4, camporg.getText());
                pst.setString(5, campoveiculo.getText());
                pst.setString(6, campoplaca.getText());
                pst.setString(7, campocracha.getText());
                pst.setString(8, dataentrada.getText());
                pst.setString(9, horaentrada.getText());
                pst.setString(10, datasaida.getText());
                pst.setString(11, horasaida.getText());
                pst.setString(12, campoprestador.getText());
                pst.setBytes(13, person_image);
                pst.executeUpdate();
                JOptionPane.showMessageDialog(rootPane, "Cadastrado com Sucesso");
            }