使用weblogic数据源读取CLOB字段问题

今天写了一个通过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;
       }
      }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值