【发布时间】: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_CONTENT。 DOC_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 并将其写入文件。但是当我打开 Adobe Reader 时说文件已损坏。我尝试读取和打开多个文件,同样的问题。我什至尝试阅读和打开 excel 文件,但同样的问题。
-
Excel 是二进制格式。您不会使用 clob 来存储 excel 文件。如果您使用错误的数据类型,您会通过专注于读取数据来混淆问题。我假设您在选择将 PDF 存储在 clob 中之前已经确定 PDF 是一种基于字符的文件格式。如果不是这种情况,您不能简单地将 clob 读取为 blob 并让它纠正问题。
-
我在尝试读取现有表的 CLOB 列中的附件存储时遇到了同样的问题。你找到解决办法了吗?