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

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值