Como Salvar foto do Netbeans para o Mysql

Tenho um problema, sou novato no java/netbeans e preciso adicionar uma imagem na lbl_foto e em seguida salva na coluna foto do banco de dados. um colega mais avançado me ajudou no código ele optou fazer da seguinte maneira clicar duas vezes no lbl_foto, que sem seguida abre a caixa para localizar a imagem, ela é redimensionada para o tamanho da lbl_foto e salva na pasta fotos que criei dentro do projeto já renomeada para evitar arquivos com o mesmo nome. Até ai tudo bem mas em seguida não conseguimos seguir pois no modelo que ele fez e funcionou ele utilizou uma tabela (jtable) que quando a linha é selecionada é salvo o arquivo renomeado na coluna foto da tabela, e no meu projeto não uso tabela apenas os campos a serem preenchidos. Acredito que falta apenas a parte do código que salva a imagem da pasta fotos para a coluna foto do banco de dados. Informações adicionais a coluna foto do banco de dados é do tipo blob. Antecipo meus agradecimentos
o código segue abaixo:

private void lbl_fotoMouseClicked(java.awt.event.MouseEvent evt) {

    if (evt.getClickCount() == 2) {
        JFileChooser fc = new JFileChooser();
        fc.setFileFilter(new javax.swing.filechooser.FileFilter() {

            @Override
            public boolean accept(File f) {

                String name = f.getAbsolutePath();
                return name.endsWith("jpg") | name.endsWith("png") | name.endsWith("bmp") | f.isDirectory();
            }

            @Override
            public String getDescription() {
                return "imagem";
            }
        });

        if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {

            String path = fc.getSelectedFile().getAbsolutePath();
            ImageIcon icone1 = new ImageIcon(path);
            Image img = icone1.getImage().getScaledInstance(lbl_foto.getWidth(), lbl_foto.getHeight(), Image.SCALE_DEFAULT);
            lbl_foto.setIcon(new ImageIcon(img));

            String nomeImagem = System.currentTimeMillis() + ".jpg";
            File novaImagem = new File("./fotos/" + nomeImagem);

            BufferedImage bi = new BufferedImage(lbl_foto.getWidth(), lbl_foto.getHeight(), BufferedImage.TYPE_INT_RGB);
            Graphics2D g2d = bi.createGraphics();
            g2d.drawImage(img, null, null);
            g2d.dispose();

            try {
                ImageIO.write(bi, "jpg", novaImagem);

            } catch (IOException ex) {

                java.util.logging.Logger.getLogger(TelaCadastro.class.getName()).log(Level.SEVERE, null, ex);
            }
            
            
        }

    }

Postar imagens no banco de dados não é a melhor das práticas. Se você olhar alguns posts aqui e no resto da internet, vai entender os motivos. Mas enfim… o que você pode fazer:

===================

Classe original

===================

public class Original {

    	private byte[] logo;

	void setLogo(String logoEndereco) {
		try {

			InputStream is = new FileInputStream(new File(logoEndereco));
			this.logo = is.readAllBytes();
			is.close();

		} catch (Exception IO) {
			System.out.println("IO: " + IO + "\n\n");
		}

	}

        byte[] getLogo() {
    	    	return this.logo;
	        }

===================

Sua classe para Data Access Object

===================

public boolean incluirOriginal(Original orig) throws Exception {

	try {
		abrirConexao();

		instrucaoSQL = conexao
				.prepareStatement("INSERT INTO tabela (logoArquivo) VALUES (?)");

		instrucaoSQL.setBytes(1, orig.getLogo()); // BLOB blob Blob bloB
		
		instrucaoSQL.execute();

		return true;
	
	} catch (Exception erro) {
		System.out.println("Erro ao incluir imagem: " + erro + "\n");
		return false;
	} finally {
		fecharConexao();
	}

}

Celio, além do que postei acima, seja bem vindo ao fórum! E, quando tiver mais experiência, lembre de ajudar os novatos aqui! :slight_smile:

1 curtida

Muito Obrigado por sua Explicação/orientação!!