Java 简单JasperReport生成

Java 简单JasperReport生成,java,jasper-reports,Java,Jasper Reports,我只是在做一个简单的JasperReport项目。因此,我有一个Java代码用于验证用户输入的用户名和密码,还有另一个Java类文件用于以.pdf格式导出报告。因此,请帮助我整合这两个类并生成报告。我只想在报告中打印用户名和密码 public class Login { // JDBC driver name and database URL static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final Strin

我只是在做一个简单的JasperReport项目。因此,我有一个Java代码用于验证用户输入的用户名和密码,还有另一个Java类文件用于以.pdf格式导出报告。因此,请帮助我整合这两个类并生成报告。我只想在报告中打印用户名和密码

public class Login {
// JDBC driver name and database URL
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/CNVS";

// Database credentials
static final String USER = "root";
static final String PASS = "root";

public static void main(String[] args) {
    String userName;
    String password;
    Connection conn = null;
    Statement stmt = null;
    Scanner in = new Scanner(System.in);

    System.out.println("Enter the username");
    userName = in.nextLine();
    System.out.println("Enter the password");
    password = in.nextLine();

    try {
        // STEP 2: Register JDBC driver
        Class.forName("com.mysql.jdbc.Driver");

        // STEP 3: Open a connection
        // System.out.println("Connecting to database...");
        conn = DriverManager.getConnection(DB_URL, USER, PASS);

        // STEP 4: Execute a query
        // System.out.println("Creating statement...");
        stmt = conn.createStatement();
        String sql;
        sql = "SELECT USER_NAME, PASSWORD FROM USER_INFO WHERE USER_NAME = '" + userName + "'";
        ResultSet rs = stmt.executeQuery(sql);
        // STEP 5: Extract data from result set

        while (rs.next()) {
            // Retrieve by column name
            String dbUserName = rs.getString("USER_NAME");
            String dbPassword = rs.getString("PASSWORD");

            if (userName.equals(dbUserName) && password.equals(dbPassword)) {
                System.out.println("Successfully Logged in ! ");
            } else {
                System.out.println("Please enter the valid  login credentials");
            }
        }

        // STEP 6: Clean-up environment
        rs.close();
        stmt.close();
        conn.close();
    } catch (SQLException se) {
        // Handle errors for JDBC
        se.printStackTrace();
    } catch (Exception e) {
        // Handle errors for Class.forName
        e.printStackTrace();
    } finally {
        // finally block used to close resources
        try {
            if (stmt != null)
                stmt.close();
        } catch (SQLException se2) {
        }
        try {
            if (conn != null)
                conn.close();
        } catch (SQLException se) {
            se.printStackTrace();
        }
    }
    System.out.println("Goodbye!");
}
}

下面是Java调用的类

public class JavaCallJasperReport { 
public static void main(String[] args) throws JRException,
        ClassNotFoundException, SQLException {

    String reportSrcFile = "C:/Users/stephenjebaraj_b/Test_Report.jrxml";     
    // First, compile jrxml file.
    JasperReport jasperReport =    JasperCompileManager.compileReport(reportSrcFile);

    Connection conn = MySQLConnUtils.getMySQLConnection();

    // Parameters for report
    Map<String, Object> parameters = new HashMap<String, Object>();
    parameterMap.put(USER_NAME, dbUserName);
    parameterMap.put(PASSWORD, dbPassword);

    JasperPrint print = JasperFillManager.fillReport(jasperReport,
            parameters, conn);

    // Make sure the output directory exists.
    File outDir = new File("C:/JasperReport_Test");
    outDir.mkdirs();

    // PDF Exportor.
    JRPdfExporter exporter = new JRPdfExporter();

    ExporterInput exporterInput = new SimpleExporterInput(print);
    // ExporterInput
    exporter.setExporterInput(exporterInput);

    // ExporterOutput
    OutputStreamExporterOutput exporterOutput = new SimpleOutputStreamExporterOutput(
            "C:/JasperReport_Test/TestJasper.pdf");
    // Output
    exporter.setExporterOutput(exporterOutput);

    //
    SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
    exporter.setConfiguration(configuration);
    exporter.exportReport();

    System.out.print("Done!");
}
public类JavaCallJasperReport{
公共静态void main(字符串[]args)引发异常,
ClassNotFoundException,SQLException{
String reportSrcFile=“C:/Users/stephenjebaraj_b/Test_Report.jrxml”;
//首先,编译jrxml文件。
JasperReport JasperReport=JasperCompileManager.compileReport(reportSrcFile);
Connection conn=MySQLConnUtils.getMySQLConnection();
//报告的参数
映射参数=新的HashMap();
parameterMap.put(用户名,dbUserName);
parameterMap.put(PASSWORD,dbPassword);
JasperPrint print=JasperFillManager.fillReport(jasperReport,
参数,conn);
//确保输出目录存在。
File outDir=新文件(“C:/JasperReport_测试”);
outDir.mkdirs();
//PDF导出器。
JRPdfExporter exporter=新的JRPdfExporter();
ExporterInput ExporterInput=新的SimpleExporterInput(打印);
//出口量
exporter.setExporterInput(exporterInput);
//出口输出
OutputStreamExportRoutPut exporterOutput=新的SimpleOutputStreamExportRoutPut(
“C:/JasperReport_Test/TestJasper.pdf”);
//输出
exporter.setExporterOutput(exporterOutput);
//
SimplePDExporterConfiguration配置=新的SimplePDExporterConfiguration();
exporter.setConfiguration(配置);
出口商。出口报告();
系统输出打印(“完成!”);
}

}

正如@Alex K所提到的,您需要做的是编辑jrxml文件:

  • 添加两个报告参数
    用户名
    密码
    。参数名称必须与
    JavaCallJasperReport类中
    parameterMap.put(?)
    的第一个参数相同
  • 编辑报告元素以显示这些变量。例如,如果要在文本字段中显示报告参数
    密码的值。只需将它的文本字段表达式设置为
    $P{PASSWORD}

  • 有关更多详细信息,请参阅。

    您应该创建简单报告的模板(jrxml文件)并使用它。您可以使用表组件或使用经典设计(在细节栏上放置字段)eah,我已经使用iReport工具创建了jrxml文件。因此,我不知道在//parameters for report标记中应该发生什么。很抱歉,我的问题可能听起来很可笑,因为我是一个初学者,我正处于学习阶段。请帮助我,提前谢谢@Alex k。我能够解决这个问题,但编译后我得到了这个错误。你能帮我一下吗。?net.sf.jasperreports.engine.query.JRJdbcQueryExecuter警告:提供的java.sql.Connection对象为null。完成!谢谢你,我也这么做了。但是在javacallJasperreport.java类中,我需要实现调用用户名和密码的逻辑。所以,你能帮我解决这个问题吗?我本来可以解决这个问题,但是在编译之后,我得到了这个错误。你能帮我一下吗。?2016年3月11日下午7:01:19 net.sf.jasperreports.engine.query.JRJdbcQueryExecuter警告:提供的java.sql.Connection对象为空。完成!检查
    JavaCallJasperReport.java
    ,看起来
    conn=MySQLConnUtils.getMySQLConnection()
    的对象为空。实现调用用户名和密码的逻辑意味着什么?是否要
    从用户信息中选择用户名、密码…
    并将结果数据与输入值进行比较?如果是这样的话,为什么不在
    登录类中使用相同的代码呢?
    …谢谢你的建议,不过我已经解决了这个问题,但是如果生成的pdf是空白的,我就有了一个新问题!你能帮我修一下吗。