Microsoft-SQL: No suitable driver found

StYxXx

Mitglied
Hallo,

das Thema gab es schon ein paar mal, aber in den alten Threads steht nichts, was geholfen hat. Deswegen somit gleich mein erster Beitrag als neuer Hilfegesuch-Thread :)

Ich habe folgendes Problem: Ich versuche auf Ubuntu mit Eclipse eine JSP-Anwendung zu basteln, die sich zu einem MSSQL-Server verbindet. Die Treiber habe ich runtergeladen und sie funktionieren auch mit fremden Anwendungen (z.B. "DBVisualizer"). Schreibe ich selbst etwas, erhalte ich jedoch immer:

"java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver SQL-Fehler: java.sql.SQLException: No suitable driver found for jdbc:sqlserver://..."

Im Code steht:
Java:
try {
   Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(ClassNotFoundException ex)
{
 out.println("JDBC-Treiber nicht gefunden! " + ex);
}try {
   Connection oConnection =
 DriverManager.getConnection("jdbc:sqlserver://....

Ich habe bei Eclipse die sqljdbc4.jar und sqljdbc.jar zum Projekt hinzugefügt ("Java Build Path" -> "Libraries"), zudem die CLASSPATH-Umgebungsvariable gesetzt und auch geprüft. Trotzdem erhalte ich auch nach Tomcat-Neustart die obige Meldung schon bei bei Class.forName (".."). Ich habe schon abwechselnd mal die sqljdbc4.jar und die sqljdbc.jar getestet und auch den Name verdreht ("com.microsoft.jdbc.sqlserver.SQLServerDriver" statt "com.microsoft.sqlserver.jdbc.SQLServerDriver"). Half nichts. Die Serverangaben sind korrekt (wie gesagt, mit DBVisualizer geht es), der Code war ohnehin nur copy&paste vom eigentlichen Server mit absoluter Adressangabe.

echo $CLASSPATH sagt
".:/usr/share/Microsoft SQL Server JDBC Driver/sqljdbc_2.0/enu/sqljdbc4.jar" (hatte es auch ohne ".:" probiert), der Pfad stimmt.
Hatte zudem die jars auch schon in "/usr/share/tomcat5.5/shared/lib/" kopiert, ebenso ohne Effekt.

Inzwischen weiß ich nicht mehr weiter und die ganzen Anleitungen, inkl. der von MS selbst, nennen keine neuen Tipps mehr.

Jemand eine Idee?
Danke,
styxxx
 

StYxXx

Mitglied
Richtig wäre: jdbc:microsoft:sqlserver://....
Macht für das Problem keinen Unterschied, da der Fehler bereits früher bei Class.forName() ausgelöst wird. [edit: Habe es natürlich auch ausprobiert.] Auf einem Server geht es aber auch ohne "microsoft". :bahnhof:

jTDS sagt mir nichts, kann ja mal danach suchen. Letztendlich wäre es aber auch nur eine Umgehung des Problems, keine Lösung :)
 
Zuletzt bearbeitet:

Bartleby

Aktives Mitglied
Wo tritt die Exception denn nun genau auf?
Java:
java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver SQL-Fehler: 
java.sql.SQLException: No suitable driver found for jdbc:sqlserver://..."
kann doch nicht beim Class.forName() auftreten - woher soll er denn die angegebene jdbc-Adresse nehmen?
Außerdem passt die Fehlermeldung auch nicht zu deinem Codeschnipsel, da müsste ja "JDBC-Treiber nicht gefunden! " ausgegeben werden.

Ich bin mir nicht ganz sicher, wo der Fehler denn nun eigentlich auftritt, da du einmal von Eclipse und einmal vom Tomcat schreibst.
Aber versuche die Klasse "com.microsoft.sqlserver.jdbc.SQLServerDriver" doch mal im Eclipse zu öffnen (einfach via Strg+Shift+T), dann siehst du in welchem jar sie liegt und ob die Schreibweise korrekt ist. Wenn nun eine ClassNotFoundException auftritt, liegt dieses jar definitiv nicht im Classpath.

Alternativ könntest du noch versuchen,
Java:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance()
aufzurufen, damit wird der Treiber definitiv beim DriverManager registriert, wo ich mir ohne newInstance() nicht sicher bin.
 

StYxXx

Mitglied
Wo tritt die Exception denn nun genau auf?

Außerdem passt die Fehlermeldung auch nicht zu deinem Codeschnipsel, da müsste ja "JDBC-Treiber nicht gefunden! " ausgegeben werden.
Ah, du hast recht. Ich hab zuviel abgekürzt, sorry für die Verwirrung. Fehlermeldungen treten an beiden Stellen auf. Nochmal der Code, wie er jetzt aussieht, diesmal mit allen wichtigen Stellen:

Java:
<%@ page language="java" import="java.sql.*,javax.naming.*,javax.sql.*" %>

<%

try {
   Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
}
catch(ClassNotFoundException ex)
{
 out.println("JDBC-Treiber nicht gefunden! " + ex);
}try {
   Connection oConnection =
DriverManager.getConnection("jdbc:sqlserver://<adresse>:<port>;databaseName=<name>;user=<user>;password=<kennwort>");

  // HTML-Zeugs
  
   oConnection.close();

}
catch(SQLException sql)
{
 out.println("SQL-Fehler: " + sql);
}%>

Und die Fehlermeldung lautet:
JDBC-Treiber nicht gefunden! java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver SQL-Fehler: java.sql.SQLException: No suitable driver found for jdbc:sqlserver://<adresse>:<port>;databaseName=<name>;user=<user>;password=<kennwort>

Ich hatte selbst übersehen, dass es sich hier um zwei Fehlermeldungen handelt. :oops:

Ich bin mir nicht ganz sicher, wo der Fehler denn nun eigentlich auftritt, da du einmal von Eclipse und einmal vom Tomcat schreibst.
Aber versuche die Klasse "com.microsoft.sqlserver.jdbc.SQLServerDriver" doch mal im Eclipse zu öffnen (einfach via Strg+Shift+T), dann siehst du in welchem jar sie liegt und ob die Schreibweise korrekt ist. Wenn nun eine ClassNotFoundException auftritt, liegt dieses jar definitiv nicht im Classpath.

Ich nutze Eclipse, Tomcat 5.5 habe ich ebenfalls installiert und wird von Eclipse gestartet. Ich las, dass man die Treiber nicht nur bei Eclipe einbinden, sondern auch in diverse Tomcat-Verzeichnisse kopieren soll, damit sowas funktioniert. Ob das stimmt, weiß ich natürlich nicht. Hab die jar-Dateien aber auf jeden Fall ohne Wirkung auch in Tomcats Unterverzeichnisse kopiert (einmal nach "/usr/share/tomcat5.5/server/lib" und einmal nach "/usr/share/tomcat5.5/shared/lib" - "/usr/share/tomcat5.5" ist das Tomcat-Installationsverzeichnis). Außerdem habe ich eine $CLASSPATH-Umgebungsvariable angelegt, die nach einigen Spielereien nun folgendes ausgibt:
echo $CLASSPATH
.:/usr/share/tomcat5.5/shared/lib:/usr/share/Microsoft SQL Server JDBC Driver/sqljdbc_2.0/enu/sqljdbc4.jar:/usr/share/jTDS - SQL Server and Sybase JDBC driver
bzw. jetzt nach nochmaliger Änderung ".:/usr/share/tomcat5.5/shared/lib/sqljdbc.jar". Im Grunde habe ich da schon alles ausprobiert einzutragen. Dachte, das wäre auch in jedem Fall nötig.

In Eclipse habe ich die jar-Dateien über "Project" -> "Properties" -> "Java Build Path" -> "Add external JARs" hinugefügt.
Bei "Open Type" wusste ich nicht genau, was ich eingeben sollte. Tippe ich allerdings "jdbc" findet es auch sowas wie "JDBCCallSyntaxTranslator - com.microsoft.sqlserver.jdbc" und unten steht "com.microsoft.sqlserver.jdbc - /usr/sha...DBC Driver/sqljdbc_2.0/enu/sqljdbc.jar" (letzteres der Pfad, in welchem die Treiber liegen), was für mich so klingt, als wäre der Treiber definitiv gefunden worden, sonst würde Eclipse nichts darüber wissen. Bei Doppelklick kommt nur, dass kein Quelltext angehängt wäre und mir wird der Syntax für Methoden der CallSyntaxTranslator-Klasse gezeigt. Sieht für mich ok aus?

Das mit dem newInstance() habe ich probiert, ändert nichts (siehe Code oben). Im Wiki steht es eigentlich genauso, wie ich es gemacht habe.

Bei den jTDS-Treibern habe ich jedoch das gleiche Problem, also ebenfalls die ClassNotFound-Fehlermeldung (java.lang.ClassNotFoundException: net.sourceforge.jtds.jdbc.Driver), obwohl ich dort nach Anleitung vorging und über "Open Type" einiges finde. Sieht also so aus, als gäbe es ein allgemeines Problem mit den nichtgefundenen Klassen. Kann es sein, dass Tomcat die nicht findet, Eclipse aber schon? Dann wäre auch die Frage, warum nichts gefunden wird. ???:L
 
J

JohannisderKaeufer

Gast
Ersetze in deinem Code

Java:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
durch
Java:
new com.microsoft.sqlserver.jdbc.SQLServerDriver();

Damit siehst du in Eclipse gleich ob die entsprechende Klasse im Classpath auftaucht und das während dem Compilieren.

Wenn das dann klappt, kannst du es wieder in obiges ändern.
 

StYxXx

Mitglied
Huhu,

danke für den Tipp.
Zunächst gibt es in der Eclipse-IDE die Meldung "cannot be resolved to a type". Füge ich die sqljdbc.jar oder die sqljdbc4.jar zum Build-Path hinzu (wie ja oben getan), verschwindet diese Fehlermeldung und auch die Autovervollständigung während dem Tippen funktioniert (zumindest bist "com.microsoft.sqlserver.jdbc"). Man sollte meinen, alles wäre ok.
Aber beim Aufruf der entsprechenden Seite auf dem Webserver (nach "run on server" auf http://127.0.0.1:8182/test/test.jsp) kommt im Browser:
type Exception report

message

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:
JSP FileName:/test.jsp
Java FileName:/home/styxxxx/Programmierung/Eclipse/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/work/Catalina/localhost/test//org/apache/jsp/test_jsp.java

An error occurred at line: 11 in the jsp file: /test.jsp
com.microsoft.sqlserver.jdbc.SQLServerDriver cannot be resolved to a type
8:
9: try {
10:
11: new com.microsoft.sqlserver.jdbc.SQLServerDriver();


Was mit noch aufgefallen ist:
"<%@page import="com.microsoft.sqlserver.jdbc.*"%>" verursacht beim Seitenaufruf keinen Fehler und "<%@page import="com.microsoft.sqlserver.jdbc.SQLServerDriver"%>" einen "Only a type can be imported. com.microsoft.sqlserver.jdbc.SQLServerDriver resolves to a package"-Fehler (die Eclipse-IDE meldet nie was). Heißt das nicht, dass auch was gefunden wird?
 
M

maki

Gast
Du solltest die jar in deinen WEB-INF/lib stecken, sonst wird das nix.
CLASSPATH Variable kannst du getrost vergessen, bei WebApps sowieso, aber nicht nur da.

Ach ja, diesen Code solltest du nicht in einer JSP verpacken, dafür gibt es Servlets.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A No suitable driver found for jdbc:microsoft:sqlserver... Datenbankprogrammierung 9
J Java 8 und Microsoft Access Database-Dateien(mdb) Datenbankprogrammierung 1
N MySQL com.microsoft.sqlserver.jdbc.SQLServerException: Die Verbindung wurde geschlossen. Datenbankprogrammierung 1
H Microsoft Access Treiber wird nicht gefunden Datenbankprogrammierung 9
Y java.sql.SQLException: [Microsoft][ODBC Driver Manager] Invalid cursor state Datenbankprogrammierung 2
GianaSisters Per JDBC auf Microsoft SQL 2005 Datenbankprogrammierung 24
H Fehler mit ". Microsoft Access Driver" Datenbankprogrammierung 12
H Microsoft Access Abfrage Datenbankprogrammierung 6
N [Microsoft][ODBC Microsoft Access Driver]COUNT field incorre Datenbankprogrammierung 13
thE_29 Microsoft SQL Server 2000 Datenbankprogrammierung 2
G java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserv Datenbankprogrammierung 7
B SQLite + jdbc + IntelliJ-Consumer = "No suitable driver found..." Datenbankprogrammierung 15
D MySQL No Suitable Drivers found Datenbankprogrammierung 4
J RESTServie + JDBC + No suitable driver found for jdbc Datenbankprogrammierung 4
B No suitable driver found for jdbc:oracle:thin:@$HOST:$PORT:$SID Datenbankprogrammierung 7
AMStyles No suitable driver found for Datenbankprogrammierung 4
N Derby/JavaDB No suitable driver found Datenbankprogrammierung 14
Y Java und MySql... "No suitable Driver..." Datenbankprogrammierung 16
S SQLException: No suitable driver bei DB2 Datenbankprogrammierung 4
G No suitable driver Datenbankprogrammierung 8
G No suitable driver Datenbankprogrammierung 16
G Das tolle "No suitable driver found" Datenbankprogrammierung 4
S no suitable driver Datenbankprogrammierung 2
G MySQL: Login-Problem: No suitable Driver Datenbankprogrammierung 13
Maxim6394 EclipseLink + SQLite | Unable to acquire a connection from driver [null] Datenbankprogrammierung 6
ralfb1105 Oracle Zwei ojdbc Driver in einer Applikation? Datenbankprogrammierung 13
thet1983 Derby/JavaDB Embedded Driver Datenbankprogrammierung 7
thet1983 MySQL ODBC Driver zuweisen unter Mac OX Mav Datenbankprogrammierung 2
T JAR keine H2 driver? Datenbankprogrammierung 3
Q Oracle Linux: ClassNotFoundException: oracle.jdbc.driver.OracleDriver Datenbankprogrammierung 6
K JDBC Driver not found Datenbankprogrammierung 10
S MSSQL JDBC "Driver class not found" Datenbankprogrammierung 9
S Access 2007 zugreifen- ODBC Driver Manger Datenbankprogrammierung 3
K org.gjt.mm.mysql.driver wird nicht gefunden Datenbankprogrammierung 11
F MySQL - Connection JDBC-Driver Problem Datenbankprogrammierung 4
S java.lang.ClassNotFoundException: com.mysql.jdbc.Driver Datenbankprogrammierung 10
F DBConnect schläg fehl: not suitble Driver ?!? Datenbankprogrammierung 4
N MS-acces JDBC driver Datenbankprogrammierung 3
D Jdbc: Unable to load Driver! Datenbankprogrammierung 11
G MySQL Driver Bug? Datenbankprogrammierung 6
H Konnte den Treiber com.mysql.jdbc.Driver nicht laden. Datenbankprogrammierung 19
L Wo bekomme ich: "org.gjt.mm.mysql.Driver"? Datenbankprogrammierung 1
zilti java.lang.ClassNotFoundException: com.mysql.jdbc.Driver Datenbankprogrammierung 3
D java.lang.ClassNotFoundException: com.mysql.jdbc.Driver Datenbankprogrammierung 5
B Oracle Driver Probleme Datenbankprogrammierung 2
E Problem beim laden des JDBC Driver bzw der Database Datenbankprogrammierung 8
R NetBeans und com.mysql.jdbc.Driver Datenbankprogrammierung 2
K Mysql Driver Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben