|
今天写了一个通过weblogic数据源访问数据库应用,发现读取CLOB字段无法读取,查询网上资料,发现一遍文章。把代码复制一遍发现还是无法使用,稍微修改一下就通过了,附上代码
//转换CLOB为普通CLOB类型进行读取
public String clobToString2(Object clob2)throws SQLException, IOException{
log.info("classname:"+clob2.getClass().getName());
try{
//判断CLOB类型
if ("oracle.sql.CLOB".equals(clob2.getClass().getName())){
String rtn = "";
oracle.sql.CLOB clob = (oracle.sql.CLOB)clob2;
InputStream input = clob.getAsciiStream();
int len = (int)clob.length();
byte[] by = new byte[len];
int i ;
while(-1 != (i = input.read(by, 0, by.length))) {
input.read(by, 0, i);
}
rtn = new String(by);
rtn=clob.getSubString((long)1,(int)clob.length());
return rtn;
}else if ("weblogic.jdbc.wrapper.Clob_oracle_sql_CLOB".equals(clob2.getClass().getName())){
//通过weblogic数据源访问时,需要把weblogic的CLOB转换为java.sql.Clob类型
String rtn = "";
Method method = clob2.getClass().getMethod("getVendorObj",new Class[]{});
// log.info("11111111111111111111111");
java.sql.Clob clob = (Clob) method.invoke(clob2); //修改后代码
oracle.sql.CLOB clob = (oracle.sql.CLOB)method.invoke(in); 修改前代码
// log.info("222222222222222222222222");
InputStream input = clob.getAsciiStream();
int len = (int)clob.length();
byte[] by = new byte[len];
int i ;
while(-1 != (i = input.read(by, 0, by.length))) {
input.read(by, 0, i);
}
rtn = new String(by);
rtn=clob.getSubString((long)1,(int)clob.length());
return rtn;
}else{
return null;
}
}catch(Exception e){
log.info("convert to clob error:"+e.getLocalizedMessage());
return null;
}
} |
|