# jdbc mysql und windoof :)



## Christian Fein (22. Oktober 2002)

Hi ich ärger mich grad mit Windoof - jdbc driver rum.

Ich bekomme immer Fehlermeldung:
ClassNotFoundException

Vorgang bei der Installation des JConnecter2 mysq jdbc Driver 

WinXP
Die kompletten Files (jar archiev) nach
C:\Java\jdbc_mysql
entpackt.

zur CLASSPATH Variable C:\Java\jdbc_mysql
hinzugefügt

dennoch erhalte ich die Fehlermeldung:
bei
Class.forName("com.mysql.jdbc.Driver");

-> ClassNotFoundException

Also kein Programmtechnischer Fehler.
Doku des jdbc treiber hilf mir nicht weiter.

Danke im Vorraus.


----------



## Arne Buchwald (22. Oktober 2002)

Tag Holy,

ich bin mir nicht sicher, ob ich dir helfen kann ...  Evtl. hilft dir http://www.torsten-horn.de/techdocs/java-sql.htm#JDBC und die dort weiterführenden Links zu Sun ....


----------



## Christian Fein (23. Oktober 2002)

Ok danke  aber das Problem ist über Sun Forte Kann ich den Treiber einbinden doch wenn ich den Treiber 
wie beschrieben mit: 
class.forname.....
bekomme ich i meinem servlet den fehler classntfoundexception


----------



## Thomas Darimont (28. Februar 2003)

Hi!

Versuch doch einfach mal die Jar-Datei des He´rstellers in das lib/ext Verzeichnis deiner Laufzeitumgebung reinzukopieren...

c:\path_to_java\lib\ext

(kann auch nicht schaden wenn du ihn in das Lib ext bzw. nur Lib Verzeichnis deines SDK's als auch deines JRE's reinkopierst...*g*)

...

bei mir funzt das so... mit der Jar-Datei (wies jetzt den Namen nicht) von Mysql als auch mit der vom MS Sql Server...

Gruss Tom


----------



## Christian Fein (28. Februar 2003)

danke tdar2 aber das problem ist schon lange gelöst.

Das war ein eclipse problem. Der ignoriert das lib verzeichnis der java installation bei tomcat projekten.

Hat sich geregelt


----------



## Thomas Darimont (28. Februar 2003)

War ja klar...*G* ...dachte nur, war auch nur für die Leute gedacht, die das Prob. eventuell auch haben... ist manchmal so eine Sache mit den Fragen hier im Forum... da stellt jemand ein Problem dar, löst es dann jedoch selbst, stellt aber die Gefundene Lösung nicht Online, was anderen Leuten, die dass selbe Problem haben nicht weiterhilft...

Gruss Tom


----------



## Christian Fein (28. Februar 2003)

auch wahr :]


----------



## OliWan (25. August 2003)

*...habe ein Problem mit der Intallation*

Hi all,

ich versuche mich im Augenblick an JDBC und MySQL und komme einfach
nicht weiter.

Ich habe MySQL und TOMCAT 3.3 auf meiner Windows 98 Maschine installiert.

Um per Java-Servlet auf MySQL zugreifen zu können habe ich mir J/Connect von MySql runter geladen und nun beginnen meine Probleme.

Ich kriege immer eine ClassCastException, aber ich kapiere einfach nicht warum. 


