# Keine Connection mit DB - ganz einfache Testanwendung



## WoodyTD (23. Dez 2013)

Hallo liebes Forum,

ich habe vor kurzem mit Java EE angefangen. Bin aber gerade am Verzweifeln, weil ich an etwas ganz simplen scheitere. Ich möchte gerne eine Verbindung zu einer Datenbank erstellen (lokal). Dafür nutze ich den MySQL - Community Server. Zur Administration nutze ich die MySQL - Workbench. Meine Anwendung läuft auf dem Tomcat 7 und mein BS ist Mac OS X 10.9.1 . Die Funktion "Testverbindung" der Workbench verläuft problemlos und "test" habe ich auch angelegt. Der SQL- Server läuft auch.

Mein Java- Code sieht so aus:

```
<%@page import="java.sql.*"%>
<%!public static Connection connection() {
	try{
	Class.forName("com.mysql.jdbc.Driver").newInstance();
	return DriverManager.getConnection("jdbc:mysql://localhost/test","root","root");}
	catch(Exception e){
		return null;
	}
	}

	public static boolean close(Connection c) {
		try{
			c.close();
			return true;
		}
		catch(Exception e){
			throw new Error(e);
			return false;
		}
	}%>

<%@ page language="java" contentType="text/html; charset=UTF8"
	pageEncoding="UTF8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF8" />
<title>Hello World</title>
</head>
<body>

	<%
		out.println("Hallo");
		Connection c = connection();
		out.println(c);
		close(c);
	%>
</body>
</html>
```

Wenn ich nun aber die Seite über den Browser aufrufe kommen, bedingt durch Error, die folgenden Fehlermeldung, mit denen ich nichts anfangen kann:

```
HTTP Status 500 - Unable to compile class for JSP:

type Exception report

message Unable to compile class for JSP:

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

exception

org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 18 in the jsp file: /index.jsp
Unreachable code
15: 		}
16: 		catch(Exception e){
17: 			throw new Error(e);
18: 			return false;
19: 		}
20: 	}%>
21: 


Stacktrace:
	org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103)
	org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:366)
	org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:468)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:378)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.47 logs.

Apache Tomcat/7.0.47
```

Lasse ich "new Error(e)" weg, kommt, wie zu erwarten ist, "Hallo _null_"
Ich hoffe ihr könnt mir helfen.

Viele Grüße
WoodyTD


----------



## turtle (23. Dez 2013)

> throw new Error(e);
> return false;


Sieht aber auch merkwürdig aus, oder?

Zunächst sagt die Signatur connection aus, das da keine Exception kommt, dann sieht man aber ein throw() und DANACH kommt noch ein return. Diese letzte Anweisung gibt bei mir folgende Fehlermeldung

```
Unreachable code
```
.

Das würde ich korrigieren und gebe zu Protokoll, das JSP eine Erfindung des Teufels sind
ZUmindest würde ich einbauen, damit du erkennst was das Problem beim Aufbau der Verbindung ist.

```
catch (Exception e) {
	e.printStackTrace();
}
```

Möchte man das trotzdem einsetzen, kann man JSP kompilieren lassen und weiß vorher, das zumindest die Syntax richtig ist. Ist recht ordentlich hier beschrieben.


----------



## WoodyTD (23. Dez 2013)

Erst wusste ich nicht so recht was du mir mit "sieht wirklich merkwürdig aus" sagen wolltest aber nachdem ich den Code aus der .jsp rausgenommen haben und in eine .java gesteckt habe, ist mir auch aufgefallen, dass nicht beides geht. 
--> Also return raus.
Jetzt bekomme ich eine umfangreichere Fehlermeldung, die wohl etwas aussage kräftiger ist, für euch, hoffe ich. Ich stehe nämlich immer noch "wie ein Ox vorm Tor" -.- 
Ich vermute mein Fehler liegt bei diesem Codeabschnitt:
[JAVA=8]Class.forName("com.mysql.jdbc.Driver").newInstance();[/code]
In dem Tutorial, nach dem ich das gemacht habe, kann der das nämlich via Autovervollständigung finden, ich nicht. Muss da noch irgendwas importiert etc. werden?

Aktuelle Fehlermeldung:

```
HTTP Status 500 - javax.servlet.ServletException: java.lang.Error: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

type Exception report

message javax.servlet.ServletException: java.lang.Error: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

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

exception

org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.Error: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
root cause

javax.servlet.ServletException: java.lang.Error: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:912)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:841)
	org.apache.jsp.index_jsp._jspService(index_jsp.java:92)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
root cause

java.lang.Error: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
	jsp.MySQl.connection(MySQl.java:13)
	org.apache.jsp.index_jsp._jspService(index_jsp.java:80)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
root cause

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
	java.lang.Class.forName0(Native Method)
	java.lang.Class.forName(Class.java:190)
	jsp.MySQl.connection(MySQl.java:9)
	org.apache.jsp.index_jsp._jspService(index_jsp.java:80)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.47 logs.

Apache Tomcat/7.0.47
```

Danke für eure Hilfe


----------



## ARadauer (23. Dez 2013)

hat du den mysql treiber auch im classpath des tomcat gepackt?
ich denke das ist ein relativ häufiger fehler... https://www.google.at/search?q=java...tFoundException:+com.mysql.jdbc.Driver+tomcat wird sicher einiges erklären... zb "Tomcat 7 requires that JDBC driver JARs must go in its /lib directory:"

zum ersten fehler: ja die jsp hat einen compile fehler geworfen...


----------



## turtle (23. Dez 2013)

Wie mein Freund ARadauer richtig anmerkte, musst du den JDBC-Treiber bekannt machen.

Die Fehlermeldung ist eindeutig

```
java.lang.ClassNotFoundException
```

Im Classpath einer Webanwendung ist das WEB-INF/classes Verzeichnis und auch das Verzeichnis *WEB-INF/lib*.

Im Letzteren können JARs hinterlegt werden, die die Webanwendung benötigt. Hier gehört also dein JDBC-Treiber rein.


----------



## WoodyTD (23. Dez 2013)

Endlich... 

Vielen Dank euch beiden. Da wäre ich nie drauf gekommen. 
Jetzt geht es endlich. 

Wünsche euch frohe Weihnachten und einen guten Rutsch.

VG
WoodyTD


----------



## turtle (23. Dez 2013)

Dito


----------

