您的位置:首页 > 数据库

润乾报表v5从数据库大字段取数

2017-08-17 09:50 232 查看
数据库表字段中有存储数据量较大的大字段类型,如oralce中的blob,结合特殊的业务需要,可能要拿到报表单元格或其他地方使用。
作为Oracle的blob字段,java中要用rs.getBlob()形式,但是如果直接将该结果返回到报表单元格中,会是一个blob对象,并不是真正里边存储的数据值,所以要经过特殊转换才能被报表工具识别。
本文将介绍润乾报表自定义函数实现对大字段的读取(主要体现在自定义函数的写法,自定义函数配置可参考开发教程)。
如下代码所示:
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.*;
importcom.raqsoft.report.model.expression.Expression;
importcom.raqsoft.report.model.expression.Function;
importcom.raqsoft.report.model.expression.Variant2;
importcom.raqsoft.report.resources.EngineMessage;
import com.raqsoft.report.usermodel.Context;
public class getparam extends Function {
public Object calculate(Context arg0) {
String param=“”;
Statement pstmt = null;
ResultSet rs = null;
oracle.sql.BLOB blob=null;
String id=result1.toString();
Connection con = null;
try {
con =arg0.getConnectionFactory(arg0.getDefDataSourceName()).getConnection();
} catch (Exception e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
String query2=“select param from BD_RUNQIAN_DT where id=’”+id+“‘”;
try {
pstmt = con.prepareStatement(query2);
rs = pstmt.executeQuery(query2);
while(rs.next()){
blob = (oracle.sql.BLOB)rs.getBlob(“param”);
InputStream inStream = blob.getBinaryStream();
byte[] data=null;
data = new byte[(int)blob.length()];
inStream.read(data);
inStream.close();
param=new String(data);
}
rs.close();
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
return param;
//===================================================================
}
}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: