###数据库中提供了两种字段类型 Blob 和 Clob 用于存储大型字符串或二进制数据java
###Oracle中处理BLOB/CLOB字段的方式比较特别,因此须要特别注意下面两点:sql
正确的作法是:首先建立一个空 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 " ); //db save over //此时已经完成操做。下面步骤不用也能够! // 再将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();