package readclobDemo.bao; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.sql.Blob; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import jdbcutil.bao.JdbcUtil; /** 原理: 在數據庫中對Blob(二進制大對象)字段類型進行圖片的存儲和讀取操做,其中Blob做爲一個二進制文件的容器,對大數據對象進行處理; 步奏:1。在oracle數據庫中建表 CREATE TABLE "HR"."T_IMAGES" ("IMAGEID" NUMBER(*,0) NOT NULL ENABLE, "IMAGE" BLOB, CONSTRAINT "T_IMAGES_PK" PRIMARY KEY ("IMAGEID") ),其中有Blob字段類型,對大對象數據的儲存 2.本程序中定義了兩個方法,writeBlob()方法主要實現向數據庫中儲存圖片,readerBlob()方法主要實現從數據庫中讀取存入的圖片數據 3.在Main()函數中對兩個方法的聲明 */ public class WRBlobDemo { Connection conn=null; PreparedStatement pasts=null; ResultSet rs=null; public static void main(String[] args) throws IOException, SQLException { WRBlobDemo a=new WRBlobDemo(); //a.writeBlob(2); a.readBlob(2); } public void writeBlob(int id) throws IOException, SQLException{ String sql1="insert into t_images(imageid,image) values('"+id+"',empty_blob())"; String sql2="select * from t_images where imageid=? for update "; try { conn=JdbcUtil.getConnection(); conn.setAutoCommit(false);//設置爲手動提交 pasts=conn.prepareStatement(sql1); pasts.executeUpdate(); System.out.println("圖片存儲成功!"); pasts=conn.prepareStatement(sql2); System.out.println("圖片存儲成功!"); pasts.setInt(1, id); rs=pasts.executeQuery(); System.out.println("圖片存儲成功!"); if(rs.next()){ Blob blob=rs.getBlob("image"); OutputStream out=blob.setBinaryStream(1L); //得到輸出流,設置起始節點位置 InputStream in=new FileInputStream("F:\\images\\Img.jpg"); byte[] buffer=new byte[1024]; int lenth; while((lenth=in.read(buffer))>0){ out.write(buffer,0,lenth); } System.out.println("圖片存儲成功!"); in.close(); out.close(); } conn.commit(); } catch (SQLException e) { try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); }finally{ JdbcUtil.free(rs,pasts, conn); } } public void readBlob(int id) throws IOException{ String sql="select * from t_images where imageid=? "; try { conn=JdbcUtil.getConnection(); pasts=conn.prepareStatement(sql); pasts.setInt(1, id); rs=pasts.executeQuery(); if(rs.next()){ Blob blob=rs.getBlob("image"); InputStream in=blob.getBinaryStream(); //讀取返回的結果集 OutputStream out=new FileOutputStream("F:\\images\\1.jpg");//將圖片讀取存放在指定位置 byte[] buffer=new byte[1024]; int lenth; while((lenth=in.read(buffer))>0){ out.write(buffer,0,lenth); } System.out.println("圖片讀取成功!"); in.close(); out.close(); } } catch (SQLException e) { e.printStackTrace(); }finally{ JdbcUtil.free(rs,pasts, conn); } } }