# Jasperreport in Java Ausführen



## achillesat (6. Jan 2011)

Ich möchte einen Bericht aus JasperReport in Java ausführen... bisher habe ich folgenden Code geschrieben :


```
public class ReportDriver {
	
	// Hostname
	private static String dbHost = "....";

	// Port -- Standard: 3306
	private static String dbPort = "3306";

	// Datenbankname
	private static String database = "....";

	// Datenbankuser
	private static String dbUser = "....";

	// Datenbankpasswort
	private static String dbPassword = "....";
    
    public ReportDriver() {
        
    }
    
    public static Connection connectDB(String dbHost,String database, String dbUser, String dbPassword) {
        Connection jdbcConnection = null;
        try{
            Class.forName("com.mysql.jdbc.Driver");
            jdbcConnection = DriverManager.getConnection("jdbc:mysql://" + dbHost + "/" // hole eine Verbindung zur DB
			+ database, dbUser, dbPassword);;
        }catch(Exception ex) {
            String connectMsg = "Could not connect to the database: " + ex.getMessage() + " " + ex.getLocalizedMessage();
            System.out.println(connectMsg);
        }
        return jdbcConnection;
    }
    

    public static void runReport(String dbHost,String database, String dbUser,String dbPassword,String reportFile) {
        try{
            JasperDesign jasperDesign = JRXmlLoader.load(reportFile);
            JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
            Connection jdbcConnection = connectDB(dbHost,database,dbUser,dbPassword);
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, jdbcConnection);
            JasperViewer.viewReport(jasperPrint);
        }catch(Exception ex) {
            String connectMsg = "Could not create the report " + ex.getMessage() + " " + ex.getLocalizedMessage();
            System.out.println(connectMsg);
        }
    }
    
    public static void main(String[] args) {
    	
            String dbHost = args[0] ;
            String database = args[1];
            String dbUser = args[2];
            String dbPassword = args[3];
            String reportFile = args[4]; 
            runReport(dbHost,database,dbUser,dbPassword);
        
        return;
        
    }
}
```


Wenn ich versuche den Code auszuführen erscheint folgende Fehlermeldung: 

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	The method runReport(String, String, String, String, String) in the type ReportDriver is not applicable for the arguments (String, String, String, String)


Kann mir jemand sagen was das ist und ist der Rest des Quellcodes so in Ordnung? Falls nicht würde ich mich sehr über Tipps bzw. Verberssungsvorschläge freuen


----------



## meiersandi (6. Jan 2011)

Hi,
die Fehlermeldung:

"The method runReport(String, String, String, String, String) in the type ReportDriver is not applicable for the arguments (String, String, String, String)"

sagt dass die Methode runReport als Parameter 5 Strings braucht,
beim Aufruf bekommt die Methode aber nur 4 (Parameter reportFile fehlt).

...hoffe das hilft erstmal weiter.

vG


----------



## achillesat (10. Jan 2011)

Bei mir kommt eine Exception nach der anderen. Wenn ich die eine behoben habe, erscheint immer eine neue... 


Mein Code sieht jetzt bis jetzt so aus: (Bin zwar noch ein Anfänger in Sachen Java, aber meiner Meinung nach sieht der Quelltext richtig aus...) 


```
public class ReportDriver {
	
 public static Connection connectDB(String dbHost,String database, String dbUser, String dbPassword) {
        Connection jdbcConnection = null;
        try{
            Class.forName("com.mysql.jdbc.Driver");
            jdbcConnection = DriverManager.getConnection("jdbc:mysql://" + dbHost + "/" // hole eine Verbindung zur DB
			+ database, dbUser, dbPassword);;
        }catch(Exception ex) {
            String connectMsg = "Could not connect to the database: " + ex.getMessage() + " " + ex.getLocalizedMessage();
            System.out.println(connectMsg);
        }
        return jdbcConnection;
    }
    

    public static void runReport(String dbHost,String database, String dbUser,String dbPassword,String reportFile) {
        try{
            JasperDesign jasperDesign = JRXmlLoader.load(reportFile);
            JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
            Connection jdbcConnection = connectDB(dbHost,database,dbUser,dbPassword);
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, jdbcConnection);
            JasperViewer.viewReport(jasperPrint);
        }catch(Exception ex) {
            String connectMsg = "Could not create the report " + ex.getMessage() + " " + ex.getLocalizedMessage();
            System.out.println(connectMsg);
        }
    }
    
    public static void main(String[] args) {
    	
            String dbHost = "";
            String database = "";
            String dbUser = "";
            String dbPassword = "";
            String reportFile = "C:\\Vorlage.Jrxml"; 
            runReport(dbHost,database,dbUser,dbPassword,reportFile);
        
        return;
        
    }
}
```


Wenn ich diesen Code ausführe kommt jetzt folgende Exception: 


Exception in thread "main" java.lang.NoSuchMethodError: antlr.LexerSharedInputState.getTokenStartColumn()I


Liegt es an meinem geschriebenen Code oder fehlt noch eine .jar Datei die eingebunden werden muss?


----------



## meiersandi (12. Jan 2011)

Hi,
hast du schon versucht zu debuggen bis zu der Stelle wo der Fehler kommt...

java kann anscheinend die Methode: getTokenStartColumn() nicht finden.
da ich den Aufruf in dem vom dir geposteten Quellcode nicht finden kann würde ich erst einmal 
darauf tippen das vielleicht noch eine Bibliothek oder ähnliches fehlen könnte...

vG


----------