```
import java.io.*;
import java.net.*;
import java.sql.*;
import java.util.*;

public class JDBC
{

   static Connection con;  

   public static void init() 
   {
      //Treibername : hier ein JDBC-ODBC-Brückentreiber
     String driver = "org.gjt.mm.mysql.Driver";
      try
      {
	 // JDBC-Treiber laden
	 Class.forName(driver);
	
//   Class.forName("org.gjt.mm.mysql.Driver").newInstance(); -> gibt 
//   ne Fehlermeldung beim Compilieren - Nutze JOE hierfür


	 // JDBC-URL zur Datenbank test  - 3306 ist das der richtige Port 
         String url="jdbc:mysql://localhost:3306/test";
      
         // Aufbau der Verbindung
         con=DriverManager.getConnection(url,"obivan","langeo");
       
      }
      catch(ClassNotFoundException e)
      {
	 System.err.println("JDBC-Treiber "
			    + driver + " nicht geladen");
	 e.printStackTrace(System.err) ;
      }
      catch (SQLException e2)
      {
         System.err.println("Fehler bei DB-Connection "+e2.getMessage());
      }
   


}/* end Klasse JDBCServlet */
```
-> Ich kenne mich Servern nicht so richtig aus. Könnt ihr mir den "echte" Schritt für Schritt anleitung empfehlen? Was muß wohin kopiert werden (jar's) und was muß als Classpath hinterlegt werden etc.)?

Danke für die Hilfe schon im voraus.

Gruß Olli


----------



## Thomas Darimont (25. August 2003)

Servus!

Zum einen könntest du die Datei mysql-connector-java-3.0.6-stable-bin.jar
in den CLASSPATH aufnehmen mit:

E:\j2sdk_nb\j2sdk1.4.2\lib;E:\j2sdk_nb\j2sdk1.4.2;C:\MYSQL\DRIVER\mysql-connector-java-3.0.6-stable-bin.jar;c:\java_work;.

oder: 

du kopierst die Datei mysql-connector-java-3.0.6-stable-bin.jar ins lib Verzeichnis deiner J2SDK Installation ...

Ich glaub bei ersterem ist unter Win98 ein restart erforderlich ...

....ps.:

Versuch dann mal die Klasse so zu laden:

```
try{

Thread.currentThread().getContextClassLoader().loadClass("org.gjt.mm.mysql.Driver").newInstance();

}catch(ClassNotFoundException cnfe){
     cnfe.printStackTrace();
}
```

//Ja 3306 ist der richtige Port ...

Gruß Tom


----------



## OliWan (26. August 2003)

Hey Tom,

danke für deine schnelle Antwort. 

Ich habe beim Compilieren mit deinem Codevorschlag immer folgenden Fehler:

unreported exception java.lang.InstantiationException; must be caught or declare to be thrown

Den hatte ich vorher auch schon (wenn ich mit new Instance() gearbeitet haben.

Im Web habe ich schon nach dieser Fehlermeldung gesuch, aber leider nichts gefunden....

Hope you can help...

Gruß Olli


----------



## Thomas Darimont (26. August 2003)

Servus!

Dann versuchs mal so ...


```
...

try{

Thread.currentThread().getContextClassLoader().loadClass("org.gjt.mm.mysql.Driver").newInstance();

}catch(ClassNotFoundException cnfe){
     cnfe.printStackTrace();
}catch(InstantiationException ie){
    ie.printstackTrace();
}
...
```


... Gruß Tom


----------



## OliWan (27. August 2003)

Hey Tom,

danke für den Tipp - das mit dem catchen der Exception habe ich vorher nie so richtig verstanden - nun ist es klar.

Ich habe noch eine weitere Exceptin gecatcht (IllegalAccessException) und nun
bin ich da, wo ich vorher schon war....

java.lang.ClassCastException: JDBC
	at org.apache.tomcat.facade.ServletHandler.getServlet(ServletHandler.java:346)
	at org.apache.tomcat.facade.ServletHandler.preInit(ServletHandler.java:439)
	at org.apache.tomcat.facade.ServletHandler.init(ServletHandler.java:228)
	at org.apache.tomcat.facade.ServletHandler.service(ServletHandler.java:472)
	at org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:917)
	at org.apache.tomcat.core.ContextManager.service(ContextManager.java:833)
	at org.apache.tomcat.modules.server.Http10Interceptor.processConnection(Http10Interceptor.java:176)
	at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:494)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:516)
	at java.lang.Thread.run(Thread.java:536)



...was heißt ClassCast Exception überhaupt?!

Gruß Olli


----------



## Christian Fein (27. August 2003)

ClassCasting ist das "umwandeln" casten einer Klasse in eine
Oberklasse.

