[size=11px]如题,最近做一个项目,需求要求上传文件不但要放到服务器的上传文件夹中,在数据库中相应的表中的字段里也要放进该文件的2进制流。暂时忽略文件过大的情况。怎么将上传的文件2进制流写进ORACLE数据中的BLOB字段。[/size]

解决方案 »

  1.   

    用的什么编程语言?找对应的接口就行了。java jdbc读写blob的示例,网上有很多。
      

  2.   

    没有用到JDBC,数据层用的是hibernate框架~我找到一个例子里面报错~因为用的是ORACLE的数据库,里面有一步将Java.sql.Blob转换为oracle.sql.BLOB,但是运行的时候报无法强制转换的错误
      

  3.   

    没有用到JDBC,数据层用的是hibernate框架~我找到一个例子里面报错~因为用的是ORACLE的数据库,里面有一步将Java.sql.Blob转换为oracle.sql.BLOB,但是运行的时候报无法强制转换的错误
    ------------------------------------当然不能转,直接用byte[] 定义属性
      

  4.   

    楼上的说的也不是很清楚,如下示例代码应该可以
    只要将java.sql.Blob转化成SerialBlob类型,就能强转为oracle.sql.blob了
    Session   s   =   null;   
      byte[]   buffer   =   new   byte[1]; 
      buffer[0]   =   1; 
      try   { 
       SessionFactory   sf   =   HibernateSessionFactory.getSessionFactory(); 
       s   =   sf.openSession();   
       Transaction   tx   =   s.beginTransaction(); 
       Cat   c   =   new   Cat(); 
       c.setName( "Robbin "); 
       c.setImage(Hibernate.createBlob(buffer)); 
       s.save(c); 
       s.flush(); 
       s.refresh(c,   LockMode.UPGRADE);   
                 SerialBlob sBlob=(SerialBlob)c.c.getImage();
       BLOB   blob   =   (BLOB)  sBlob;
       OutputStream   out   =   blob.getBinaryOutputStream();   
       String   fileName   =   "oraclejdbc.jar "; 
       File   f   =   new   File(fileName); 
       FileInputStream   fin   =   new   FileInputStream(f);   
       int   count   =   -1,   total   =   0; 
       byte[]   data   =   new   byte[(int)fin.available()]; 
       fin.read(data); 
       out.write(data);   
       fin.close(); 
       out.close(); 
       s.flush(); 
       tx.commit();    }   catch   (Exception   e)   { 
       System.out.println(e.getMessage()); 
      }   finally   { 
       if   (s   !=   null) 
       try   { 
        s.close(); 
       }   catch   (Exception   e)   {} 
      }   
     }