`

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

    博客分类:
  • java
 
阅读更多

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics