2016-12-20 1 views
-1

Ich stehe vor einem sehr seltsamen Problem. Ich versuche einen Bericht in DynamicReports API zu generieren. Der Bericht wird ohne die Klausel WHERE generiert, wird aber nicht mit WHERE Klausel generiert. Die Datenbank ist MySQL. Jede Hilfe wird sehr geschätzt. Hier ist der Code:DynamicReports erstellt keinen Bericht mit Where-Klausel am Datum

Service-Klasse:

public class ReportSevice { 
    public void createReport (String reportDate) { 
     System.out.println(reportDate); 
     String sql_statement = null; 
     Connection connection = null; 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      connection = DriverManager.getConnection(
        "jdbc:mysql://localhost:3306/world","root", "password"); 
      sql_statement = "SELECT id, fName, lName, pickUpDate FROM reservations_db WHERE pickUpDate = " + reportDate; 
     } catch (SQLException e) { 
      e.printStackTrace(); 
      return; 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
      return; 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     JasperReportBuilder report = DynamicReports.report(); 
     report 
     .columns(
       Columns.column("Customer Id", "id", DataTypes.integerType()), 
       Columns.column("First Name", "fName", DataTypes.stringType()), 
       Columns.column("Last Name", "lName", DataTypes.stringType()), 
       Columns.column("Date", "pickUpDate", DataTypes.stringType())) 
     .title(Components.text("********Report By Date********") 
       .setHorizontalTextAlignment(HorizontalTextAlignment.CENTER)) 
     .pageFooter(Components.pageXofY()) 
     .setDataSource(sql_statement, connection); 

     try { 
      report.show(); 
     } catch (DRException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

Mögliche Duplikat [Filter nach Datetime MYSQL Formating] (http://stackoverflow.com/questions/16657202/filter-by-datetime-mysql-formating) –

+0

Haben Sie die Abfrage mit Hilfe eines MySQL-Clients (zB MySQL Workbench) überprüft? Was ist ein Typ von * pickUpDate * Spalte in DB? –

+0

@AlexK, der Typ von PickUpDate ist String – JoeZ

Antwort

0

Endlich habe ich es funktioniert. Die Lösung ist sehr einfach. Ich teile den Code hier für zukünftige Benutzer. Statt

sql_statement = "SELECT id, fName, lName, pickUpDate FROM reservations_db WHERE pickUpDate = " + reportDate; 

: Schreibe:

sql_statement = "SELECT id, fName, lName, pickUpDate FROM reservations_db WHERE pickUpDate=$P{reportDate}" 
-2

Ich kann nicht versprechen, dass dies Ihr Problem lösen wird, aber es ist worht geben einen Schuss: Anstatt eine gesamte Abfrage des Schreibens in Ihrem Quelle, komplett mit "where" -Klauseln und was nicht, eine Funktion in SQL, die PickUpDate als Parameter übernimmt, führt die Abfrage und gibt die Tabelle zurück. Und nannte es wird in etwa so aussehen: sql_statement = „select * from function_name (“ + reportDate + „)“

Ich hoffe, das hilft, ich arbeite mit Jasperreports und mein Leben ist viel einfacher gewesen, da ich diese Methode addopted . Prost.

+0

IMHO, es ist zu teuer, um eine Funktion zu erstellen, um einen einfachen Filter –

+0

@ D.Tabakov, können Sie mir bitte eine Beispiel-SQL-Funktion und wie diese Funktion von Java aufrufen Code? Schreibe ich die Funktion sql in mysql workbench, speichere sie und rufe von Java-Code? – JoeZ

+0

@D. Tabakov, und sprechen Sie über den Aufruf von JasperReports API Call oder DynamicReport API Anruf? – JoeZ

Verwandte Themen