我现在用JDBC连接上了数据库,读出了是其中的BLOB字段得到一个oracle.sql.BLOB对象,原来是一个图象文件,我现在怎么把BLOB对象还原成图象啊!!!各位高手,请帮帮我啊,我困在这地方好长时间拉!!!!
   先谢拉!!

解决方案 »

  1.   

    看了下面的程序就知道了import java.io.*;
    import java.util.*;
    import java.sql.*;
    import oracle.jdbc.driver.*;
    import java.text.*;
    //
    // @author: guo chang guo
    // @time: 2003 08 17
    //
    // this program shows how to put a very big bytes array into oracle table(long raw)
    // you can not use PreparedStatement's method setBytes, because setBytes can not
    // support very big bytes array, you must use PreparedStatement's method setBinaryStream.
    // if you want to use this method, you must transfer your bytes array into inputstream,
    // in this example, we use ByteArrayInputStream which can be constructed by a bytes array. 
    //
    // @copyright(R) cvicse
    ////
    //the definition of the oracle table :CREATE TABLE  bin_data (name VARCHAR(30),data long raw ).
    //you can not define the table: CREATE TABLE  bin_data (name VARCHAR(30),data blob )
    ////
    //we have test this program in oracle 9.2 the file size is 31M
    //public class test
    {
     public static void main(String args[]) throws java.io.IOException,java.sql.SQLException
     {
      try 
      {
                Class.forName("oracle.jdbc.driver.OracleDriver");
        }
        catch (java.lang.ClassNotFoundException e) 
        {
                System.err.print("ClassNotFoundException: " + e.getMessage());
        }  try
      {
       //open a file, put the content of file into a bytes array
       
       File files = new File("c:\\temp\\jdk140.chm");
       FileInputStream fis=new FileInputStream(files);
        System.out.println(files.getName());
       System.out.println((int)files.length());         byte[] fl = new byte[(int)files.length()];
       System.out.println(fl.length);
       fis.read(fl);
      
      //use this bytes array to construct a InputStream  
      
             ByteArrayInputStream  kk = new ByteArrayInputStream(fl) ;   
      //connect the oracle database
      
           Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@eaiserver01:1521:orcl", "system", "admin");   
       PreparedStatement ps = conn.prepareStatement("INSERT INTO bin_data (name,data)" +"VALUES (?, ?)");   
      //set parameters
      
       ps.setString(1,files.getName());
          ps.setBinaryStream(2, kk,(int)files.length());
       
       
      //execute
          
       ps.executeUpdate();
       fis.close();
       ps.close();
       
      // read from the table
       
       int bytesRead = 0;
       int byteSum = 0;
       byte[] buffer = new byte[8 * 1924];
       FileOutputStream fis2 = new FileOutputStream("c:\\temp\\hi.chm");   
       PreparedStatement ps2 = conn.prepareStatement(  "select data from bin_data");
       ResultSet rs = ps2.executeQuery();
       if (rs != null) 
       {
        while(rs.next()) 
        {
         InputStream is = rs.getBinaryStream(1);
         while ((bytesRead = is.read(buffer)) != -1)
          {
                   byteSum += bytesRead;
                   fis2.write(buffer, 0, bytesRead);
          }
          fis2.close( );
        }
       rs.close( );
       }
       ps2.close( );
    }
    catch(Exception e)
      {
       System.out.println("errror :"+e.toString() );
       e.printStackTrace();
       
      }
    }
    }