Jasper报告错误FirebirdSql错误#50710702

时间:2015-01-09 13:08:39

标签: sql jasper-reports firebird

我在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)

提前致谢!!

1 个答案:

答案 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)