【问题标题】:convert clob to blob将 clob 转换为 blob
【发布时间】:2012-02-29 04:02:00
【问题描述】:

我有一个将 PDF 文件存储到 CLOB 列的数据库。我想写一个java程序来检索它。仅使用 Clob java 类进行检索是行不通的。我想我需要将 CLOB 数据类型转换为 BLOB 然后写入文件。谁能告诉我如何使用 java 程序将 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代码

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

【问题讨论】:

  • 只需使用 resultSet.getString("CLOB_COLUMN") 就会拉取一个 Clob 的值。
  • 不,这似乎不起作用。我能够读取 PDF 并将其写入文件。但是当我打开 Adob​​e Reader 时说文件已损坏。我尝试读取和打开多个文件,同样的问题。我什至尝试阅读和打开 excel 文件,但同样的问题。
  • Excel 是二进制格式。您不会使用 clob 来存储 excel 文件。如果您使用错误的数据类型,您会通过专注于读取数据来混淆问题。我假设您在选择将 PDF 存储在 clob 中之前已经确定 PDF 是一种基于字符的文件格式。如果不是这种情况,您不能简单地将 clob 读取为 blob 并让它纠正问题。
  • 我在尝试读取现有表的 CLOB 列中的附件存储时遇到了同样的问题。你找到解决办法了吗?

标签: java sql oracle jdbc


【解决方案1】:

从 CLOB 到 BLOB 的转换没有帮助。 CLOB 是一种文本格式。这意味着,该数据库自动将存储的数据转换为数据库字符集。 PDF 是二进制格式,因此文件可能因存储到数据库而损坏。

需要将文件存储到 BLOB 列中。

【讨论】:

    猜你喜欢
    • 2012-10-02
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 2013-04-16
    • 2011-02-11
    • 2016-01-02
    • 2018-07-15
    • 2021-11-21
    相关资源
    最近更新 更多