今天在读取一个Oracle的clob字段时出现了一个奇怪的错误:
java.sql.SQLException: 关闭的连接
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)
at oracle.sql.CLOB.getDBAccess(CLOB.java:1196)
Java读取clob字段和读取一般字段是有一些区别。因为clob字段是Oracle用来存储大字段的类型,clob字段可以存储4G的容量。
经过一番周折最终解决了这个问题,解决办法如下:
if(ret instanceof oracle.sql.CLOB) {
//oracle的CLOB类型需要特殊处理
oracle.sql.CLOB clob = (oracle.sql.CLOB) ret;
Reader inStream = clob.getCharacterStream();
char[] c = new char[(int) clob.length()];
inStream.read(c);
String value = new String(c); //这里就是最终处理好的Clob字段
inStream.close(); //读取完毕之后关闭流
}