Oracle中的大字段 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();
//得到java.sql.Blob对象后强制转换为oracle.sql.BLOB
oracle.sql.BLOB imgBlob= (oracle.sql.BLOB)rs.getBlob(1 );
oracle.sql.CLOB resClob= (oracle.sql.CLOB)rs.getClob(2 );
// 将二进制数据写入Blob
FileInputStream inStream= newFileInputStream( "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();