# No suitable driver found for jdbc:microsoft:sqlserver...



## aso7b71 (21. Jan 2011)

Hallo, 
ich versuche eine Verbindung aus meinem JAVA-Programm heraus zur Microsoft SQLServer 2008 aufzubauen...Den Treiber kann ich soweit schon wohl laden, aber wenn ich eine Verbindung zur Datenbank aufbauen will, dann läuft das Programm in einen Fehler.


```
*Driver.connect (jdbc:microsoft:sqlserver://192.168.150.32:1433;databaseName=PV_Monitoring;selectMethod=cursor;)
    trying driver[className=com.microsoft.sqlserver.jdbc.SQLServerDriver,SQLServerDriver:1]
getConnection: no suitable driver found for jdbc:microsoft:sqlserver://192.168.150.32:1433;databaseName=PV_Monitoring;selectMethod=cursor;
java.sql.SQLException: No suitable driver found for jdbc:microsoft:sqlserver://192.168.150.32:1433;databaseName=PV_Monitoring;selectMethod=cursor;
        at java.sql.DriverManager.getConnection(DriverManager.java:602)
        at java.sql.DriverManager.getConnection(DriverManager.java:185)
        at udpserver.Main.initialisierungSQL(Main.java:73)
        at udpserver.Main.main(Main.java:35)
SQLException: SQLState(08001)
java.sql.SQLException: No suitable driver found for jdbc:microsoft:sqlserver://192.168.150.32:1433;databaseName=PV_Monitoring;selectMethod=cursor;
```

Frage ist nun, habe ich überhaupt den richtigen Treiber geladen? Ich habe bei Microsoft den Microsoft SQL Server JDBC Driver 3.0 heruntergeladen und per Eigenschaften->Bibliotheken->JAR-Files in Netbeas mit dem Projekt verknüpft. 



Code sieht so aus:

```
private static void initialisierungSQL()
    {
        //Erstellen der Verbindung zur Sql-Datenbank


        //Alle Derzeit aktiven Treiber anzeigen
        for(Enumeration<Driver> e = DriverManager.getDrivers();e.hasMoreElements(); )
            System.out.println(e.nextElement().getClass().getName());
        try
        {
           //Informationsausgabe
            Class.forName(DRIVER);
            DriverManager.setLogWriter(new PrintWriter(System.out));
            System.out.println("Microsoft Treiber geladen");
            try
            {
                con = DriverManager.getConnection(getConnectionUrl(), USERNAME, PASSWORT);
                if(con!=null) System.out.println("Verbdindung zu SQL-Server hergestellt");
            }
            catch(Exception e)
            {
                System.out.println(e+" \nTreiberfehler");
            }
        }
        catch(ClassNotFoundException e)
        {
            System.out.println("ERROR: Treiber konnte nicht geladen werden");
            e.printStackTrace();
            System.exit(1);
        }
```
Ich wäre echt dankbar, wenn mir jemand in dieser Sache helfen könnte.

Gruß Robin


----------



## HoaX (21. Jan 2011)

Wie heißt denn die Klasse des Treibers welchen du lädst?


----------



## JohannisderKaeufer (21. Jan 2011)

Hallo Robin,

die Fehlermeldung wird oft Fehlinterpretiert.

No Suitable Driver Found For ...

heißt nicht das es am Treiber liegt!

JDBC geht bei DriverManager.getConnection() der Reihe nach alle mit Class.forName(DRIVER) registrierten Datenbanktreiber durch, bis es einen gefunden hat der mit dem ConnectionString eine Verbindung zu Stande bringt. Ist der DB- Server down oder eine Firewall blockt, so wird kein Treiber gefunden der eine Verbindung zu Stande bringt. Es fliegt daher nach meiner Erfahrung dieselbe Exception.

Also, ConnectionString überprüfen!

MS schreibt Erstellen der Verbindungs-URL hier für SQL 2005


