Clob對象轉為字符串


  項目中遇到一個問題,對方公司把打印好的報表數據存到數據庫中,實際上就是把html存在Oracle中,然后需要我們在社保系統里進行查詢。

  但是他們把數據存放在B數據庫,而我們的社保系統用的數據庫是B。A和B都是Oracle數據庫

這樣就遇到一下幾個問題:

1.讀取B數據的Clob對象,但是會報錯:

ORA-22992:無法使用從遠程表選擇的LOB定位符 ,解決方法如:http://www.cnblogs.com/Sunnor/p/5368530.html

2 怎么把Clob對象讀取出來,然后寫到jsp里。

這個也簡單:

具體轉換辦法如:

 1 public  String ClobToString(Clob clob) throws SQLException, IOException { 
 2 
 3         String reString = ""; 
 4         Reader is = clob.getCharacterStream();// 得到流 
 5         BufferedReader br = new BufferedReader(is); 
 6         String s = br.readLine(); 
 7         StringBuffer sb = new StringBuffer(); 
 8         while (s != null) {// 執行循環將字符串全部取出付值給 StringBuffer由StringBuffer轉成STRING 
 9         sb.append(s); 
10         s = br.readLine(); 
11         } 
12         reString = sb.toString(); 
13         return reString; 
14         }
15     
16 }

項目代碼:

點擊一個查詢結果,然后雙擊調用某一個function(){},在這個function里使用window對象的showModelessDialog方法,

 1 /**
 2   * 報表 非模態窗口
 3   */
 4  function history(paramName) {
 5             var title = encodeURIComponent('報表查詢');
 6             //彈出非模態對話框,並加上時間戳以防止緩存
 7             var url = "cmpbb.do?title="+title+"&paramName=" + paramName+"&_t="+new Date().getTime();
 8             var strFeatures = "resizable:yes;status:no;help:no;scroll:yes;center:yes;";
 9             strFeatures = strFeatures+"dialogWidth:"+1300+"px;"+"dialogHeight:"+800+"px";
10             window.showModelessDialog(url,"",strFeatures);
11             //window.showModalDialog(url,"",strFeatures);
12 }

然后會跳轉到cmpbb.jsp,

cmpbb.jsp代碼:

<%@page import="cn.sinobest.example.service.cbzlzx.CbzlzxService"%>
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="java.io.*"%>
<%@ page import="java.sql.*, javax.sql.*" %>
<%@ page import="java.util.*"%>
<%@ page import="java.math.*"%>
<%@ page import="cn.sinobest.framework.util.DTOUtil"%>
<%@ page import="cn.sinobest.framework.util.Util"%>

<%
//獲取查詢條件 
String para1 =  (String) request.getParameter("paramName");// 01
if(para1 == null){
    para1 = "XXXXXXX";
} 
String bianhao =  (String) request.getParameter("bianhao");// 01
if(bianhao == null){
    bianhao = "YYYYY";
}
//獲取模態窗口傳過來的值,
String SERIALNUM = DTOUtil.getValue("paramName");
//建連接
Connection con = Util.getConnection();
//設置不自動提交,因為往全局臨時表插入數據不能夠提交,一旦提交全局臨時表里就沒數據了。
con.setAutoCommit(false);
Statement stmt = null;
ResultSet rs = null;
String idcard = null;
String strclob = "";
CbzlzxService serv = new CbzlzxService();
try{
    // 准備語句執行對象
    stmt = con.createStatement();
    //if(SERIALNUM.length()==0||"".equals(SERIALNUM)){
    //    SERIALNUM = "20160408101621331200002";
    //}
    //String sql = " SELECT * FROM gtemp_printserialnum_2 where SERIALNUM = '"+SERIALNUM+"'";
    //gtemp_printserialnum_,全局臨時表,只有當前連接有效,要是重新開另外開一個鏈接就沒法在這個表里查數據
    //String sql_ = "insert into gtemp_printserialnum_ select * from printserialnum@dbl_to_ytj ";
    //stmt.execute(sql_);//執行插入語句
    //String sql = " SELECT * FROM gtemp_printserialnum_ where SERIALNUM = '"+SERIALNUM+"'";
    String sql = " SELECT * FROM printserialnum where SERIALNUM = '"+SERIALNUM+"'";
    rs = stmt.executeQuery(sql);
    System.out.println("讀取CLOB對象:AAC001 1= "+sql);
    
    if (rs.next()) {
        System.out.println("讀取CLOB對象:AAC001 2= ");
        //1 獲取結果集中的Clob字段值
        Clob b = rs.getClob("PRINTTABLE");
        //2 調用寫好的工具方法吧Clob對象轉換為字符串
        strclob =  serv.ClobToString(b);
        /*
            3 這一步很重要,觸屏打印傳過來的Clob字段里的html信息沒有加上<html></html>標記,
            使用模態窗口打開的時候可能顯示為空
        */
        strclob = "<HTML>"+strclob+"</HTML>";
        //4 用jsp內置對象把轉換后的html字符串打印到網頁上
        out.print(strclob);
        System.out.println("-----:"+strclob);
        //response.reset();
        //這個設置很重要,否則客戶端瀏覽器不能識別輸出內容,導致彈出下載的對話框。
    
        //response.setContentType("image/jpeg");
        //response.setContentType("text/html");
        //ServletOutputStream sos = response.getOutputStream();
        //sos.write(bs,0,bs.length);
        //sos.flush();  
    }else {
        
        System.out.println("讀取CLOB對象:AAC001 3= ");
        //response.sendRedirect(request.getContextPath()+"/images/NonePhoto.JPG");
    }
}catch(Exception e){
    System.out.println("讀取CLOB對象:AAC001 4= ");
    e.printStackTrace();
}finally{
    //rs.last();
    //len = rs.getRow();
    System.out.println("讀取CLOB對象:AAC001 5= "+idcard+",len:");
    rs.close(); 
    stmt.close();
    con.close();
}
%>
<script type="text/javascript">
alert('---'+kkk);
var para1="<%=para1%>";
var bianhao="<%=bianhao%>";
//alert('para1:'+para1);
//alert('bianhao:'+bianhao);
</script>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM