Como colocar fotos num banco de dados MySQL?

Olá

Dúvida que me foi enviada por e-mail para ser colocada no fórum pois o usuário está esperando receber a senha do GUJ que ele esqueceu:

[color=darkblue]Realmente quero guarda-las no banco, e não o nome das fotos no banco e depois abrir o arquivo referenciado pelo nome.

Eu tenho no banco uma tabela CLIENTE com os campos NOME (varchar), ID (int) e FOTO (blob). Queria saber como faço a consulta: INSERT into CLIENTE values (‘Luca’, 1234, ???). ??? = É como fazer a inserção.

Já tenho a base rodando num servidor numa máquina remota que usa Unix e estou desenvolvendo um sistema no eclipse pra Windows e minhas fotos estão na máquina local (Pasta c:).

Quantos as conexões do banco de dados tá tudo certo. Consigo dar insert e select normalmente. Meu problema maior é com o campo FOTO.

Seria melhor usar outro tipo de variável ao invés de blob?

[/color]

[]s
Luca

[quote=Luca]Olá

Dúvida que me foi enviada por e-mail para ser colocada no fórum pois o usuário está esperando receber a senha do GUJ que ele esqueceu:

[color=darkblue]Realmente quero guarda-las no banco, e não o nome das fotos no banco e depois abrir o arquivo referenciado pelo nome.

Eu tenho no banco uma tabela CLIENTE com os campos NOME (varchar), ID (int) e FOTO (blob). Queria saber como faço a consulta: INSERT into CLIENTE values (‘Luca’, 1234, ???). ??? = É como fazer a inserção.

Já tenho a base rodando num servidor numa máquina remota que usa Unix e estou desenvolvendo um sistema no eclipse pra Windows e minhas fotos estão na máquina local (Pasta c:).

Quantos as conexões do banco de dados tá tudo certo. Consigo dar insert e select normalmente. Meu problema maior é com o campo FOTO.

Seria melhor usar outro tipo de variável ao invés de blob?

[/color]

[]s
Luca[/quote]

Caro amigo do Luca :mrgreen:, sugiro que visite este post http://www.guj.com.br/posts/list/26586.java

Olá todo mundo,

Sou iniciante em Java e o Luca me indicou este fórum e amanhã faz exatamente 1 mês que entrei nele. Estou aprendendo bastante com vocês, mas como ainda não faço muitas coisas em Java, entrava pouco e acabei esquecendo a senha…

Bom, já que consegui entrar novamente gostaria de agradecer ao Luca e ao Fábio e a todos os outros que postaram nos outros links.

Já verifiquei aqui e em outros locais e tô vendo que vai ser complicado fazer isso que eu quero. Como eu não tô conseguindo manipular o tipo BLOB no MySQL corretamente, então vou fazer o que todo mundo recomenda: gravar o nome dos arquivos nos campos da tabela!

Porém não sei como vai estar a estrutura dos arquivos no projeto (é um projeto pra uma matéria de faculdade). Eu precisaria garantir a portabilidade, de modo que se eu pegar o arquivo final e instalar na minha máquina ou na máquina do professor, as fotos estarão lá nesse arquivo, e todos poderam executar o projeto normalmente.

Como sou iniciante, não tenho a mínima idéia de como fazer isso. Se alguém souber de algum tutorial ou tópico deste fórum no qual me ajude a gerenciar essas coisas ficarei muito agradecido!

Abraços e obrigado!
Henri, o amigo do Luca! :mrgreen:

Olá,
Esse código aqui insere corretamente.

import java.lang.*;
import java.io.*;
import java.sql.*;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.ImageIcon;
import javax.media.jai.PlanarImage;
import javax.media.jai.JAI;
import com.sun.media.jai.codec.*;
import javax.media.jai.KernelJAI;
import java.awt.image.BufferedImage;
import java.awt.image.renderable.ParameterBlock;
import java.awt.Graphics;
import javax.swing.JFrame;

public class Main {
    
    /** Creates a new instance of Main */
    public Main() {
        // construtor
		
	// conexao ao banco de dados em MySQL
	long num = 1;
	try{
		Connection con = null;
		PreparedStatement pstmt = null;
		Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
		con=DriverManager.getConnection("jdbc:odbc:rpgsystem");
		//stmt = con.createStatement();
		File arquivo = new File(this.dirInput+"piscina.bmp");
		FileInputStream inputStream = new FileInputStream(arquivo);
		pstmt = con.prepareStatement("INSERT INTO imagem(nome,arquivo) VALUES (?,?)");
		//String sql = "INSERT INTO imagem (nome,arquivo) VALUES ('piscina.bmp',LOAD_FILE('"+dirInput+"piscina.bmp'))";
		//String sql = "DELETE FROM imagem WHERE nome = 'piscina.bmp'";
		pstmt.setString(1, arquivo.getName());
		pstmt.setBinaryStream(2,inputStream, (int) arquivo.length());
		pstmt.executeUpdate();
		pstmt.close();
		con.close();
	}catch(SQLException e){ System.out.print("Comando invalido!");}
	catch(Exception ex){ System.out.println("Nao achou arquivo!");}
		
	try{
		Connection con = null;
		PreparedStatement stmt = null;
		Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
		con=DriverManager.getConnection("jdbc:odbc:rpgsystem");
		stmt = con.prepareStatement("SELECT nome,arquivo FROM imagem");
		//String sql = "SELECT arquivo FROM imagem WHERE nome = 'piscina.bmp'";
		//String sql = "DELETE FROM imagem WHERE nome = 'piscina.bmp'";
		ResultSet rs = stmt.executeQuery();
		System.out.println("Yes!");
		while (rs.next()){
			//this.file = rs.getString(1);
                    String namen = rs.getString(1);
                    System.out.println(namen);
                    //Blob blob = rs.getBlob("arquivo");
                    System.out.println("Yes!2");
                    //ImageIcon imageIcon = new ImageIcon(blob.getBytes(1, (int)blob.length()));
		}
		stmt.close();
		con.close();
	}catch(SQLException e){ System.out.println("Comando invalido!");}
	catch(Exception ex){ System.out.println("Nao achou arquivo!");}
		
	/*this.createBufferedImages();
	this.setUpJFrame();
		
	this.writeImageAsTiff();*/
    }

    /*private void createBufferedImages() {
	ParameterBlock pb = new ParameterBlock();
		
	pb.add(this.dirOutput+this.file);
	try{
		image = JAI.create("fileload", pb);
	}catch(IllegalArgumentException ex){System.out.println(ex.getMessage());}
	drawImage();
    }
	  
    private void setUpJFrame() {
	JFrame myFrame = new JFrame("Imagem Recuperada do Banco");
	myFrame.setSize(buffImage.getWidth(),buffImage.getHeight());
	myFrame.getContentPane().add(this);
	myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	myFrame.setVisible(true);
    }
        
    private void writeImageAsTiff(){
	ParameterBlock pb = new ParameterBlock();
	pb.addSource(image);
	pb.add("target.tiff");
	pb.add("tiff");
	pb.add(null);
	pb.add(1);
	image = JAI.create("filestore", pb, null);
    }
	
    private void drawImage() {
	buffImage = image.getAsBufferedImage();
	Graphics g = buffImage.createGraphics();
	g.drawImage(buffImage, 0, 0, null);
	g.dispose();
	repaint();
    }
	
    public void paintComponent(Graphics g) {
	g.drawImage(buffImage, 0, 0, this);
    }
     */   
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
	// metodo principal
	Main App = new Main();
		
	System.exit(0);
    }
  
    private BufferedImage buffImage;
    private PlanarImage image;
    private String dirInput = "C:/Programas/";
    private String dirOutput = "C:/Temp/";
    private String file;
}

Só que o problema que eu tenho é na recuperação da imagem. Ele recupero um arquivo .bmp, do memso tamanho, mas não é possível visualizar.
Se alguém souber resolver isso, por favor respondam, ok?
Obrigada.

[color=red]Mensagem do moderador: Ao colocar codigo utilize as tags [ code ] [ /code ][/color]

Olá cjanayna,

Obrigado por responder!

O meu problema era pra resolver um trabalho de escola. Já entreguei e deu certo, porém eu não coloquei as imagens pois tive que implementar outras coisas e fazer relatórios e o grupo resolveu descartar essa parte do projeto pois era menos importante.

Eu dei umas fuçadas em alguns materiais na internet, não cheguei a implementar, mas eu li bastante coisa desse site e acho que ele tb resolveria este problema:

Project: Building a Web Photo Gallery
http://www.informit.com/guides/content.asp?g=java&seqNum=166&rl=1

Não sei se vai lhe ajudar, mas por via das dúvidas mandei o link!

Atualmente eu dei uma parada com Java, mas mesmo assim eu ainda quero implementar um programa em Java que consega manipular as fotos num banco de dados MySQL inserindo as fotos no próprio banco. Só que eu ainda preciso estudar muita coisa mas tô sem muito tempo pra isso ultimamente.

Muito obrigado pro postar o código. Vou estuda-lo também e se conseguir alguma informação que resolva o problema da recuperação de imagens eu mando um post pra você!

Abraços e obrigado,
Henri

Olá cjanayna!

Editado por Jesus.

Obrigado, consegui achar estava dentro da pasta lib,
do JMF.

Jesus