Las Vegas Posted January 11, 2017 at 09:23 AM Report Share #601929 Posted January 11, 2017 at 09:23 AM 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 Link to comment Share on other sites More sharing options...
jsWizard Posted January 11, 2017 at 10:35 AM Report Share #601934 Posted January 11, 2017 at 10:35 AM - é boa prática: não..nem por isso.. depende 🙂 - se realmente precisas de meter docs na bd.. deves usar uma coluna BLOB Link to comment Share on other sites More sharing options...
Las Vegas Posted January 11, 2017 at 10:56 AM Author Report Share #601935 Posted January 11, 2017 at 10:56 AM 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? Link to comment Share on other sites More sharing options...
M6 Posted January 12, 2017 at 10:34 AM Report Share #601963 Posted January 12, 2017 at 10:34 AM 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. 10 REM Generation 48K! 20 INPUT "URL:", A$ 30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50 40 PRINT "404 Not Found" 50 PRINT "./M6 @ Portugal a Programar." Link to comment Share on other sites More sharing options...
Las Vegas Posted January 25, 2017 at 12:19 PM Author Report Share #602158 Posted January 25, 2017 at 12:19 PM (edited) 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); } } Edited January 25, 2017 at 12:21 PM by Las Vegas Editar código Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now