数据库字段 是 Blob类型的,用来存储文件或者图片。在程序中,我是通过参数传递进去的。通过调用存储过程 保存。             Insert Into AttachmentFile(AttachmentOID,AttachmentContent,FileType,Note)
             values(p_AttachmentOID,p_attachmentcontent,p_FileType,' ');这是其中的内容值 ,是个byte数组,现在有个问题,保存的时候,总是提示:
转换请求无法实现或不合理。但是如果文件小于10K 就能保存成功,如果大了就提示这个错误
请求高手看看。

解决方案 »

  1.   

    SQL> CREATE OR REPLACE PROCEDURE sxmis1_dump_blob (hh varchar2,poname varchar2) IS
      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过程 .然后调用吧  .没有调试 ,随便到旧资料里拷贝的
      

  2.   

    try {
               /* 插入一个空的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;
           }