日期:2014-05-18  浏览次数:20807 次

java 怎样读取 oracle blob数据
oracle blob字段中存储的是图片,请问怎样用java 代码读取并在jsp上显示 
表字段 id int 、name varchar2 、content blob 
在此谢过!


------解决方案--------------------
Java code

package test;

import java.sql.*;   
import java.io.*;   
import oracle.sql.*;   
public class WriteBlob {   
  
  public static void main(String[] args){   
  
    try {   
      DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); 
      Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhos:1251:test","test","test"); 
      conn.setAutoCommit(false);
  
      BLOB blob = null;   
  
      PreparedStatement pstmt = conn.prepareStatement("insert into javatest values(?,empty_blob())");   
      pstmt.setString(1,"test.jpg");
      pstmt.executeUpdate();
      pstmt.close();
  
      pstmt = conn.prepareStatement("select content from javatest where name= ? for update");
      pstmt.setString(1,"test.jpg");
      ResultSet rset = pstmt.executeQuery();
      if (rset.next()) blob = (BLOB) rset.getBlob(1);  
  
      String fileName = "d:/2475.jpg";   
      File f = new File(fileName);
      FileInputStream fin = new FileInputStream(f);  
      System.out.println("file size = " + fin.available());  
  
      pstmt = conn.prepareStatement("update javatest set content=? where name=?");  
  
      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);
      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());  
    }   
  }   
  
}

------解决方案--------------------
mark
------解决方案--------------------
循环记录集,取出相应字段的值,在打印在表格内,关于解析大字段可以专门写一个方法,需要显示大字段的时候就调用那个解析方法。
具体解析可以参照楼上的解析方法。
另外如果大字段存储的是图片的话是不能直接在表格中显示的,必须专门做一个页面,在那个页面上解析图片,再把显示位置的地方加载解析图片的
页面,才能显示。