我在尝试创建的JasperServer报告中遇到此问题: 我有几个db表,使用名称和日期命名:
TABLE_NAME_YYYYMMDD
我希望能够从普通日期输入控件中选择(并从中选择)与用户提交的日期相对应的表格。
我尝试创建一个变量(称为TABLE_NAME),它使用Java表达式来解析日期,如:
"MY_TABLE_" + new SimpleDateFormat("yyyyMMdd").format($P{RUN_DATE})
当我在报告中打印变量的值时,它看起来是正确的。但后来我尝试在SQL查询中使用该变量名,如:
SELECT column1,column2.. from $V{TABLE_NAME}
但是当我尝试在Jaspersoft Studio中运行报告时,我得到了这个例外:
net.sf.jasperreports.engine.JRException: net.sf.jasperreports.engine.JRException: Error executing SQL statement for: my_report_x.
at com.jaspersoft.studio.editor.preview.view.control.ReportControler.fillReport(ReportControler.java:511)
at com.jaspersoft.studio.editor.preview.view.control.ReportControler.access$20(ReportControler.java:486)
所以它似乎没有起作用。
我读到了可以在参数中指定整个表名的情况,并且您应该使用:
$P!{tableName}
首先我尝试使用'!'使用变量名称:
..from $V!{TABLE_NAME}
但我得到了同样的例外。
然后我尝试创建一个新参数,其中“Is For Prompting”未选中,并且作为默认值表达式,我将与我在变量中使用的表达式相同:
"MY_TABLE_" + new SimpleDateFormat("yyyyMMdd").format($P{RUN_DATE})
但是当我尝试在Jaspersoft Studio中运行报告时,我仍然遇到同样的错误。
有谁知道是否有办法解决这个问题? - 优选的是一种不需要花费数天时间才能实现的方法,因为我没有那段时间。
我正在使用Jaspersoft Studio 6.1.1.final并在JasperServer 5.5.0中运行报告。
答案 0 :(得分:2)
你应该能够通过将整个FROM表达式包装在参数中来实现这一点。例如
struct Pixel
{
unsigned int red;
unsigned int green;
unsigned int blue;
};
std::vector< std::vector<Pixel> > bitmap;
然后在SQL中将其用作字符串文字:
<parameter name="pTableName" class="java.lang.String">
<defaultValueExpression><![CDATA["from MY_TABLE_" + new SimpleDateFormat("yyyyMMdd").format($P{RUN_DATE})]]></defaultValueExpression>
</parameter>
答案 1 :(得分:1)
我刚刚发现了我做错了什么。
我承认这是相当愚蠢的,但我只是尝试在Jaspersoft Studio的预览模式下运行报告。那是我收到SQL错误的时候。
但我认为预览模式不支持关于要读取哪个表的动态决策,因为当我忽略预览错误并将报告发布到JasperServer时,我实际上可以在那里运行它!
我最终使用了$ P!{TABLE_NAME}参数,其值是我之前尝试过的:
"MY_TABLE_" + new SimpleDateFormat("yyyyMMdd").format($P{RUN_DATE})
我可以在这里尽可能多地打印我的SQL(这意味着我必须替换名称,因为这是工作报告),如果你想看到它:
select c.column1,c.column2, h.column3 from $P!{TABLE_NAME} h, TABLE2 i, TABLE3 p, TABLE4 ca, TABLE5 c
where h.P_ID = p.P_ID and h.A_ID = ca.A_ID and ca.C_ID = c.C_ID and ca.SOME_VALUE = 1 and ca.OTHER_VALUE = 1
and i.I_ID=h.I_ID
and i.OTHER_ID=1
and h.VALUE_X > 0
order by c.VALUE_Y
因此,我对其他创建Jasper报告的人的建议不是让自己被某些事情在预览模式下工作所迷惑。 - 这可能只是&#34;预览限制&#34;。