奇怪的BIRT数据集问题
遇到了一个奇怪的问题,我在BIRT下建立了数据集,查询语句如下:
select
B.A_C_USER_ID,
B.A_C_UNIT_CODE,
B.A_C_PRODUCT_ID,
B.A_C_PRODUCT_NAME,
B.A_C_FUNC_ID,
EXIMUSER.SEC_USER_AUTH_LEVEL.I_AUTH_LEVEL
from
(select
EXIMUSER.SEC_USER_INFO.C_USER_ID A_C_USER_ID,
EXIMUSER.SEC_USER_INFO.C_UNIT_CODE A_C_UNIT_CODE,
EXIMUSER.SEC_OP_FUNC.C_PRODUCT_ID A_C_PRODUCT_ID,
EXIMUSER.SEC_OP_FUNC.C_PRODUCT_NAME A_C_PRODUCT_NAME,
EXIMUSER.SEC_OP_FUNC.C_FUNC_ID A_C_FUNC_ID
from EXIMUSER.SEC_USER_INFO
left join
EXIMUSER.SEC_OP_FUNC on EXIMUSER.SEC_OP_FUNC.C_USER_ID=EXIMUSER.SEC_USER_INFO.C_USER_ID
where EXIMUSER.SEC_USER_INFO.C_UNIT_CODE=?) B
left join
EXIMUSER.SEC_USER_AUTH_LEVEL on EXIMUSER.SEC_USER_AUTH_LEVEL.C_USER_ID=B.A_C_USER_ID
and EXIMUSER.SEC_USER_AUTH_LEVEL.C_PRODUCT_ID=B.A_C_PRODUCT_ID
在BIRT 的IDE里面预览没有任何问题,但我将模板放到J2EE应用中,结果却报错。报错信息如下:
[color=#FF0000][08-2-29 9:43:00:265 CST] 3cf03cf0 SystemErr R java.lang.NullPointerException
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at java.lang.Throwable.<init>(Throwable.java)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at java.lang.Throwable.<init>(Throwable.java)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at java.lang.NullPointerException.<init>(NullPointerException.java:60)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at com.ibm.ws.rsadapter.jdbc.WSJdbcResultSetMetaData.getColumnCount(WSJdbcResultSetMetaData.java:118)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.report.data.oda.jdbc.Statement.getMetaData(Statement.java:278)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.datatools.connectivity.oda.consumer.helper.OdaQuery.doGetMetaData(OdaQuery.java:388)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.datatools.connectivity.oda.consumer.helper.OdaQuery.getMetaData(OdaQuery.java:356)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.data.engine.odaconsumer.PreparedStatement.getRuntimeMetaData(PreparedStatement.java:369)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.data.engine.odaconsumer.PreparedStatement.getProjectedColumns(PreparedStatement.java:339)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.data.engine.odaconsumer.PreparedStatement.setColumnsProjection(PreparedStatement.java:1028)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.data.engine.executor.DataSourceQuery.prepare(DataSourceQuery.java:262)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.data.engine.impl.PreparedOdaDSQuery$OdaDSQueryExecutor.prepareOdiQuery(PreparedOdaDSQuery.java:344)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.data.engine.impl.QueryExecutor.prepareExecution(QueryExecutor.java:213)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.data.engine.impl.PreparedQuery.doPrepare(PreparedQuery.java:396)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.data.engine.impl.PreparedDataSourceQuery.execute(PreparedDataSourceQuery.java:145)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.data.engine.impl.PreparedOdaDSQuery.execute(PreparedOdaDSQuery.java:134)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.data.engine.impl.PreparedDataSourceQuery.execute(PreparedDataSourceQuery.java:125)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.report.engine.data.dte.DteDataEngine.doExecuteQuery(DteDataEngine.java:119)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.report.engine.data.dte.AbstractDataEngine.execute(AbstractDataEngine.java:210)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.report.engine.executor.ExecutionContext.executeQuery(ExecutionContext.java:1641)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.report.engine.executor.QueryItemExecutor.executeQuery(QueryItemExecutor.java)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.report.engine.executor.TableItemExecutor.execute(TableItemExecutor.java:73)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.report.engine.internal.executor.l18n.LocalizedReportItemExecutor.execute(LocalizedReportItemExecutor.java)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.report.engine.layout.content.BlockStackingExecutor.getNextChild(BlockStackingExecutor.java)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.report.engine.layout.pdf.PDFBlockStackingLM.traverseChildren(PDFBlockStackingLM.java)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.report.engine.layout.pdf.PDFStackingLM.layoutChildren(PDFStackingLM.java)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.report.engine.layout.pdf.PDFPageLM.layout(PDFPageLM.java:210)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.report.engine.layout.pdf.PDFReportLayoutEngine.layoutReport(PDFReportLayoutEngine.java:60)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.report.engine.layout.pdf.PDFReportLayoutEngine.layout(PDFReportLayoutEngine.java:97)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.doRun(RunAndRenderTask.java:205)
[08-2-29 9:43:00:296 CST] 3cf03cf0 SystemErr R at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.run(RunAndRenderTask.java:142)[/color]
后来我试着修改了一下SQL语句,把where条件写在了最后,结果就好了。修改如下:
select
B.A_C_USER_ID,
B.A_C_UNIT_CODE,
B.A_C_PRODUCT_ID,
B.A_C_PRODUCT_NAME,
B.A_C_FUNC_ID,
EXIMUSER.SEC_USER_AUTH_LEVEL.I_AUTH_LEVEL
from
(select
EXIMUSER.SEC_USER_INFO.C_USER_ID A_C_USER_ID,
EXIMUSER.SEC_USER_INFO.C_UNIT_CODE A_C_UNIT_CODE,
EXIMUSER.SEC_OP_FUNC.C_PRODUCT_ID A_C_PRODUCT_ID,
EXIMUSER.SEC_OP_FUNC.C_PRODUCT_NAME A_C_PRODUCT_NAME,
EXIMUSER.SEC_OP_FUNC.C_FUNC_ID A_C_FUNC_ID
from EXIMUSER.SEC_USER_INFO
left join
EXIMUSER.SEC_OP_FUNC on EXIMUSER.SEC_OP_FUNC.C_USER_ID=EXIMUSER.SEC_USER_INFO.C_USER_ID
) B
left join
EXIMUSER.SEC_USER_AUTH_LEVEL on EXIMUSER.SEC_USER_AUTH_LEVEL.C_USER_ID=B.A_C_USER_ID
and EXIMUSER.SEC_USER_AUTH_LEVEL.C_PRODUCT_ID=B.A_C_PRODUCT_ID
where B.A_C_UNIT_CODE=?
不知道为什么?