Recuperar arquivo armazenado no MySQL

8 respostas
Edureis

Estou desenvolvendo meu TCC em Jave e preciso recuperar arquivos armazenados no MySQL e grava-los no HD escolhendo o local, tipo download, alguem pode me ajudar, estou a dias procurando na Web e não encontro este código.

Obrigado.

8 Respostas

luxu

Uai, entoum faça igual vc gravou lá, post ai como vc gravou pra vermos!

J

Um conselho> Java é orientado a objetos, então se possível utilize Hibernate, você não terá preocupação com banco de dados, e sim com suas classes. Você ganha tempo e desempenho.
Imagine persitir um objeto do tipo x, em uma tabela que é do tipo y?? O hibernate já faz o serviço pesado para você!

Edureis

Faço esta chamada:

JFrame f = new p800_arquivo.BibTCC_c800_Arquivo();
					f.setVisible(false);
			        
			        f.addWindowListener(new WindowAdapter() {
			        		public void windowClosed(WindowEvent e) {
			        			System.out.println("Exit");
			        			System.exit(0);}});

Aqui gravo:

package p800_arquivo;
import java.awt.*;

import java.awt.event.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import javax.servlet.ServletContext;
import javax.swing.*;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;

public class BibTCC_c800_Arquivo extends JFrame {
    JFileChooser chooser = new JFileChooser();

	static p900_jdbc.BibTCC_c900_Jdbc jdbc = new p900_jdbc.BibTCC_c900_Jdbc();
    
	p800_arquivo.BibTCC_c801_Arquivo arquivo = new p800_arquivo.BibTCC_c801_Arquivo();
	
    public BibTCC_c800_Arquivo() throws FileNotFoundException, SQLException {
   
    	System.out.println("	Entrou no c800_Arquivo");
    	//System.out.println("		id_tcc: "+ arquivo.getId_tcc());
    	
    	int state = chooser.showOpenDialog(null);
    	File fileC = chooser.getSelectedFile();
    	
    	if (fileC != null && state == JFileChooser.APPROVE_OPTION) {
    		
    		//JOptionPane.showMessageDialog(null, "Arquivo selecionado: "+ fileC.getPath()+" id "+arquivo.getId_tcc());
    		File file = new File(fileC.getPath());   
    	    FileInputStream fileIn = new FileInputStream(file);   
    	               
    		//execução de código jdbc
    		jdbc.executaJdbc();
    		
			String sql = "insert into tb_arquivo(id_tcc, ar_arquivo) values (?,?)";   
    	    PreparedStatement query = (PreparedStatement) jdbc.con.prepareStatement(sql);   
    	    query.setInt(1, arquivo.getId_tcc());
    	    query.setBinaryStream(2, fileIn, (int)file.length());   
    	    query.executeUpdate();  

		} else if (state == JFileChooser.CANCEL_OPTION) {
			JOptionPane.showMessageDialog(null, "Seleção de Arquivo Cancelado");
		}  	
    }
}

Ai se abre o box e escolho o arquivo que é armazenado no Mysql sem problema.

Quanto au Hibernate, sou novissimo em Java e estou na forca para terminar o TCC, que é uma biblioteca para armazenar TCCs, tenho 20 dias para terminar, e como já consegui gravar no MySQL. . .

E

dá uma olhada nesse artigo: http://javafree.uol.com.br/artigo/851262/Manipulando-campos-BLOB-e-CLOB-com-JDBC.html

Dá uma estudada também no FileOutputStream.

Edureis

Obrigado pela atenção, dei uma olhada, mais pela minha urgência, o que preciso é de um código que faça um select no banco e abra um box para que possa gravar o arquivo onde for escolhido, será que alguem tem um?

E

20 dias para vc fazer isso dá e sobra. Explica melhor a dúvida, do jeito que está falando parece que quer que façamos esse código inteiro para você.

Explica o que você sabe fazer dessa parte e o que está faltando para vc conseguir fazer. Código inteiro e tão específico assim ninguém vai te dar.

um exemplo que talvez te ajude:

InputStream is; 
            OutputStream os;

            // Código para vc inicializar o is e o os. No caso, você vai buscar o is da base de dados e o os seria um FileOutputStream. 

            byte[] byteFile = new byte[1024];
            while ((bytes = is.read(byteFile)) != -1) {   
                os.write(byteFile, 0, bytes);
                os.flush();
            }
Edureis

Minha tabela é tb_arquivo, tenho que pesquisar o id_tcc e recuperar o arquivo que esta armazenado no campo LONGBLOB ar_arquivo, então grava-lo, selecionando uma pasta no computador com o nome que esta no campo ar_nome.

É tipo um donwload, será que não tem um código padrão para isto?

E

cara, não é tão complicado assim, separa em passos menores e vc vai ver, com as coisas que eu falei, o que estou falando.

  1. Você sabe abrir um JFileChooser (estou afirmando, vc tem isso no código)
  2. Você sabe fazer um select no banco de dados?
  3. Você sabe fazer o select através de JDBC?
  4. Te mostrei como trabalhar com OutputStream e InputStream.
Criado 27 de outubro de 2011
Ultima resposta 27 de out. de 2011
Respostas 8
Participantes 4