package com.java;import java.sql.*; 
import java.io.*; import com.data.test.DataBase;import oracle.sql.*; 
public class Demo {   public static void main(String[] args) {     try { 
     DataBase db = new DataBase();
      Connection conn = db.getConnection();
      conn.setAutoCommit(false);       BLOB blob = null;       PreparedStatement pstmt = conn.prepareStatement("insert into test(id,image) values(?,empty_blob())"); 
      pstmt.setString(1,"fankai"); 
      pstmt.executeUpdate(); 
      pstmt.close();       pstmt = conn.prepareStatement("select image from test where id= ? for update"); 
      pstmt.setString(1,"fankai"); 
      ResultSet rset = pstmt.executeQuery(); 
     // if (rset.next()) blob = (BLOB) rset.getBlob(1);
      if (rset.next()) blob = (BLOB) ((oracle.jdbc.driver.OracleResultSet)rset).getBlob(1);
      String fileName = "d:/hua.jpg"; 
      File f = new File(fileName); 
      FileInputStream fin = new FileInputStream(f); 
      System.out.println("file size = " + fin.available());       pstmt = conn.prepareStatement("update test set image=? where id=?");       OutputStream out = blob.getBinaryOutputStream();       int count = -1, total = 0; 
      byte[] data = new byte[(int)fin.available()]; 
      fin.read(data); 
      out.write(data); 
      /* 
      byte[] data = new byte[blob.getBufferSize()];  另一种实现方法,节省内存 
      while ((count = fin.read(data)) != -1) { 
        total += count; 
        out.write(data, 0, count); 
      } 
      */       fin.close(); 
      out.close();       pstmt.setBlob(1,(Blob) blob); //这里老是会报类型转换错误为什么啊???
      pstmt.setString(2,"fankai");       pstmt.executeUpdate(); 
      pstmt.close();       conn.commit(); 
      conn.close(); 
    } catch (SQLException e) { 
      System.err.println(e.getMessage()); 
      e.printStackTrace(); 
    } catch (IOException e) { 
      System.err.println(e.getMessage()); 
    } 
  } }