2012-02-12 118 views
0

我有一个将PDF文件存储到CLOB列的DB。我想写一个Java程序来检索它。只使用Clob java类来检索是行不通的。我想我需要将CLOB数据类型转换为BLOB,然后写入文件。任何人都可以告诉我如何使用Java程序将CLOB转换为BLOB。将clob转换为blob


这里是我的数据库

DOC_ID NOT NULL VARCHAR2(60) 
DOC_NAME NOT NULL VARCHAR2(500) 
DOC_TYPE NOT NULL VARCHAR2(100) 
DOC_CONTENT CLOB() 

我发送DOC_ID得到Doc_CONTENTDOC_CONTENT将在本地驱动器上存储为doc_name


这里是我的Java代码CLOB

PreparedStatement stmnt = conn.prepareStatement("select DOC_CONTENT, DOC_NAME from documentum_docs_queue where doc_id=" + documentid); 

     ResultSet rs = stmnt.executeQuery();  
     Clob aBlob = null; 
     String filename = "filename"; 
     while (rs.next()) {    
      try {     
       aBlob = rs.getClob(1); 
       filename = rs.getString(2); 
       //System.out.println("filename-------------- " + filename); 
      } catch (Exception ex) { 
       ex.printStackTrace();     
       byte[] bytes = rs.getBytes(1); 
      } 
     } 
     rs.close(); 
     stmnt.close(); 

     File blobFile = new File("c:/temp/writer/"+filename); 
     //System.out.println("blobFile-------------- " + blobFile); 
     FileOutputStream outStream = new FileOutputStream(blobFile); 
     InputStream inStream = aBlob.getAsciiStream(); 

     int length = -1; 
     int size = (int) aBlob.length(); 
     byte[] buffer = new byte[size]; 

     while ((length = inStream.read(buffer)) != -1) { 
      outStream.write(buffer, 0, length); 
      outStream.flush(); 
     } 

     inStream.close(); 
     outStream.close(); 
+0

只需使用resultSet.getString(“CLOB_COLUMN”)将会提取Clob的值。 – 2012-02-12 02:19:32

+0

不,这似乎没有工作。我能够读取和写入PDF文件。但是,当我打开Adobe Reader说文件已损坏。我尝试阅读和打开多个文件,同样的问题。我甚至尝试阅读和打开excel文件,但同样的问题。 – 2012-02-12 02:27:53

+0

Excel是一种二进制格式。你不会使用clob来存储excel文件。如果您使用了错误的数据类型,则通过专注于读取数据来解决问题。我认为在选择将PDF存储在clob之前,您已经确定PDF是基于字符的文件格式。如果不是这样的话,你不能简单地把clob看成一个blob,然后让它解决问题。 – 2012-02-12 02:56:40

回答

0

转换为BLOB不会帮助。 CLOB是一种文本格式。这意味着,数据库会自动将存储的数据转换为数据库字符集。 PDF是一种二进制格式,所以这些文件可能被破坏存储到数据库中。

有必要将文件存储到BLOB列中。