Oracle保存大文件(Blob/Clob)

数据库中提供了两种字段类型 Blob 和 Clob 用于存储大型字符串或二进制数据(如图片)。 

 

Blob 采用单字节存储,适合保存二进制数据,如图片文件。 

Clob 采用多字节存储,适合保存大型文本数据。 

 

首先创建一个空 Blob/Clob 字段,再从这个空 Blob/Clob字段获取游标,例如下面的代码: 

 

PreparedStatement ps = conn.prepareStatement( " insert into PICTURE(image,resume) values(?,?) " ); 

// 通过oralce.sql.BLOB/CLOB.empty_lob()构造空Blob/Clob对象 

ps.setBlob( 1 ,oracle.sql.BLOB.empty_lob()); 

ps.setClob( 2 ,oracle.sql.CLOB.empty_lob()); 

 

ps.excuteUpdate(); 

ps.close(); 

 

// 再次对读出Blob/Clob句柄 

ps = conn.prepareStatement( " select image,resume from PICTURE where id=? for update " ); 

ps.setInt( 1 , 100 ); 

 

ResultSet rs = ps.executeQuery(); 

rs.next(); 

 

oracle.sql.BLOB imgBlob = (oracle.sql.BLOB)rs.getBlob( 1 ); 

oracle.sql.CLOB resClob = (oracle.sql.CLOB)rs.getClob( 2 ); 

 

// 将二进制数据写入Blob 

FileInputStream inStream = new FileInputStream( " c://image.jpg " ); 

OutputStream outStream = imgBlob.getBinaryOutputStream(); 

 

byte [] buf = new byte [ 10240 ]; 

int len; 

while (len = inStream.read(buf) > 0 ) { 

outStream.write(buf, 0 ,len); 

inStream.close(); 

outStream.cloese(); 

 

// 将字符串写入Clob 

resClob.putString( 1 , " this is a clob " ); 

 

// 再将Blob/Clob字段更新到数据库 

ps = conn.prepareStatement( " update PICTURE set image=? and resume=? where id=? " ); 

ps.setBlob( 1 ,imgBlob); 

ps.setClob( 2 ,resClob); 

ps.setInt( 3 , 100 ); 

 

ps.executeUpdate(); 

ps.close();

你可能感兴趣的:(oracle,sql,C++,c,C#)