2012-03-17 2 views
0

J'ai un formulaire JSF dans lequel l'utilisateur télécharge des données. Maintenant, j'ai besoin de stocker le fichier téléchargé (pourrait être pdf, doc, xls, etc) dans la base de données. Maintenant, bien sûr, ce fichier sera chargé plus tard par les réviseurs. Une idée quelle est la meilleure façon de le faire? Sérialisation? et si oui, où spécifique je devrais regarder?Stockage d'objets (fichiers de documents) dans SQL à l'aide de JDBC

J'ai vu que la plupart des sérialisations traitaient des objets créés par l'utilisateur (ceux que je connais) comme les objets employés, les bâtiments, etc. Mais je ne sais pas comment représenter le document comme objet. comme dans quoi passer à inputReader pour obtenir la chaîne binaire ...

Merci,

+0

comment sur le stockage des métadonnées sur le fichier dans la base de données ... mais le contenu réel pas dans la base de données, mais le laissant en direct sur le système de fichiers ... Je trouve généralement que l'approche beaucoup plus propre – jsshah

Répondre

1

Il n'y a pas besoin de sérialisation du tout ici - un fichier est (juste un) simplistes nom et les données qu'il contient. Vous avez juste besoin d'un champ de type VARCHAR (ou autre) et de champs de type IMAGE ou de tout autre type de blobs.

Vous pouvez utiliser PreparedStatement.setBlob (ou potentiellement PreparedStatement.setBinaryStream, j'admettrai volontiers que je ne suis pas confiant dans les différences) pour télécharger les données.

+0

wow j'espère que cela fonctionne ... Je vais essayer de faire ce travail bien qu'il semble assez simple :) merci compagnon pour la réponse rapide! : D –

1

Pour insérer un document binaire dans une base de données, vous avez besoin d'une table avec une colonne de type BLOB (objet binaire volumineux).

Un squelette à écrire:

File f = new File("your.doc") 
FileInputStream fis = new FileInputStream(); 
PreparedStatement pstmt = dbCon.prepareStatement("insert into docs(doc) values(?)"); 
pstmt.setBinaryStream(1, fis, (int) l.length()); 
pstmt.executeUpdate(); 
pstmt.close(); 

à lire à partir du DB:

Statement st = dbCon.createStatement(); 
    ResultSet rs = st.executeQuery("select doc from docs where ..."); 
    if(rs.next()) 
    { 
    InputStream  is = rs.getBinaryStream("doc"); 
    FileOutputStream fos = new FileOutputStream("filename"); 
    // copy is to fos 

    } 
    rs.close(); 
    st.close(); 
+0

Je suis encore en train de tester la solution ... –

Questions connexes