如何使用jdbc在oracle 10g中插入大型clob数据(> 4K字符)

时间:2011-07-13 19:06:27

标签: java oracle jdbc oracle10g clob

你能告诉我如何使用jdbc插入clob数据吗?我使用的是oracle10g数据库。

我能够插入长度<1的clob数据。 4000使用以下2种方法

1

tempClob.length()<4000){
   pstmnt.setClob(colNumber, tempClob );
}

2

tempClob.length()<4000){
   Reader reader =tempClob.getCharacterStream();
   pstmnt.setClob(colNumber, tempClob );
   pstmnt.setCharacterStream(colNumber, reader, new Long(tempClob.length()).intValue());
}

当clob数据的长度很大,例如abt 29k时,这两种方法都会失败。

4 个答案:

答案 0 :(得分:1)

这适用于oracle 11g jdk 5

tempClob.length()<4000){
    byte[] bytes = tempClob.getBytes();
    pstmnt.setCharacterStream(2, new StringReader(new String( bytes  )), bytes.length);
}

答案 1 :(得分:0)

如果您使用的是Oracle 11g,则需要此处的驱动程序: http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html

ojdbc5.jar for JDK 1.5 要么 ojdbc6.jar for JDK 1.6

jar将需要包含在类路径中。

令人惊讶的是,Oracle 11g可以存储8到128 Tera字节的Clobs。

答案 2 :(得分:0)

这是我发现的som代码,我觉得你做了什么:

我有一个像这样的静态方法:

public class DBUtil {
public static CLOB getCLOB(String innStr, Connection conn) throws SQLException, 
                                                   IOException {
  CLOB tempClob = null;
    // If the temporary CLOB has not yet been created, create new
    tempClob = CLOB.createTemporary(conn, true, CLOB.DURATION_SESSION);

    // Open the temporary CLOB in readwrite mode to enable writing
    tempClob.open(CLOB.MODE_READWRITE);
    // Get the output stream to write
    Writer tempClobWriter = tempClob.getCharacterOutputStream();
    // Write the data into the temporary CLOB
    tempClobWriter.write(innStr);

    // Flush and close the stream
    tempClobWriter.flush();
    tempClobWriter.close();

    // Close the temporary CLOB
    tempClob.close();
  return tempClob;
}
}

然后你可以使用这样的东西:

CLOB tempClob = DBUtil.getCLOB(longString, connection);
pstmt.setCLOB(colnumber, tempClob);

这要求整个clob内容都在一个字符串中,所以它全部加载到内存中,可能不适合你,但它一直在满足我的简单需求。

编辑:我应该注意到我在plsql过程调用中使用了这段代码。尚未使用sql直接测试

答案 3 :(得分:-2)

你试过检查一下这个字段的最大大小吗? SELECT LENGTH(clobfield) FROM table

查看该字段是否可以容纳大小..