JDBC对大数据的处理

当我们要将一些电影,小说之类的数据存储到数据库中,需要用到oracle的大对象数据类型:Blob,Clob,其中blob为二进制的大对象,clob为字符串大对象。

   如何用JDBC来将这样的大数据存储到数据库中了?需要用到empty_blob()函数。以下是一个实现blob的完整的例子:

1:创建一张能装大数据的表:

 
  create table largetable
  ( id number(7) primary key,
    name varchar2(15) not null,
    largefile blob
);


2:选取系统中的一个文件通过JDBC存到数据库中,代码如下:

import java.sql.*;
import com.UtilTool.*;
import java.io.*;
public class BlobTest {
	public static void insertBlob(String filename){
		Connection conn=null;
		Statement stm=null;
		ResultSet rs=null;
		
		try{
			conn=ConnectTool.getConnection();//获取连接
			conn.setAutoCommit(false);//设置事务提交为手动
			stm=conn.createStatement();
        /*empty_blob:oracle 提供的单行函数,向里面插入空的blob值,随后用//IO流向里面写。*/
			String sql="insert into largeTable(id,name,largefile) values(5,'file2',empty_blob())";
			stm.executeUpdate(sql);
			sql="select largefile from largetable where id=5";
			rs=stm.executeQuery(sql);
			if(rs.next()){
				Blob blo=rs.getBlob(1);//获取该对象
				oracle.sql.BLOB bo=(oracle.sql.BLOB)blo;
				 OutputStream os=bo.getBinaryOutputStream();
				 InputStream is=new FileInputStream(filename);
				 byte[] b=new byte[1024];
				 int len=0,num=0;
				 while(true){
					 len=is.read(b);
					 if(len<=0) break;
					 os.write(b,0,len);
					 if(++num%10==0){
						 System.out.println("10 k ok");
						 }
				 }
				 is.close();
				 os.close();
				 
			}
			conn.commit();
			}catch(Exception e){
				e.printStackTrace();
			  if(conn!=null)	try{conn.rollback();}catch(Exception ee){ee.printStackTrace();}
			}finally{
				ConnectTool.releasersc(rs, stm, conn);
			}
		
	}
	public static void queryBlob(String name){
		Connection conn=null;
    	Statement stm=null;
    	ResultSet rs=null;
    	try{
    		conn=ConnectTool.getConnection();
    		conn.setAutoCommit(false);
    		stm=conn.createStatement();
    		
    		String sql="select largefile from largetable where name='"+name+"'";
    		System.out.println(sql);
    		rs=stm.executeQuery(sql);
    		if(rs.next()){
    			Blob blo=rs.getBlob(1);
    			System.out.println(blo);
    			InputStream is=blo.getBinaryStream();
    			OutputStream os=new FileOutputStream("copy.rar");
    			byte[] b=new byte[1024];
    			int len=0,num=0;
    			while(true){
    				len=is.read(b);
    				if(len<=0) break;
                    os.write(b,0,len);
                    if(++num%100==0){
                    	System.out.println("1m   ok");
                    }
    			}
    			is.close();
    			os.close();
    		}
    		conn.commit();
    	}catch(Exception e){
    		if(conn!=null)  try{  conn.rollback();} catch(Exception ee){}
    	}finally{
    		ConnectTool.releasersc(rs, stm, conn);
    	}
	}
	public  static void main(String args[]){
		System.out.println("123");
		insertBlob("E:\\123.rar");
		queryBlob("file2");
	}

}


你可能感兴趣的:(oracle,sql,jdbc,OS)