情况大致是这样的:oracle数据库里面有个字段是BLOB,后台用Ibatis查询数据库,返回类型是一个Map,也就是说Map的value就是BLOB类型的值。在java代码中取BLOB的值然后写入文件时,写入的文件无法打开,取出来的BLOB的字节大小也小于文件的大小,求解。谢谢部分代码//这个BLOB类型不是java.sql里面的,是oracle.sql里面的,调试的时候显示的就是这个类型
import oracle.sql.BLOB;
BLOB attachFile = (BLOB)result.get("ATTACHFILE");
FileOutputStream out = new FileOutputStream("D:\\a.jpg");
out.write(attachFile.getBytes());
out.close();

解决方案 »

  1.   

    数据库返回的就是oracle.sql.BLOB这个类型
      

  2.   

    它不是有个getInputStream方法吗?
      

  3.   


     public static byte[] blobToBytes(BLOB blob) {  
            InputStream is = null;  
            byte[] b = null;  
            try {  
                is = blob.getBinaryStream();
                b = new byte[(int) blob.length()];  
                is.read(b);  
                return b;  
            } catch (Exception e) {  
                e.printStackTrace();  
            } finally {  
                try {  
                    is.close();  
                    is = null;  
                } catch (IOException e) {  
                    e.printStackTrace();  
                }  
            }  
            return b;  
        }  
    现在有一个转化的方法,但是对于一个700多k的文件来说大概需要3,4秒,请问下有什么方法可以提高效率吗
      

  4.   

    oracle.sql.BLOB是java.sql.Blob的实现类吧