你能告诉我如何使用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时,这两种方法都会失败。
答案 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
查看该字段是否可以容纳大小..