Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / Databases / August 2004

Tip: Looking for answers? Try searching our database.

Storing a dynamically created PDF file in a blob field

Thread view: 
Tony - 01 Aug 2004 23:52 GMT
Hi,
I have dynamically created a PDF document in memory as a FileOutputStream
Now I have to get it into a DB2 table, storing it as a BLOB. The table has a
document id,
document name, some date fields and this BLOB column that stores PDF Files.
Until now, the PDF files were read off of a disk drive. The code used was:

byte[] fileAsBytes = (byte[]) adminDocEvent.getFile();

which returns an object.
then:
"INSERT INTO WPWDB.DOC_DOCUMENT ("
+ "DOC_SUB_CAT_ID,"
+ "DOC_DOC_NM_TXT,"
+ "DOC_DOC_DESCN_TXT,"
+ "DOC_ACTIVE_TXT,"
+ "DOC_DOC_LNK_TXT,"
+ "DOC_DOC_MIME_TYP,"
+ "MODIFY_USUS_ID,"
+ "MODIFY_DT_TM)"
+ " VALUES (?,?,?,?,?,?,?,CURRENT TIMESTAMP)";

connection = getConnection();

pstmt = connection.prepareStatement(query);
pstmt.setInt(1, subCatId);
pstmt.setString(2, docName);
pstmt.setString(3, docDescription);
pstmt.setString(4, "Y");
==> pstmt.setBytes(5, fileasarray);
pstmt.setString(6, mimeType);
pstmt.setString(7, modfiedUserID);
pstmt.executeUpdate();

This is fine, if the pdf file exists as a file on a disk.
For my issue (loading a pdf file from memory) I use the following:

FileOutputStream fos = new FileOutputStream(docName);
private PdfWriter docWriter = null;
docWriter=PdfWriter.getInstance(pdfDocument, fos);
I then create the pdfDocument in memory using iText classes.
Then I try to prepare the file for the above sql stmt.

file = (Object) fos;
AdminDocDAO adminDocDAO = new AdminDocDAO();
if (adminDocDAO.addDoc(subCatId,docName,docDescription,fileAsBytes,
mimeType,modifiedUserID))

I get a casting exeception at: file = (Object) fos;

So my question is can anyone think of another approach to getting a
FileOutputStream into a format loadable in SQL using DB2???????
Thanks to any and all who can.
Murray - 02 Aug 2004 00:24 GMT
> Hi,
> I have dynamically created a PDF document in memory as a FileOutputStream
[quoted text clipped - 49 lines]
> FileOutputStream into a format loadable in SQL using DB2???????
> Thanks to any and all who can.

How about not even using a FileOutputStream? You're not writing to the
filesystem any more, so you shouldn't be using anything File-related.
There's two option I can think of:

   - You can either write directly to the Blob's OutputStream
(Blob#setBinaryStream). This probably depends on the design of your code,
since anything blob-related needs to be done inside a transaction where a db
connection is already established (if I remember correctly?)

   - Use a ByteArrayOutputStream and at the end of the PDF creation, get
the byte[] from it - ByteArrayOutputStream#toByteArray()
Tony - 04 Aug 2004 03:26 GMT
Thanks Murray,

   - Use a ByteArrayOutputStream and at the end of the PDF creation, get
the byte[] from it - ByteArrayOutputStream#toByteArray()

that was the solution.

regards.
Tony

> > Hi,
> > I have dynamically created a PDF document in memory as a FileOutputStream
[quoted text clipped - 63 lines]
>     - Use a ByteArrayOutputStream and at the end of the PDF creation, get
> the byte[] from it - ByteArrayOutputStream#toByteArray()


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.