项目中遇到一个问题,对方公司把打印好的报表数据存到数据库中,实际上就是把html存在Oracle中,然后需要我们在社保系统里进行查询。

但是他们把数据存放在B数据库,而我们的社保系统用的数据库是B。A和B都是Oracle数据库

这样就遇到一下几个问题:

1.读取B数据的Clob对象,但是会报错:

ORA-22992:无法使用从远程表选择的LOB定位符 ,解决方法如:http://www.cnblogs.com/Sunnor/p/5368530.html

2 怎么把Clob对象读取出来,然后写到jsp里。

这个也简单:

具体转换办法如:

 public  String ClobToString(Clob clob) throws SQLException, IOException { 

         String reString = "";
Reader is = clob.getCharacterStream();// 得到流
BufferedReader br = new BufferedReader(is);
String s = br.readLine();
StringBuffer sb = new StringBuffer();
while (s != null) {// 执行循环将字符串全部取出付值给 StringBuffer由StringBuffer转成STRING
sb.append(s);
s = br.readLine();
}
reString = sb.toString();
return reString;
} }

项目代码:

点击一个查询结果,然后双击调用某一个function(){},在这个function里使用window对象的showModelessDialog方法,

 /**
* 报表 非模态窗口
*/
function history(paramName) {
var title = encodeURIComponent('报表查询');
//弹出非模态对话框,并加上时间戳以防止缓存
var url = "cmpbb.do?title="+title+"&paramName=" + paramName+"&_t="+new Date().getTime();
var strFeatures = "resizable:yes;status:no;help:no;scroll:yes;center:yes;";
strFeatures = strFeatures+"dialogWidth:"+1300+"px;"+"dialogHeight:"+800+"px";
window.showModelessDialog(url,"",strFeatures);
//window.showModalDialog(url,"",strFeatures);
}

然后会跳转到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");//
if(para1 == null){
para1 = "XXXXXXX";
}
String bianhao = (String) request.getParameter("bianhao");//
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>

Clob对象转为字符串的更多相关文章

  1. json对象转为字符串,当做参数传递时加密解密

    [son对象  字符串 互相转行] 比如我有两个变量,我要将a转换成字符串,将b转换成JSON对象: var a={"name":"tom","sex ...

  2. javascript对象转为字符串

    function getStringTime(time){ //年 year = time.getFullYear(); //月 month = time.getMonth() if(String(m ...

  3. JSON对象和字符串的互相转换

    1.JSON.parse; 作用:将JavaScript对象表示法的JSON字符串转换为对象(字符串转对象) 语法:JSON.parse(text [, reviver]) text    必选. 一 ...

  4. json对象和字符串的相互转换

    JSON.stringify(obj)       将JSON对象转为字符串. JSON.parse(string)       将字符串转为JSON对象格式. 后台给你数据的时候,有时候会给你字符串 ...

  5. 第168天:json对象和字符串的相互转换

    json对象和字符串的相互转换 1.json对象和字符串的转换 在Firefox,chrome,opera,safari,ie9,ie8等高级浏览器直接可以用JSON对象的stringify()和pa ...

  6. json对象与字符串相互转换

    JSON 语法 JSON 语法规则 在 JS 语言中,一切都是对象.因此,任何支持的类型都可以通过 JSON 来表示,例如字符串.数字.对象.数组等.但是对象和数组是比较特殊且常用的两种类型: 对象表 ...

  7. js或者jq的string类型或者number类型的相互转换及json对象与字符串的转换

    1.将值乘以1,将string类型转为number类型 //算合计价值function summoney(money) { var zijin = $("#main_xm_dam09&quo ...

  8. java对象转为json字符串

    1.使用fastjson开源json工具类库 2.java类未添加get()和set()方法,java对象初始化时,使用fastjson解析,得到的json字符串有时为空{} 3.Java对象转为js ...

  9. [转]JS中对象与字符串的互相转换

    原文地址:http://www.cnblogs.com/luminji/p/3617160.html 在使用 JSON2.JS 文件的 JSON.parse(data) 方法时候,碰到了问题: thr ...

随机推荐

  1. Jsoup代码解读之六-防御XSS攻击

    Jsoup代码解读之八-防御XSS攻击 防御XSS攻击的一般原理 cleaner是Jsoup的重要功能之一,我们常用它来进行富文本输入中的XSS防御. 我们知道,XSS攻击的一般方式是,通过在页面输入 ...

  2. 用auto_ptr类模板帮助动态内存管理

    动态内存使用最多的是在C++应用程序的代码中.有过编程经验的程序员虽然都知道new操作符的使用一定要与delete匹配,在某些场合仍然可能有内存溢出.当异常被掷出时,程序的正常控制流程被改变,因此导致 ...

  3. 【方法2】删除Map中Value反复的记录,而且仅仅保留Key最小的那条记录

    依据guigui111111的建议:先把Map按Key从大到小排序,然后再把Key和Value互换.这也是一种非常好的思路,我写了一下代码,顺便贴上来,供大家參考与分享. package shuai. ...

  4. MyEclipse中jsp的凝视报错解决

    jsp页面中凝视报错: 出错现场:在eclipse中没有报错.在MyEclipse中报错. <!-- To use express install, set to playerProductIn ...

  5. Repeater 无刷新分页

    原文:http://blog.csdn.net/Sandy945/archive/2009/05/22/4208998.aspx 本文讲述的是如何利用 XMLHttpRequest 来对 Repeat ...

  6. POJ 2115 模线性方程 ax=b(mod n)

    /* (x*c+a)%(2^k)==b →(x*c)%(2^k)==b-a 满足定理: 推论1:方程ax=b(mod n)对于未知量x有解,当且仅当gcd(a,n) | b. 推论2:方程ax=b(m ...

  7. jsp 有哪些内置对象?作用分别是什么? 分别有什么方 法?

    JSP共有以下9种基本内置组件 request对象          客户端请求,此请求包含来自GET/POST的请求参数,通过它才能了解到客户的需求,然后做出相应. response对象       ...

  8. HDOJ 3415 Max Sum of Max-K-sub-sequence(单调队列)

    因为是circle sequence,可以在序列最后+序列前n项(或前k项);利用前缀和思想,预处理出前i个数的和为sum[i],则i~j的和就为sum[j]-sum[i-1],对于每个j,取最小的s ...

  9. PHP练习项目笔记之COOKIES

    主要是在登录和退出的时候,设置cookies.来保存登录和安全退出 1:在登录页面设置 //设置cookies的值 _setcookies($_rows['tg_username'], $_rows[ ...

  10. bzoj 4373: 算术天才⑨与等差数列 hash

    题目链接 题目大意:  给你n个数, 给两种操作, 一种给你l, r, k,问你[l, r]区间里的数排序后能否构成一个公差为k的等差数列. 另一种是将位置x的数变为y. 强制在线. 可以用hash来 ...