2012-03-17 21 views
0

私は、ユーザーがデータをアップロードするJSFフォームを持っています。今は、アップロードされたファイル(pdf、doc、xlsなど)をデータベースに保存する必要があります。今はもちろん、このファイルは後で査読者によって読み込まれます。これを行う最善の方法は何ですか?シリアライゼーション?はいの場合は、特定の場所を見てください。JDBCを使用してオブジェクト(ドキュメントファイル)をSQLに格納する

私は、従業員のオブジェクトや建物などのユーザー作成オブジェクト(私が慣れ親しんでいるもの)を扱うことが最も多いことを知りましたが、ファイルドキュメントをオブジェクトとして表現する方法はわかりません。バイナリ文字列を取得するためにinputReaderに渡すべきかのように...

おかげで、すべてでシリアライズする必要はこちら

+0

...ではなく、データベース内の実際のコンテンツが、それはファイルシステム上で生きることを可能にする...私は通常、より多くのクリーナーをaproach見つける – jsshah

答えて

1

ありません - ファイルは、(単純化)だけで名前とその中のデータです。だから、タイプVARCHAR(または何でも)の名前フィールドとタイプIMAGEのデータフィールド、またはあなたのデータベースがBLOBに使用するタイプのフィールドが必要です。

PreparedStatement.setBlob(または可能であればPreparedStatement.setBinaryStream)を使用して、データをアップロードすることができます(違いはわかりません)。

+0

うわー私は働くことを願って...それは簡単だと思われますが、私はその仕事をしようとします:)スナップ返信のおかげで仲間! :D –

1

データベースにバイナリ文書を挿入するには、BLOB型(バイナリラージオブジェクト)の列を持つテーブルが必要です。

書くためのスケルトン:

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(); 

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

私はまだ解決策をテストしています... –

関連する問題