Java stellt mit der JDBC-Bridge (Java Database Connectivity) eine einheitliche Schnittstelle zu Datenbanken bereit. Für ein Projekt, muss ich eine Verbindung zu einem MS-SQL Server 2005 herstellen. Doch leider brach die Verbindungversuch zur Datenbank mit einer java.lang.ClassNotFoundException ab.
Problem
Den Javacode, findet man häufig so, oder ähnlich im Netz:
Download Code!
try {
Class.forName( "com.microsoft.jdbc.sqlserver.SQLServerDriver" );
con
= DriverManager.
getConnection( "jdbc:microsoft:sqlserver://localhost:1433;databaseName=test;user=test;password=test;"); e.printStackTrace();
}
Doch leider bricht dieser Code mit folgender Fehlermeldung ab:
java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
Lösung
Als erstes muss man sicherstellen, ob sich der Treiber, im Classpath befindet. Ist dies der Fall und man hat kein SQL-Server 2005, ist sollte es funktionieren - nehme ich an. Angenommen deshalb, weil dieser Code so oft verwendet wird.
Beim MS-SQL Server 2005, muss man auch den Code anpassen. Der richtige Code lautet:
Download Code!
try {
// Class.forName( "com.microsoft.jdbc.sqlserver.SQLServerDriver" );
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// con = DriverManager.getConnection( "jdbc:microsoft:sqlserver://localhost:1433;databaseName=test;user=test;password=test;");
con
= DriverManager.
getConnection( "jdbc:sqlserver://localhost:1433;databaseName=test;user=test;password=test;"); e.printStackTrace();
}
Wie ihr sehen könnt, hat sich einmal beim Class.forName die Position von jdbc und sqlserver geändert (vertauscht). Zum anderen, ist beim Aufruf von DriverManager.getConnection der microsoft Teil weggefallen.