```
jdbc:sqlserver://[serverName[\instanceName][:portNumber]][;property=value[;property=value]]
```

bei dir steht in der Exception


```
jdbc:microsoft:sqlserver://192.168.150.32:1433;databaseName=PV_Monitoring;selectMethod=cursor;
```

ich würde wenn ich das vergleiche folgendes Versuchen


```
jdbc:sqlserver://192.168.150.32:1433;databaseName=PV_Monitoring;selectMethod=cursor
```


----------



## L-ectron-X (22. Jan 2011)

Auch noch mal im byte-welt.net - Wiki: Datenbankverbindung (Java) - Byte-Welt Wiki


----------



## aso7b71 (22. Jan 2011)

Erstmal danke für die Tipps...werd das alles am Montag mal ausprobieren
@ haox: werd dann auch mal den Namen des ms Treiber nachliefern
Gruß


----------



## aso7b71 (24. Jan 2011)

Der Treiber, den ich geladen habe, ist der Microsoft SQL Server JDBC Driver 3.0. Ich habe dann sowohl das jar-File sqljdbc und sqljdbc4 ausprobiert. Beide haben allerdings nicht funktioniert. 
Gruß Robin


----------



## JohannisderKaeufer (24. Jan 2011)

```
jdbc:sqlserver://192.168.150.32:1433;databaseName=PV_Monitoring;selectMethod=cursor
```

Hast du das auch schon versucht.

Also das "microsoft" rauswerfen?

den ";" am Ende Weglassen?


----------



## aso7b71 (24. Jan 2011)

ja...jetzt gerade hab ich´s versucht und es hat auf Anhieb geklappt...vielen dank für die Hilfe...Nu geht die Reise weiter. Jetzt steh ich vor dem nächsten Problem. In meiner Lektüre bin ich gerade über die sog. Persistenz API gestolpert. Hier wird die Verbindung zur Datenbank über Objekte und nicht SQL-Code hergestellt. Ohne mich jetzt wirklich reingelesen zu haben...Was meint ihr? Wie sollte ich die Verbindung aufbauen? Achja, in meinem Programm läuft die Speicherung der Daten in eigenen Threads, aber ich habe ja nur eine Verbindung zur DB...kann das Probleme machen?

Gruß Robin


----------



## HoaX (24. Jan 2011)

JohannisderKaeufer hat gesagt.:


> Hallo Robin,
> 
> die Fehlermeldung wird oft Fehlinterpretiert.
> 
> ...



Dann übersetz doch mal die Meldung. Die sollte genau dann kommen, wenn der URL kein Treiber zugeordnet werden kann. Wenn die Meldung dann kommt, wenn der Host nicht erreichbar ist, aber die URL zum Treiber passt, dann ist das schlicht und einfach ein Bug im Treiber!

Btw. registriert Class#forName nicht den Treiber, sondern es bewirkt dass sich der Treiber selber registriert. Es gibt auch Möglichkeiten ohne Class#forName.


----------



## maretz (28. Jan 2011)

Moin,

also ich nehm dafür jtds:


```
package pk_shipping;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;


public class MSSqlConnector {
	public void dbConnect() {
		String db_password="PW";
		String db_connect_string="jdbc:jtds:sqlserver://192.100.100.35";
		String db_userid="USER";
		
      try {
         Class.forName("net.sourceforge.jtds.jdbc.Driver"); 
         Connection conn = DriverManager.getConnection(db_connect_string,
                  db_userid, db_password);
         System.out.println("connected");
         Statement statement = conn.createStatement();
         String queryString = "select * from Testtabelle";
         ResultSet rs = statement.executeQuery(queryString);
         while (rs.next()) {
            System.out.println(rs.getInt(1)+" "+rs.getString(2));
         }
      } catch (Exception e) {
         e.printStackTrace();
      }
   }

}
```

Haut super hin - und der jtds hat den Vorteil das man damit auch noch andere DBMS ansprechen darf


----------

