数据库字段 是 Blob类型的,用来存储文件或者图片。在程序中,我是通过参数传递进去的。通过调用存储过程 保存。 Insert Into AttachmentFile(AttachmentOID,AttachmentContent,FileType,Note)
values(p_AttachmentOID,p_attachmentcontent,p_FileType,' ');这是其中的内容值 ,是个byte数组,现在有个问题,保存的时候,总是提示:
转换请求无法实现或不合理。但是如果文件小于10K 就能保存成功,如果大了就提示这个错误
请求高手看看。
values(p_AttachmentOID,p_attachmentcontent,p_FileType,' ');这是其中的内容值 ,是个byte数组,现在有个问题,保存的时候,总是提示:
转换请求无法实现或不合理。但是如果文件小于10K 就能保存成功,如果大了就提示这个错误
请求高手看看。
2 l_file UTL_FILE.FILE_TYPE;
3 l_buffer RAW(32767);
4 l_amount BINARY_INTEGER := 32767;
5 l_pos INTEGER := 1;
6 l_blob BLOB;
7 l_blob_len INTEGER;
8 BEGIN
9 SELECT cbzzxx
10 INTO l_blob
11 FROM yd_pjxx
12 WHERE hh= hh;
13
14 l_blob_len := DBMS_LOB.GETLENGTH(l_blob);
15 l_file := UTL_FILE.FOPEN('BLOBDIR',poname,'wb', 32767);
16
17 WHILE l_pos < l_blob_len LOOP
18 DBMS_LOB.READ (l_blob, l_amount, l_pos, l_buffer);
19 UTL_FILE.PUT_RAW(l_file, l_buffer, TRUE);
20 l_pos := l_pos + l_amount;
21 END LOOP;
22
23 UTL_FILE.FCLOSE(l_file);
24
25 EXCEPTION
26 WHEN OTHERS THEN
27 IF UTL_FILE.IS_OPEN(l_file) THEN
28 UTL_FILE.FCLOSE(l_file);
29 END IF;
30 RAISE;
31 END;
32 /以上建立blob过程 .然后调用吧 .没有调试 ,随便到旧资料里拷贝的
/* 插入一个空的BLOB对象 */
stmt.executeUpdate("INSERT INTO BLOB_TEST VALUES ('2', EMPTY_BLOB())");
/* 查询此BLOB对象并锁定 */
ResultSet rs = stmt.executeQuery("SELECT BFIELD FROM BLOB_TEST WHERE ID='2' FOR UPDATE");
while (rs.next()) {
/* 取出此BLOB对象 */
oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("BFIELD");
/* 向BLOB对象中写入数据 */
BufferedOutputStream ot = new BufferedOutputStream(blob.getBinaryOutputStream());
BufferedInputStream in = new BufferedInputStream(new FileInputStream("F:\\20.jpg"));
int c;
while ((c=in.read())!=-1) {
ot.write(c);
}
in.close();
ot.close();
}
/* 正式提交 */
conn.commit();
} catch (Exception ex) {
/* 出错回滚 */
conn.rollback();
throw ex;
}