• Revista PROGRAMAR: Já está disponível a edição #55 da revista programar. Faz já o download aqui!

Las Vegas

Arquivo PDF

5 mensagens neste tópico

Boas comunidade,

Estou a desenvolver uma aplicação Java para desktop e utilizo como IDE o netbeans. A minha questão é a seguinte, tenho de guardar documentos(.doc), é boa pratica guardar na minha base de dados? Se for como faço para extrair esse documento na minha aplicação?

 

Desde já obrigado a todos 

 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

- é boa prática: não..nem por isso.. depende :)

- se realmente precisas de meter docs na bd.. deves usar uma coluna BLOB

 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

jsWizard,

 

Desde já obrigado. Na minha bd já tenho uma coluna BLOB e já lá tenho guardado alguns documentos. Agora não consigo extrair o conteúdo.

Sabes de alguma forma?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva.

Essa questão é daquelas que não tem propriamente resposta certa.

Depende do projeto, do objetivo, dos acessos, etc..

Guardares o documento na base de dados tem a vantagem de que quando fazes backup ou uma migração ou algo semelhante, garantes que levas todos os teus dados. Por outro lado, a BD vai engordar a cada documento que lá colocas e tem uma carga relativamente grande (em comparação com outros campos de outros tipos) no que toca à obtenção da informação (já não falo do insert porque presumo que haja um significativamente mais leituras do que escritas). Os blobs (assim como outros tipos de dados) são guardados à parte e não na tabela (isto ao nível físico de ficheiros no disco), e tê-los tem um custo adicional.
No teu caso, quando guardas isso na BD vais ter de receber o blob e convertê-lo para um ficheiro binário no disco para que depois o utilizador (ou a aplicação automaticamente) o possa abrir.

Guardares o documento fora da base de dados (tipicamente guardando o caminho num campo na tabela em detrimento de um blob) tem a vantagem de que colocas a BD mais magra, e chutas os acessos aos docs para a aplicação. Esta abordagem tem a desvantagem de que a aplicação de ter acesso ao ficheiro.
Não é o teu caso, mas em aplicações web pode-se ganhar bastante tempo se, por exemplo, o servidor web fizer cache destes ficheiros, despachando o seu acesso sem teres qualquer trabalho aplicacional.
No teu caso, quando necessitas de aceder a um ficheiro basta mandares abrir o mesmo com o comando do sistema operativo e o Word abre o doc automaticamente. Mas é necessário ter em atenção de que todos os postos onde a aplicação está instalada têm de ter acesso físico aos ficheiros. Sendo um doc presumo que estejas em Windows, pelo que esta abordagem necessita que todos os Windows onde a aplicação está instalada tenham acesso a uma pasta partilhada onde se encontram os ficheiros.

Em suma, não há propriamente uma resposta certa.
Já trabalhei com ambas as abordagens, e a decisão varia de acordo com as necessidades e especificidades dos projetos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom dia,

Antes de mais obrigado a todos.

Consegui resolver o código e está a funcionar, deixo aqui para se alguém tem alguma dúvida:

Aqui escolho o documento,

JFileChooser choose = new JFileChooser();
    choose.showOpenDialog(null);
    File f = choose.getSelectedFile();
    String filename = f.getAbsolutePath();    

    jButton1.setText(filename);
    s = filename;

 

Aqui guarda na BD: 

 String sql = "INSERT";
     File inF = new File(s);
    
     try{
            
         cm = DriverManager.getConnection(ligação BD);
         ps = cm.prepareStatement(sql);              
        
              
         FileInputStream fis = new FileInputStream(inF);
         ps.setBinaryStream(8, fis);    
         ps.executeUpdate();      
         fis.close();
         JOptionPane.showMessageDialog(this, "Dados gravados com sucesso");

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

 

Aqui vejo o documento:

String sql = "SELECT";  

  try{

      cm = DriverManager.getConnection(Ligação BD);
      ps = cm.prepareStatement(sql);
           rs = ps.executeQuery();      

      while(rs.next()){                   
          
          File pdf = new File(caminho para exportar ficheiro);
          FileOutputStream fos = new FileOutputStream(pdf);
          
          byte[] buffer = new byte[1024];
          InputStream is = rs.getBinaryStream(9);
          
          while(is.read(buffer) > 0){
               fos.write(buffer);
          }
           fos.close();
          }
         JOptionPane.showMessageDialog(null, "Ficheiro exportado com sucesso");
     }catch(Exception e){

           JOptionPane.showMessageDialog(this, e);
    }
}


 

Editado por Las Vegas
Editar código
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora