jasperreport可以传整条sql语句吗?
如:select * from table1 where $P{parm}在传$P{parm}的时候,直接传 table1.column='1234' 这个语句,可以这样实现吗?如果可以实现请告诉思路,我是用Ireport形成的Jasperreport报表的

解决方案 »

  1.   

    1 根据我的经验,你可以传整个SQL过去!
    2 这种事情,你只需要1分钟就可以测试出答案,你非得花10分钟来CSDN问!?
      

  2.   

    我已经测试过了,把$P{parm}设为java.lang.String 类型,然后设置$P{parm}的默认值为sql语句,但是没有用。
      

  3.   

    首先谢谢你的指导,
    我建了个参数:$P{sql},类型:java.util.String  设置了这个参数$P{sql}的默认值为一条sql语句:"select * from table1"
    但是运行jrviewer的预览,则提示了错误:无效的sql类型
    Error filling print... Error executing SQL statement for : sgcom_bofu_report 
    net.sf.jasperreports.engine.JRException: Error executing SQL statement for : sgcom_bofu_report      at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:141)      at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:682)      at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:614)      at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:892)      at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:716)      at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:669)      at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:63)      at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:402)      at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:234)      at it.businesslogic.ireport.IReportCompiler.run(IReportCompiler.java:942)      at java.lang.Thread.run(Unknown Source)  Caused by: java.sql.SQLException: 无效的 SQL 类型      at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)      at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)      at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208)      at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:76)      at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:955)      at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1168)      at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3285)      at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3329)      at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:135)      ... 10 more  
    Print was not filled. Try using an EmptyDataSource...
      

  4.   

    问题已经解决,谢谢上面那位同志,虽然没有给我提示性的东西,但是挺热心的。
    在jasperreport中如果参数是$P{parm}则只能用于PreparedStatement参数绑定,
    而$P!{parm}则可以替换sql的任何部分,所以要传整个sql就必须用$P!{parm}这种形式。