sacklzement Geschrieben 21. November 2007 Geschrieben 21. November 2007 Hallo zusammen! ich habe eine JSP seite, importiere mir eine Java-Klasse und möchte dann eine Methode abfahren. Es funktioniert aber nicht. Was ist falsch? JSP-Seite: <HTML> <head> <title>Status</title> </head> <body> <%@ page import="Status.*;" %> <%! String[] werte = new String[4]; %> <% werte = new Status.werte().holeData() %> *** Ausgabe *** </body> </HTML> In der Java-Klasse wird ein SQL-Statement ausgeführt was mir aus einer DB Daten zurückgibt. Diese werden dann ja der Variablen werte in der JSP seite gegeben. Zurückgegeben wird ein Array. Tomcat-Verzeichnis: Die Klasse liegt unter Root/classes/Status Fehlermeldung: org.apache.jasper.JasperException: Unable to compile class for JSP An error occurred at line: 8 in the jsp file: /status.jsp Generated servlet error: The method daten() is undefined for the type werte Bitte um Hilfe!! Ich bin JSP-neuling Vielen Dank im Voraus. Gruß Sacklzement Zitieren
frquadrat Geschrieben 21. November 2007 Geschrieben 21. November 2007 new Status.werte().holeData() Angenommen, Du willst eine neue Instanz der Klasse Status erzeugen, dann mal besser: Status s = new Status(); Du willst auf diese neue Instanz die Methode werte() aufrufen? s.werte(); Da Du keinerlei Infos gibst, wie die Klasse Status aussieht, kann man nur raten. Es könnte jedoch sein, dass in der Klasse Status die static Methode public static Object werte() { ...} definiert wurde. Dann lautet der Aufruf: Status.werte(); Zitieren
sacklzement Geschrieben 21. November 2007 Autor Geschrieben 21. November 2007 import java.sql.*; public class werte { String Query; ResultSet rs; String[] werte = new String[4]; public String[] holeData() { Query = "SELECT * FROM POR_Buchungsdatum"; rs = new Portal.cls_connect().select(Query); try { int i = -1; while(rs.next()) { i = i + 1; werte = rs.getString(2); } } catch(SQLException e) { System.err.println("Error"); e.printStackTrace(); } return werte; } } Zitieren
Mohadipe Geschrieben 21. November 2007 Geschrieben 21. November 2007 Hi, ok also du hast ne Klasse "Werte" in dieser die Funktion holeData() Dann sollte der Aufruf so ausschauen: Werte w = Werte(); w.holeData() Frage zur Klasse Werte. Du hast dir dort ein StringArray mit der länge 4 definiert. Bist du dir sicher das in deiner Tabelle immer nur 4 Datensätze drin sind? Ich würd dafür eine List verwenden. List werte = new ArrayList(); Mit java 1.5, falls ihr das verwendet, geht das auch Typsicher. Dein logging im Fehlerfall würd ich auch nochmal überdenken. Habt ihr nicht vielleicht schon eine Bibliothek die ihr für´s logging verwendet wird? z.B log4j Ausserdem solltest du überdenken ob du die Methode nicht lieber mit einer Exception abbrechen lässt in so einem Fall (RuntimeException werfen oder NotFoundException wenn´s nicht so schlimm ist... je nachdem halt). Ich denk da kannst du noch bisschen was optimieren. - brauchst du die definierten Variablen als Instanzvariablen - evtl. solltest du auf dem Resultset in nem finally close() aufrufen ... kannst ja mal drüber nachdenken. Gruß Moha Zitieren
sacklzement Geschrieben 22. November 2007 Autor Geschrieben 22. November 2007 Hallo, hat funktioniert. Aber ich bekomme gleich das nächste Problem. Er kann keine Verbindung zur DB herstellen. Laut Logfile des Tomcat´s bekomme ich eine NullPointerException mit der begründung das er den Datenquellennamen nicht findet, da kein Standardtreiber angegeben ist. Wenn ich die Klasse im Eclipse laufen lasse bekommen ich die daten so wie es sein soll. Die Datenbank ist in der ODBC-Verbindung in der Verwaltung eingetragen. Code: Statement command; Connection conn; puplic void connect() { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conn = DriverManager.getConnection("jdbc:odbc:TDC"); System.out.println("Connected to DB"); command = conn.createStatement(); } catch(SQLException se) { System.out.println(se); se.printStackTrace(); } } Zitieren
Amstelchen Geschrieben 22. November 2007 Geschrieben 22. November 2007 Wenn ich die Klasse im Eclipse laufen lasse bekommen ich die daten so wie es sein soll. Die Datenbank ist in der ODBC-Verbindung in der Verwaltung eingetragen. hast du eine benutzer- oder system-DSN angelegt? s'Amstel Zitieren
sacklzement Geschrieben 22. November 2007 Autor Geschrieben 22. November 2007 Hatte eine Benutzer-DSN, habe dieses jetzt auf System-DSN geändert. Es funktioniert aber trotzdem nicht. Was habe ich noch für möglichkeiten dieses Problem zu lösen? Zitieren
Amstelchen Geschrieben 22. November 2007 Geschrieben 22. November 2007 welches RDBMS steht denn dahinter bzw. welcher datenbankreiber ist denn der system-DSN zugewiesen? s'Amstel Zitieren
sacklzement Geschrieben 23. November 2007 Autor Geschrieben 23. November 2007 Als treiber ist der Microsoft Access-Treiber(*.mdb) in der version 4.00.6019.00 ausgewählt. Zitieren
Amstelchen Geschrieben 23. November 2007 Geschrieben 23. November 2007 Laut Logfile des Tomcat´s bekomme ich eine NullPointerException mit der begründung das er den Datenquellennamen nicht findet, da kein Standardtreiber angegeben ist. das heisst dann also "data source not found and no default driver specified". ist das sicher eine NullPointerException und keine SQLException? welche version von MDAC ist auf dem system installiert? überprüfe auch, ob der Jet-ODBC-treiber korrekt installiert wurde. s'Amstel Zitieren
sacklzement Geschrieben 26. November 2007 Autor Geschrieben 26. November 2007 MDAC??? Jet-ODBC??? Bin leider in der Javawelt ein noob und weiß auch jetzt auch nicht wo ich das alles finde! Laut logfile ist es eine NullPointerException, was auch wieder logisch ist da er den Treiber für die DB nicht finden kann! Wäre super wenn du mir sagen kannst wo ich nachsehen soll. Gruß Sacklzement Zitieren
Amstelchen Geschrieben 26. November 2007 Geschrieben 26. November 2007 mein angesprochenes MDAC hat mit Java erstmal garnix zu tun; wenn du aber auf eine MS-Access datenbank zugreifst, benötigst du einen entsprechenden treiber, welcher allerdings üblicherweise mit windows schon mitgeliefert wird. die angesprochene fehlermeldung, dass der treiber nicht gefunden werden kann, legt nahe, dass unter gewissen umständen nicht darauf zugegriffen werden kann. konkret sind das MSJET35.DLL (Jet 3.5) bzw. MSJET40.DLL (Jet 4.0), ODBCJT32.DLL (Jet ODBC treiber) diese (und u.u. noch andere für den treiber wichtigen dateien) sollten im SystemRoot\System32 vorhanden sein. s'Amstel Zitieren
sacklzement Geschrieben 26. November 2007 Autor Geschrieben 26. November 2007 Hallo, unter Windows/System32 finde ich die MSJET40.dll und die ODBCJT32.dll!! Sind beide vorhanden. Zitieren
sacklzement Geschrieben 27. November 2007 Autor Geschrieben 27. November 2007 Hallo, JSP-Seite läuft warum weiß ich auch nicht! Hab ein neues System aufgesetzt und das ganze nochmal kompiliert. Jetzt läuft diese. Vielen Dank Gruß Sacklzement Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.