# MSSQL JDBC "Driver class not found"



## spaghetti (6. Jul 2011)

N'abend zusammen,

ich versuche über JDBC die Verbindung zum Microsoft SQL Server herzustellen und habe das in einem anderen Projekt (selber Rechner, selbes Eclipse, JRE 1.6. , selber Server, selbe Zugangsdaten und selber JDBC Treiber) erfolgreich getan. 
Ich versuche es aus Eclipse heraus und habe die sqljdbc4.jar im Buildpath meines Projekts doch ich bin nicht in der Lage eine Verbindung herzustellen.

Beim 
	
	
	
	





```
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
```
 bekomme ich eine Class not found exception.

Habe in Eclipse beide von MS gelieferten JDBC Treiber und verschiedene JREs getestet - in einem Projekt mit, im anderen ohne Erfolg.

Hat jemand schon ähnliches erlebt und vielleicht nen heissen Tipp für mich? ;-)


----------



## nrg (6. Jul 2011)

also bei einer ClassNotFoundException kann es imho nicht viel sein:
1. Buildpath
2. voll spezifierender Klassenpfad ist falsch
3. die falsche jar Datei bzw. Version (in Verbindung mit Punkt 2)

für Punkt 1: Rechtsklick auf Project > Buildpath > Add External JARs
für Punkt 2+3: jar-Datei mit WinRAR o.ä. öffnen und schauen ob die Klasse in dem Package exisitert

aber vermutlich werden dir die Punkte auch selbst klar sein nur von meiner Seite sehe ich keine andere Ursache

edit: achja, für MS SQL bietet sich auch jdts an


----------



## spaghetti (6. Jul 2011)

Moin Nrg, 
die ersten Punkte hab ich selbst schon mehrfarch überprüft, die sinds nicht. Ich verwende wirklich das selbe jar und den exakt gleichen Funktionsaufruf für die gleiche Datenbank in einem anderen Projekt.

Werds morgen mal mit dem jtds testen, wäre zwar komisch, aber würde mich nicht wundern, wenns dann klappt.


----------



## spaghetti (7. Jul 2011)

Leider ändert auch der jtds nichts daran, die Fehlermeldung  bleibt die gleiche. 
Der Classpath müsste aber in Ordnung sein, wenn ich innerhalb des Projekts im selben Paket einfach mal ne Klasse (main-Klasse um schnell testen zu können) anlege, kann ich mich zur Datenbank verbinden und Statements abfeuern. 
Habe auch mal ein neues Projekt angelegt und nur die Sourcen kopiert - ohne Erfolg. Mir gehen die Ideen aus...


----------



## maki (7. Jul 2011)

nrg hat eiogentlich schon alle möglichen Ursachen genannt, der voll qiual. Name der Klasse ist falsch, doer die Klasse ist nicht im ClassPath.

Zeig doch mal einen Screenshot von deinem Buildpath.


----------



## spaghetti (7. Jul 2011)

Ich habe mal nen Screenshot vom Buildpath, der Struktur der eingebundenen Klasse sowie vom Verzeichnis in dem die jars liegen gemacht. 
Aufruf in diesem Fall dann:

```
Class.forName("net.sourceforge.jtds.jdbc.Driver")
```

Ich habe auch mal direkt vor dem Aufruf über System.getProperty("java.class.path") den CP ausgelesen, da ist die jar nach wie vor vorhanden.



Edit: Ich habs! :shock:  Ich flieg nicht beim Class.forName ab, sondern ich versuche 1 Zeile später ne Property zu putten, das Propertyobjekt ist aber null und hab den Übergang beim Debuggen übersehen


----------



## nrg (7. Jul 2011)

dann fliegt aber eine NullPointerException und keine ClassNotFound


----------



## despikeexd (8. Jul 2011)

Wieder mal ein typischer Fall von NICHT-Wissen.

Zur kleinen Erklärung : seit Java1.4.2 werden ALLE JDBC-Driver welche zum Start der VM bekannt sind automatisch geladen. Ein Class.forName() oder DriverManager.registerDriver() sorgt also nur dafür das ein und der selbe Driver ZWEIMAL registriert ist.
Lasse dir vom DriverManager einfach mal alle geladenen Driver ausgeben ob deiner überhaupt dabei ist ... falls JA : er sollte durch den Aufruf von Class.forName() zweimal enthalten sein ... falls NEIN : sollte er GARNICHT drinstehen und liegt demzufolge auch nicht im CP.

*Immer wieder der selbe Fehler ... alter ich glaubs nicht.*


----------



## spaghetti (8. Jul 2011)

despikeexd hat gesagt.:


> *Wieder mal ein typischer Fall von NICHT-Wissen.*
> Zur kleinen Erklärung : seit Java1.4.2 werden ALLE JDBC-Driver welche zum Start der VM bekannt sind automatisch geladen. Ein Class.forName() oder DriverManager.registerDriver() sorgt also nur dafür das ein und der selbe Driver ZWEIMAL registriert ist.
> Lasse dir vom DriverManager einfach mal alle geladenen Driver ausgeben ob deiner überhaupt dabei ist ... falls JA : er sollte durch den Aufruf von Class.forName() zweimal enthalten sein ... falls NEIN : sollte er GARNICHT drinstehen und liegt demzufolge auch nicht im CP.
> 
> *Immer wieder der selbe Fehler ... alter ich glaubs nicht.*



Einatmen... ausatmen... du kommst schon drüber hinweg. Bin noch relativ frisch auf dem Gebiet Java und da ich in diesem Projekt freie open source software anpasse, bin ich nicht gleich über den Fehler des Autors gestolpert.

@NRG Das hab ich mir auch so gedacht, die drüberliegende Funktion schmeisst aber Class not Found. Nachdem ich die Property initialisiert hab, funktioniert alles.


----------



## HoaX (8. Jul 2011)

Was darüber steht sollte für die Fehlermeldung belanglos sein.
Normalerweise loggt man den Fehler ja irgendwo, zur Not mit Exception#printStackTrace(). Da steht dann der Name drin welcher wirklich aufgetreten ist. System.out.println("ClassNotFoundException: Treiber konnte nicht geladen werde"); und ähnliche sind immer der falsche Weg.


----------

