别人用C#写的程序,将word文件转化为二进制流存到BLOB字段(所以到底存没存进去 没办法直接通过oracle客户端看) 我用java写程序读出来,怎么都只能读到 86个字节,所以再写入word的时候就是乱码。 以下是我的部分读数据库的代码: 
rs.getBytes("WORD_STREAM") //rs是ResultSet的实例,我想是不是因为不能直接用getByte的原因?但是别人说可以用C#写代码读取就没有问题,一下是其部分代码 FileStream   fs;               
                BinaryWriter   bw;              
                    
                int   bufferSize   =   100;    
                byte[]   outbyte   =   new   byte[bufferSize];     
                long   retval;                                   
                long   startIndex   =   0;      
                string   pub_id   =   ""; 
 
                OracleDataReader  myReader   =   oraCom.ReturnDataReader("select * from TABLE where ID="+ultraTextEditor_ID.Text.Trim());   
                while   (myReader.Read())   
                {   
                                        
                    pub_id   = myReader.GetInt32(4).ToString();                     fs   =   new   FileStream("C:\\结果"+pub_id+".doc",   FileMode.OpenOrCreate,   FileAccess.Write);   
                    bw   =   new   BinaryWriter(fs);   
                    startIndex   =   0;                       retval   =   myReader.GetBytes(2,   startIndex,   outbyte,   0,   bufferSize);   
    
                    while   (retval   ==   bufferSize)   
                    {   
                        bw.Write(outbyte);   
                        bw.Flush();                           startIndex   +=   bufferSize;   
                        retval   =   myReader.GetBytes(2,   startIndex,   outbyte,   0,   bufferSize);   
                    }   
                    bw.Write(outbyte,   0,   (int)retval   -   1);   
                    bw.Flush();   
                    bw.Close();   
                    fs.Close();   
                }   
                myReader.Close(); 另外,我用java操作byte[]写如文件是没有问题的,这个我用另外写的小程序测试过(先把某文件转化为byte[],再将该byte[]写如另一文件,没有问题,所以我想问题可能是在读取数据库方面)。请接触过相关方面的人给说说解决方法和思路。~~谢谢啦~~~~

解决方案 »

  1.   

    用getBlob方法试一试。
    Blob wordStream = rs.getBlob(i);//int i
      

  2.   

    用blob类型读取出来,然后用 blob的 getInputStream 方式从流里面读取数据。在此过程中,必须在事务里面,也就是con 不能 commit
      

  3.   

    建议你用 Hibernate, 然后映射为 byte[] 类型,他会自动替你读取的。
      

  4.   

    thank you~
    将返回类型改为Blob在做相应处理就好了:)