在Oracle中
假定有一张表
lob_table(blob_col Blob, clob_col clob)
假定你创建了Statement Object, stmt// Select LOB locator into standard result set.
ResultSet rs =
   stmt.executeQuery ("SELECT blob_col, clob_col FROM lob_table");
while (rs.next())
{
   // Get LOB locators into Java wrapper classes.
   java.sql.Blob blob = (java.sql.Blob)rs.getObject(1);
   java.sql.Clob clob = (java.sql.Clob)rs.getObject(2);
   (...process...)
}输出强制转换为java.sql.Blob 和 java.sql.Clob,
你接下来可以强制转换成oracle.sql.BLOB 和 CLOB,以便利用 oracle.sql.* 中class的扩展功能,你可以这样转换   // Get LOB locators into Java wrapper classes.
   oracle.sql.BLOB blob = (BLOB)rs.getObject(1);
   oracle.sql.CLOB clob = (CLOB)rs.getObject(2);
   (...process...)

解决方案 »

  1.   

    一般来说,大对象存储是把文件存到数据库中,当然也可以内存中的超大字符串。对于象图片这样的文件当然是用二进制存储,这里有很多误区,网络上的教程99%都是行不通的,连SUN自己的文档都一直错误,虽然错误很小。按说二进制文件应该存为BLOB类型,但JBDC2并不能直接对BLOB存入二进制文件,如果你这样做,会得到一个IO而不是SQL异常,为此花了我近两个小时才弄清楚。   如果要把一个二制文件存入ORACLE,用标准的JDBC你就要用LONG ROW类型: create table tb_file(name varchar(20),detail long row);   然后 File file = new File("aaa.gif"); 
    int fileLength =(int) file.length(); 
    InputStream fin = new FileInputStream(file); 
    PreparedStatement pstmt = con.prepareStatement("insert into tb_file values('aaa.gif',?)"); 
    pstmt.setBinaryStream (1, fin, fileLength); 
    pstmt.executeUpdate();   如果你一定要用BLOB存储,你就必须用ORACLE自己的方法: create table tb_file(name varchar(20),detail BLOB); 
    con.setAutoCommit(false); 
    stmt.executeUpdate("insert into tb_file values('aaa.gif',empty_blob())");   下面必须SELECT得到BLOB的对象再向里写: rs = stmt.executeQuery("select detail from tb_file where name='aaa.gif' for upfdate" ); 
    if(rs.next()) 

    Blob blob = rs.getBlob(1); 
    BinaryOutputStream out = ((oracle.sql.BLOB)blob).getBinaryOutputStream(); 
    byte[] b = new byte[((oracle.sql.BLOB)blob).getBufferSize]; 
    InputStream fin = new FileInputStream(file); 
    int len = 0; 
    while( (len = fin.read(b)) != -1) 
    out.write(b,0,len); 
    fin.close(); 
    out.close(); 
    con.commit(); 
    }   同样读取数据你并不能象LONG ROW那样 InputStream in = rs.getBinaryInputStream("detail");   而要 Blob blob = rs.getBlob("detail"); 
    in = blob.getBinaryStream(); 
      

  2.   

    下边是oracle一个处理clob的例子http://otn.oracle.com/sample_code/tech/java/sqlj_jdbc/files/advanced/LOBSample/LOBSample.java.html