我在Jasper为我编写了一个自定义报告,用于我们使用的程序,在更新程序时,报告出现错误。错误是:
ERROR#50710702 iReport无法填充(0)
堆栈细节是:
com.fbi.util.exception.ExceptionMainFree: net.sf.jasperreports.engine.JRException: Error preparing statement for executing the report query :
SELECT part.num AS PartNum, part.description AS PartDescription, part.id AS partid, onhand.lgid,
COALESCE(sold.qtysold, 0) AS qtySold,
DATEDIFF(day FROM timestamp ? TO timestamp ?) AS datediff,
COALESCE(onhand.avgqoh, 0) AS AvgQOH, COALESCE(locationgroup.name, 'No Inventory') as LocationGroupName,
productfortree.num AS productnum, producttree.name AS tree,
company.name AS company
FROM part
INNER JOIN (SELECT AVG(inventorylog.qtyonhand) AS avgQOH, inventorylog.partid AS PartID, inventorylog.locationgroupid as LGID
FROM inventorylog
WHERE inventorylog.typeID IN (1,10,15,20,30,40,50,60,64,67,68,72)
AND inventorylog.eventdate BETWEEN ? AND ?
GROUP BY inventorylog.partid, inventorylog.locationgroupid) onHand ON part.id = onhand.partid
LEFT JOIN locationgroup ON onhand.lgid = locationgroup.id
LEFT JOIN (SELECT product.partid AS PartID, SUM(soitem.qtyfulfilled) AS QtySold, so.locationgroupid AS LGID
FROM soitem
LEFT JOIN product ON soitem.productid = product.id
LEFT JOIN so ON so.id = soitem.soid
WHERE soitem.typeid = 10
AND soitem.datelastfulfillment BETWEEN ? AND ?
GROUP BY product.partid, so.locationgroupid) AS sold ON part.id = sold.partid AND locationgroup.id = sold.lgid
LEFT JOIN product AS productfortree ON productfortree.partid = part.id
LEFT JOIN producttotree ON producttotree.productid = productfortree.id
LEFT JOIN producttree ON producttree.id = producttotree.producttreeid
JOIN company ON company.id = 1
WHERE part.activeflag = 1
AND part.typeid = 10
AND locationgroup.id IN (7,8,9)
AND part.num LIKE ?
AND ((COALESCE(producttree.id,0) IN (0)) OR ((COALESCE(producttree.id,0) LIKE ?)))
GROUP BY producttree.name, part.description, part.id, onhand.lgid, COALESCE(sold.qtysold, 0),
DATEDIFF(day FROM timestamp ? TO timestamp ?),
COALESCE(onhand.avgqoh, 0), COALESCE(locationgroup.name, 'No Inventory'),
productfortree.num, part.num, company.name
ORDER BY producttree.name, part.num
at com.evnt.eve.modules.logic.extra.LogicReport.getJasperPrint(LogicReport.java:300)
at com.evnt.eve.modules.ReportModule.getJasperPrint(ReportModule.java:168)
at sun.reflect.GeneratedMethodAccessor327.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.evnt.eve.modules.EVEModule.handleEvent(EVEModule.java:189)
at com.evnt.eve.MessageHandler.handleEvent(MessageHandler.java:156)
at com.evnt.eve.MessageHandler.run(MessageHandler.java:115)
at java.lang.Thread.run(Unknown Source)
net.sf.jasperreports.engine.JRException: Error preparing statement for executing the report query :
SELECT part.num AS PartNum, part.description AS PartDescription, part.id AS partid, onhand.lgid,
COALESCE(sold.qtysold, 0) AS qtySold,
DATEDIFF(day FROM timestamp ? TO timestamp ?) AS datediff,
COALESCE(onhand.avgqoh, 0) AS AvgQOH, COALESCE(locationgroup.name, 'No Inventory') as LocationGroupName,
productfortree.num AS productnum, producttree.name AS tree,
company.name AS company
FROM part
INNER JOIN (SELECT AVG(inventorylog.qtyonhand) AS avgQOH, inventorylog.partid AS PartID, inventorylog.locationgroupid as LGID
FROM inventorylog
WHERE inventorylog.typeID IN (1,10,15,20,30,40,50,60,64,67,68,72)
AND inventorylog.eventdate BETWEEN ? AND ?
GROUP BY inventorylog.partid, inventorylog.locationgroupid) onHand ON part.id = onhand.partid
LEFT JOIN locationgroup ON onhand.lgid = locationgroup.id
LEFT JOIN (SELECT product.partid AS PartID, SUM(soitem.qtyfulfilled) AS QtySold, so.locationgroupid AS LGID
FROM soitem
LEFT JOIN product ON soitem.productid = product.id
LEFT JOIN so ON so.id = soitem.soid
WHERE soitem.typeid = 10
AND soitem.datelastfulfillment BETWEEN ? AND ?
GROUP BY product.partid, so.locationgroupid) AS sold ON part.id = sold.partid AND locationgroup.id = sold.lgid
LEFT JOIN product AS productfortree ON productfortree.partid = part.id
LEFT JOIN producttotree ON producttotree.productid = productfortree.id
LEFT JOIN producttree ON producttree.id = producttotree.producttreeid
JOIN company ON company.id = 1
WHERE part.activeflag = 1
AND part.typeid = 10
AND locationgroup.id IN (7,8,9)
AND part.num LIKE ?
AND ((COALESCE(producttree.id,0) IN (0)) OR ((COALESCE(producttree.id,0) LIKE ?)))
GROUP BY producttree.name, part.description, part.id, onhand.lgid, COALESCE(sold.qtysold, 0),
DATEDIFF(day FROM timestamp ? TO timestamp ?),
COALESCE(onhand.avgqoh, 0), COALESCE(locationgroup.name, 'No Inventory'),
productfortree.num, part.num, company.name
ORDER BY producttree.name, part.num
at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createStatement(JRJdbcQueryExecuter.java:377)
at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:196)
at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1087)
at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:668)
at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1258)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:877)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:822)
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:61)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:446)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:849)
at com.evnt.eve.modules.logic.extra.LogicReport.getJasperPrint(LogicReport.java:296)
at com.evnt.eve.modules.ReportModule.getJasperPrint(ReportModule.java:168)
at sun.reflect.GeneratedMethodAccessor327.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.evnt.eve.modules.EVEModule.handleEvent(EVEModule.java:189)
at com.evnt.eve.MessageHandler.handleEvent(MessageHandler.java:156)
at com.evnt.eve.MessageHandler.run(MessageHandler.java:115)
at java.lang.Thread.run(Unknown Source)
org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544569. Dynamic SQL Error
SQL error code = -104
Token unknown - line 3, column 29
?
at org.firebirdsql.jdbc.AbstractPreparedStatement.<init>(AbstractPreparedStatement.java:138)
at org.firebirdsql.jdbc.FBPreparedStatement.<init>(FBPreparedStatement.java:45)
at sun.reflect.GeneratedConstructorAccessor57.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.firebirdsql.jdbc.FBStatementFactory.createPreparedStatement(FBStatementFactory.java:89)
at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:1187)
at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:942)
at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:896)
at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:324)
at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createStatement(JRJdbcQueryExecuter.java:267)
at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:196)
at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1087)
at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:668)
at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1258)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:877)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:822)
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:61)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:446)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:849)
at com.evnt.eve.modules.logic.extra.LogicReport.getJasperPrint(LogicReport.java:296)
at com.evnt.eve.modules.ReportModule.getJasperPrint(ReportModule.java:168)
at sun.reflect.GeneratedMethodAccessor327.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.evnt.eve.modules.EVEModule.handleEvent(EVEModule.java:189)
at com.evnt.eve.MessageHandler.handleEvent(MessageHandler.java:156)
at com.evnt.eve.MessageHandler.run(MessageHandler.java:115)
at java.lang.Thread.run(Unknown Source)
org.firebirdsql.gds.GDSException: Dynamic SQL Error
SQL error code = -104
Token unknown - line 3, column 29
?
at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.readStatusVector(AbstractJavaGDSImpl.java:2092)
at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.receiveResponse(AbstractJavaGDSImpl.java:2042)
at org.firebirdsql.gds.impl.wire.AbstractJavaGDSImpl.iscDsqlPrepare(AbstractJavaGDSImpl.java:1465)
at org.firebirdsql.gds.impl.GDSHelper.prepareStatement(GDSHelper.java:190)
at org.firebirdsql.jdbc.AbstractStatement.prepareFixedStatement(AbstractStatement.java:1441)
at org.firebirdsql.jdbc.AbstractPreparedStatement.prepareFixedStatement(AbstractPreparedStatement.java:1285)
at org.firebirdsql.jdbc.AbstractPreparedStatement.<init>(AbstractPreparedStatement.java:135)
at org.firebirdsql.jdbc.FBPreparedStatement.<init>(FBPreparedStatement.java:45)
at sun.reflect.GeneratedConstructorAccessor57.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.firebirdsql.jdbc.FBStatementFactory.createPreparedStatement(FBStatementFactory.java:89)
at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:1187)
at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:942)
at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:896)
at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:324)
at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createStatement(JRJdbcQueryExecuter.java:267)
at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:196)
at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:1087)
at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:668)
at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1258)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:877)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:822)
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:61)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:446)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:849)
at com.evnt.eve.modules.logic.extra.LogicReport.getJasperPrint(LogicReport.java:296)
at com.evnt.eve.modules.ReportModule.getJasperPrint(ReportModule.java:168)
at sun.reflect.GeneratedMethodAccessor327.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.evnt.eve.modules.EVEModule.handleEvent(EVEModule.java:189)
at com.evnt.eve.MessageHandler.handleEvent(MessageHandler.java:156)
at com.evnt.eve.MessageHandler.run(MessageHandler.java:115)
at java.lang.Thread.run(Unknown Source)
提前致谢!!
答案 0 :(得分:0)
问题是:
DATEDIFF(day FROM timestamp ? TO timestamp ?) AS datediff
timestamp
速记强制转换仅在紧跟格式为yyyy-mm-dd
的字符串文字后才有效。当您使用参数时,您需要将参数强制转换为所需类型:
DATEDIFF(day FROM CAST(? AS TIMESTAMP) TO CAST(? AS TIMESTAMP)) AS datediff
也许你甚至需要双重演员:
CAST(CAST(? AS VARCHAR(20)) AS TIMESTAMP)