Alex02 hat gesagt.:
mein SQL-Befehl sieht folgendermaßen aus:
Select *
From DATAGROUPB2DADD8D
Where DATAGROUPB2DADD8D.DT_XANTRAGSDATUM_57EA5290 >= $P{DATUM}
(das ist nur mal kurz zusammengefasst, ich hab da ca. 8 joins)
Ich habs mittlerweile auch zum Laufen bekommen, mit der Parameterdeklaration:
Name: DATUM
Parameter Class Type:java.util.Date
Default value expression: new Date(1,9,2005)
Das schein syntaktisch zu .
Das Problem jedoch ist, dass er alle Eintrage aus der DB (SQL-Server) ausliest.
Schon klar... vielleicht solltest du einfach alljene selektieren die du auslesen willst.
Ich weiß gar nicht ob das JasperReports das mittlerweile zuordnen kann, in welche Felder das dann kommt (ich verwendet immer eine JRDataSource zum lesen von Daten).
Sonst musst du halt ohne dem Stern arbeiten...
und wenn dir die Bezeichnungen nicht passen sollten das AS Schlüsselwort in der Query verwenden.
Also statt select * from ...
select xyz as field_xyz from ...
und du hast dann ein Field welches field_xyz lautet.
Der Typ wird natürlich auch passen müssen.
Also kein Integer, wenns ein String ist, und so Sachen...
Alex02 hat gesagt.:
Die Felder, die ich mit dem Paramter vergleiche sind vom Typ "Timestamp".
Wenn ich mir das Datum über folgenden Befehl:
Date datum;
System.out.println(datum = new Date(1,9,2005) );
rausgeben lasse, bekomme ich dieses Ergebnis:
Thu Mar 28 00:00:00 CET 1907
Hast Du möglicherweise einen Lösungsvorschlag
Und noch eine Frage:
Ich weiß nicht genau wie der Timestamp abgesetzt wird, jedoch wie machst du denn sonst die Queries?
also wie machst du sonst deine Queries mit denen du auf den Timestamp selektierst?
Gibst du da einen Zahlenwert an?
Ich verwendet wenn ich Datum Werte verwende für Oracle die Funktion to_date(...). Ich kann aber nicht sagen ob es diese Funktion auch bei deiner Datenbank gibt.
Ansonsten übergib statt dem Date Field einen String, und der String muss das Format haben wie er in der Query benötigt wird...
Alex02 hat gesagt.:
Ich möchte disen Report später über eine java.class komplett kompilieren und ausgeben (pdf und xls).
Ohne Parameter stellt es kein Problem dar, bei pdf auch mit. Weisst Du, wie ich Parameter an xls übergeben kann
Irgendwie mit :
Map inhalt = new HashMap ();
Date datum = new Date(1,9,2005);
inhalt.put("$P{DATUM}",datum); ?
Also prinzipiell wird bei Jasper unterschieden zwischen Kompilierung und Generierung (Füllen des Reportkompilats).
Die Kompilierung wandelt deine JRXML Datei in eine JASPER Datei um, die eigentlich nichts anderes als eine binäre Javaklasse (Classfile) ist.
Die Kompilierung muss nur einmal gemacht werden. Bei der Kompilierung werden die statischen Teile etc. für den Report vorbereitet.
Das Füllen (die eigentliche Generierung) passiert dann mit der Angabe des JASPER Files, den Parameter (du hast recht, es ist eine Map die übergeben wird) und einer DataSource (Interface JRDataSource) oder einer Connection (wenn man eine SQL Abfrage innerhalb des Reports verwendet).
So wie sieht das ganze in Java Code aus:
Code:
/**
* Kompiliert einen Report und liefert das File mit dem kompilierten JasperReport.
*
* @param xmlFile Report XML File
* @return JasperReport File (.jasper Endung)
*/
public File compileReport(File xmlFile) {
try {
String jasperFileName = JasperCompileManager.compileReportToFile(xmlFile.getPath());
return new File(jasperFileName);
} catch (Exception e) {
e.printStackTrace(System.err);
return null;
}
}
/**
* Generiert ein PDF File aus einem bereits kompilierten JasperReport File.
* Die Daten für den Report werden aus der Parameter Map und der Datenbank Connection bezogen.
*
* @param jasperFile JasperReport File (.jasper Endung)
* @param parameters Parameter Map
* @param connection Verbindung zu einer Datenbank
* @return PDF File
*/
public File generatePDF(File jasperFile, Map parameters, Connection connection) {
try {
String pdfFile = JasperRunManager.runReportToPdfFile(jasperFile.getPath(),
parameters,
connection);
return new File(pdfFile);
} catch (Exception e) {
e.printStackTrace(System.err);
return null;
}
/**
* Generiert aus einem bereits kompilierten JasperReport File die dazugehörigen PDF Daten.
* Die Daten f?r den Report werden aus der Parameter Map und der JRDataSource bezogen.
*
* @param jasperFile JasperReport File (.jasper Endung)
* @param parameters Parameter Map
* @param datasource JRDataSource mit Daten f?r den Report
* @return Byte Array gefüllt mit den PDF Daten
*/
public byte[] generatePDFBytes(File jasperFile, Map parameters, JRDataSource datasource) {
try {
byte[] data = JasperRunManager.runReportToPdf(jasperFile.getPath(),
parameters,
datasource);
return data;
} catch (Exception e) {
e.printStackTrace(System.err);
return null;
}
}
/**
* Generiert ein XLS (Excel) File aus einem bereits kompilierten JasperReport File.
* Die Daten für den Report werden aus der Parameter Map und der JRDataSource bezogen.
*
* @param jasperFile JasperReport File (.jasper Endung)
* @param parameters Parameter Map
* @param datasource JRDataSource mit Daten für den Report
* @return XLS Bytes
*/
public byte[] generateXLSBytes(File jasperFile, Map parameters, JRDataSource datasource) {
if (!systemInitialized) {
logger.error("ReportGenerator is not initialized!");
return null;
}
try {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(1024 * 32);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperFile.getPath(), parameters, datasource);
JExcelApiExporter exporter = new JExcelApiExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, outputStream);
exporter.setParameter(JExcelApiExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);
exporter.exportReport();
return outputStream.toByteArray();
} catch (Exception e) {
e.printStackTrace(System.err);
return null;
}
}
so das waren ein paar Beispiele...
es ist so, dass die Parameter Map einfach als Key den Namen des Parameters hat, und Value ist der Wert oder Objekt des Parameters...
also:
Code:
Map parameterMap = new HashMap();
parameterMap.put("MeinParameterName", new Double(2.5)); // Parameter "MeinParameterName" <=> $P{MeinParameterName}
Probier das mal, und schau dir mal die JavaDoc Doku von JaserReports an, es gibt nämlich noch weitere Methoden um Reports zu erzeugen...
mfg
ATha1