jdbc mysql und windoof :)

Thomas Darimont

Erfahrenes Mitglied
Servus!

Dann versuchs mal so ...

Code:
...

try{

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

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


... Gruß Tom
 

OliWan

Mitglied
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

Erfahrenes Mitglied
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

Mitglied
...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?!

:confused:
 

Thomas Darimont

Erfahrenes Mitglied
Servus!

Code:
...
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

Mitglied
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

Mitglied
Hatte das gleiche Problem auch schon mal und meine lösung war ein bissche einfacher ;)
es reicht wenn man:
Code:
try {
Class.forName(driver);
}
catch(ClassNotFoundException e) {
	...
}
also einfach das new Instance weg lassen
 

OliWan

Mitglied
Hallo Sneaker,

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

Gruß Olli
 

Thomas Darimont

Erfahrenes Mitglied
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