# J2EE Struts - Database connection failed - Hilfe?:(



## pat270881 (2. Nov 2005)

Hallo,

Ich habe eine kleine Web-Anwendung mit Struts entwickelt und sie funktioniert auch einwandfrei. Dann habe ich versucht eine Datenbankanbindung hinzuzufügen bzw. arbeite ich jetzt daran schon gute 1,5 Tage und bekomme das mit der Datenbank einfach nicht hin.

Ich habe mir den MySQL server 5.0 runtergeladen und installiert und weiters einen jdbc treiber mysq-connector-java-3.1.11.zip runtergeladen und ins MySQL Server 5.0 Verzeichnis entpackt. Weiters habe ich unter Systemsteuerung - Systemvariablen bei der Variable CLASSPATH den gesamten Pfad -> C:\Programme\MySQL\MySQL Server 5.0\mysql-connector-java-3.1.11\mysql-connector-java-3.1.11-bin.jar angegeben.

Dann habe ich den SQL Server 5.0 mit mysqld --console von der command line gestartet.

Weiters habe ich bei meinem Struts-Web-Projekt in Eclipse unter Project-Properties-Java Build Path - Libraries - Add External JARs ebenalls die mysql-connector-java.3.1.11-bin.jar hinzugefügt.


Um das dann zu testen habe ich zu der bereits vorhandenen test-Datenbank von mysql eine tabelle hinzugefügt und wollte die dann in der Action-Klasse verwenden und zwar mit folgenden Statements - ich habe die gesamte execute Methode in der OwnerAction Klasse angegeben:


```
public ActionForward execute(
	 	      ActionMapping mapping,
	 	      ActionForm form,
	 	      HttpServletRequest request,
	 	      HttpServletResponse response)
	 	      throws Exception {

	 	    OwnerForm ownerForm = (OwnerForm) form;
	 	      
	 	    String greet = ownerForm.getGreet();
	 	    String name = ownerForm.getName();
	 	    request.setAttribute("name", name);
	 	    request.setAttribute("greet", greet);

	 	    String address = ownerForm.getAddress();
	 	    String email = ownerForm.getEmail();
	 	    int tel = ownerForm.getTel();
	 	  
	 	    Connection conn = null;
	 	    Statement stmt = null;
	 	    ResultSet rs = null;
	 
	 	    DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());
	 	    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","sa");
	 	    
	 	  
	 	    try {
	 	          //conn = dataSource.getConnection();
	 	          stmt = conn.createStatement();
	 	          int id = 0;
	 	          rs = stmt.executeQuery("select max(id) as counter from owner");
	 	          while(rs.next()){
	 	             id = rs.getInt("counter");
	 	          }
	 	          id += 1;
	 	          stmt.executeUpdate("insert into owner values("+id+", '"+greet+"', '"+name+"', '"+email+"', '"+address+"', "+tel+")");
	 	          rs.close();
	 	          stmt.close();
	 	          conn.close();
	 	       }
	 	       catch(SQLException e){
	 	          throw new SQLException("database error");
	 	       }
	 	       // Forward control to the specified success target
	 	       return (mapping.findForward("success"));
	 }
```

Aber immer wenn ich dann die WebAnwendung ausführe und es dann zu dem Aufruf der Action kommt wird folgende Fehlermeldung geworfen:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet execution threw an exception
	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)

root cause

java.lang.NoClassDefFoundError: org/gjt/mm/mysql/Driver
	com.asprise.struts.action.OwnerAction.execute(OwnerAction.java:72)
	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5 logs.

Das heißt ja irgendwas, das der Driver nicht gefunden wurde, aber ich habe ihn ja im Classpath definiert und auch zu meinem Web-Project hinzugefügt.

Hat irgendjemand noch eine Idee, was ich hier vergessen oder falsch gemacht habe??

danke im voraus

lg


----------



## KSG9|sebastian (2. Nov 2005)

Du musst den treiber nicht als externes jar einbinden sondern in deinem Projekt nach WEB-INF/lib kopieren.

Das Ding in die Classpath-Variable aufnehmen verwirfst du am besten gleich wieder..

1. geht es net
2. willst du die Anwendung ja auch auf nem anderen Rechner laufen lassen


----------



## pat270881 (2. Nov 2005)

Das habe ich vergessen dazuzusagen:

Die mysql-connector-java-3.1.11-bin.jar habe ich auch bereits in das WebRoot\WEB-INF\lib Verzeichnis meiner EasyStruts WebApplication kopiert.

Kann da noch irgendwas sein?? - es will einfach nicht funktioniert, es kommt immer diese Fehler.


----------



## KSG9|sebastian (2. Nov 2005)

probier mal com.jdbc.mysql.Driver anstanr org.gjt...

Aber die Meldung "java.lang.NoClassDefFoundError: org/gjt/mm/mysql/Driver" sagt alles..irgendwas stimmt mit der lib net


----------



## Bleiglanz (2. Nov 2005)

warum machst du nicht den Standardweg mit Class.forName, die Treiber registrieren sich automatisch bei JDBC



> Weiters habe ich unter Systemsteuerung - Systemvariablen bei der Variable CLASSPATH den gesamten Pfad -> C:\Programme\MySQL\MySQL Server 5.0\mysql-connector-java-3.1.11\mysql-connector-java-3.1.11-bin.jar angegeben.


tu das wieder weg

die jar muss natürlich in dem gerade laufenden Tomcat in genau dieser Webanwengung in WEB-INF/lib liegen? Ist das der Fall?

ggf mal den Tomcat neu starten...


----------



## KSG9|sebastian (2. Nov 2005)

stimmt..

Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection(blah)


----------



## pat270881 (2. Nov 2005)

Na es geschehen doch noch Wunder, die Connection hat jetzt funktioniert. Ich verwende den JBoss, habe, wie du gesagt hast, die Pfadangabe aus der Classpath Variable rausgenommen und jetzt läufts auf einmal, keine ahnung, was ihn da gestört hat.

danke auf jedenfall!!


----------

