用二進制大對象類型Blob實現圖片入庫與出庫的操做

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);
        }
        
        
        
    }

}

相關文章
相關標籤/搜索