Durch die Polymorphie kann die erweiterte Klasse immer als Basisklasse
fungieren. 
So kann mann auch explizit in die Basisklasse casten:

->
String mystring = "jaja";
Object a = (Object) mystring;
<-

ClassCastException wird geworfen wenn das casten nicht möglich war.


----------



## OliWan (27. August 2003)

...wenn ich dich richtig verstehe, dann konnte org.gjt.mm.mysql.Driver nicht
gecastet werden.

Wie finde ich nun raus, warum es nicht ging, geht?!


----------



## Thomas Darimont (27. August 2003)

Servus!


```
...
import java.sql.*;
...
private Connection con;
...
 try{
            Thread.currentThread().getContextClassLoader().loadClass("org.gjt.mm.mysql.Driver").newInstance();
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/tutv4",user,pwd);
            System.out.println("Öffne DB Connection!");
        }catch(SQLException sqle){
            System.out.println("DB Öffnen");
            sqle.printStackTrace();
        }catch(ClassNotFoundException cnfe){
            System.out.println("Treiber laden");
            cnfe.printStackTrace();
        }catch(Exception e){ e.printStackTrace(); }
...

Vielleicht hat der Tomcat Probleme damit "Externe-Jars" - Ad-Hoc in Servlets zu laden ... vielleicht auf Grund irgend eines Sicherheitskonzeptes ...
...
das MUSS gehen, kopiere mal die MySQL Jar-Datei noch in das lib bzw. ext Verzeichnis des Tomcats bzw. unter WEB-INF/lib

Bsp.:
--->E:\jakarta-tomcat-4.1.24\webapps\MOBILE\WEB-INF\lib

Wobei "MOBILE" der Name deiner Webapplikation ist ...
```

Gruß Tom


----------



## OliWan (28. August 2003)

Hey Tom,

danke erstmal für deine Tipps! Nun läuft es!

Für alle die auch mal diese Probleme haben:

Nachdem ich weitere Fehlermeldungen bekommen habe, u.a. IllegalAcessException, InstanationException, habe ich das Servlet erst
mal Servlet sein lassen, und in mysql eine tabelle angelegt. Als Basis
diente mir hierfür 

http://www.yolinux.com/TUTORIALS/LinuxTutorialTomcat.html#MYSQL

Tja, und siehe da, das TestServlet ShowBedrock von dieser Seite lief auf
anhieb! 

Evtl. gab es die Problmeserie, weil test keinen Inhalt hatte ? Keine Ahnung - Hauptsache es läuft.

Danke euch !


----------



## Sneaker (30. August 2003)

Hatte das gleiche Problem auch schon mal und meine lösung war ein bissche einfacher 
es reicht wenn man: 

```
try {
Class.forName(driver);
}
catch(ClassNotFoundException e) {
	...
}
```
also einfach das new Instance weg lassen


----------



## OliWan (1. September 2003)

Hallo Sneaker,

...braucht man das newInstance() nicht um Probleme zu vermeiden wenn
mehrere User gleichzeigt zugreifen?...

Gruß Olli


----------



## Thomas Darimont (1. September 2003)

Servus!



> Hinweis   In einigen Programmlistings findet sich die Zeile zum Laden des Treibers, die gleich mit newInstance() ein Objekt des Treibers erzeugt.
> Class.forName( "org.gjt.mm.mysql.Driver" ).newInstance();
> Das ist im Prinzip nicht nötig, denn Class.forName() sollte die Klasse laden. Es gibt jedoch virtuelle Maschinen in Applets, die das Klassenladen aus Geschwindigkeitsgründen vermeiden und dann keine Klassendatei vom Server beziehen. In solchen Fällen muss der Laufzeitumgebung mit dem Bilden eines Exemplars explizit der Hinweis   gegeben werden, dass die Treiber-.class-Datei nötig ist, damit sich der Treiber beim Treibermanager anmelden kann.



--->http://www.galileocomputing.de/openbook/javainsel3/javainsel_200006.htm

Gruß Tom


----------

