润乾报表v4-自定义函数从oracle的blob字段中取数
2016-11-30 09:30
477 查看
由于特殊业务需求,要求通过自定义函数将Oralce数据库中的blob字段的数据拿到单元格中或传入其他地方使用,作为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.*;
import com.runqian.base4.util.*;
import com.runqian.report4.model.expression.*;
import com.runqian.report4.usermodel.*;
public class getparam extends Function
{
public Object calculate(Context arg0, boolean arg1)
{
//报表中调用该函数传递过来的参数列表
if ( this.paramList.size()
== 0 ) {
throw new ReportError( “getparam参数个数不恩能够为空“ );
}
//取得计算表达式(得到传递给报表的参数)
Expression param1 = ( Expression )this.paramList.get(
0 );
if ( param1 == null ) {
throw new ReportError(“ 函数出现无效参数“ );
}
//运算表达式,并取得运算结果(Object)
Object result1 = Variant2.getValue( param1.calculate(arg0,arg1),false,false );
if( result1==null ) return ObjectCache.getInteger(
0 );
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;
//===================================================================
}
}
如下代码所示:
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.*;
import com.runqian.base4.util.*;
import com.runqian.report4.model.expression.*;
import com.runqian.report4.usermodel.*;
public class getparam extends Function
{
public Object calculate(Context arg0, boolean arg1)
{
//报表中调用该函数传递过来的参数列表
if ( this.paramList.size()
== 0 ) {
throw new ReportError( “getparam参数个数不恩能够为空“ );
}
//取得计算表达式(得到传递给报表的参数)
Expression param1 = ( Expression )this.paramList.get(
0 );
if ( param1 == null ) {
throw new ReportError(“ 函数出现无效参数“ );
}
//运算表达式,并取得运算结果(Object)
Object result1 = Variant2.getValue( param1.calculate(arg0,arg1),false,false );
if( result1==null ) return ObjectCache.getInteger(
0 );
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;
//===================================================================
}
}
相关文章推荐
- 润乾报表v4-自定义函数计算两个日期之间的假期数
- 润乾报表自定义函数显示二维码
- 自定义CLOB字段连接函数处理Oracle查询
- 润乾报表v4如何升级设计器的JDK版本
- oracle的blob和clob字段的处理
- 迁移Oracle数据备忘(表中有blob字段)
- oracle大字段BLOB读取,转换异常
- 润乾报表v4-下拉数据集选值触发
- ORACLE 还有BLOB及CLOB等类型字段的表的导出导入
- JAVA读取Oracle中的blob图片字段并显示
- Oracle分析函数——数据分布函数及报表函数
- 润乾报表 dql分析页面如何为字段设置编辑风格
- in函数在润乾报表的应用
- 向oracle表的BLOB字段插入图片的方法
- oracle 读取blob大文本字段
- 润乾报表V4大数据api分批导出excel
- Oracle中得blob字段导入到DB2的Blob字段
- 用C#将图片保存至Oracle BLOB字段中的方法
- Oracle 自定义函数语法与实例
- C# 读取和写入oracle的blob字段的方法