# No suitable driver



## guni (18. Jan 2008)

Hallo, 

ich versuche verzweifelt, über java eine verbindung zur datenbank herzustellen.

in meiner Klasse habe ich ein 


```
import java.sql.*;
```

mein connect string sieht so aus:


```
String odb_url = "jdbc:oracle:thin:@<hostname>:<port>:<SID>";
```

habe mir die beiden Dateien 

classes12.jar
ojdbc14.jar

von Oracle runtergeladen und in Eclipse unter "Add External JARs" hinzugefügt.

wenn ich versuche mein programm auszuführen, dann erhalte ich jedesmal den Fehler:

Exception in thread "main" java.sql.SQLException: No suitable driver

woran kann das noch liegen?

mfg, guni


----------



## tfa (18. Jan 2008)

```
Class.forName("name.deines.jdbc.treibers");
```


----------



## DP (18. Jan 2008)

http://www.java-forum.org/de/viewtopic.php?t=4768


----------



## guni (18. Jan 2008)

hmm ... danke!
ich bild mir ein, dass ich das Ganze schon mal ohne Class.forName zum Laufen gebracht habe ...

jetzt habe ich noch die Alternative 

```
DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver());
```
gefunden; aber irgendwie hab ich so dunkel in Erinnerung, mal ein Script geschrieben zu haben, dass ohne diese Zusätze eine Verbindung hergestellt hat ... kann aber natürlich auch Blödsinn sein ...

Wie auch immer - danke für deine Antwort ...

was ist denn der Unterschied zwischen Class.forName / DriverManager.registerDriver?
Was sind die Vor und Nachteile der einzelnen Möglichkeiten??

lg, guni


----------



## guni (18. Jan 2008)

was ist denn der Unterschied zwischen Class.forName / DriverManager.registerDriver?

lg, guni


----------



## maki (18. Jan 2008)

Vergiss registerDriver.


----------



## guni (18. Jan 2008)

weil?


----------



## tfa (18. Jan 2008)

Class.forName(name) versucht eine Klasse zu laden, also z.B. die JDBC-Treiberklasse. Diese Klasse hat einen sog. statischen Initialisierer, der beim Laden der Klasse automatisch ausgeführt wird. In diesem Initialisierer passiert u.a. das DriverManager.registerDriver(). Es nochmal hinzuschreiben ist also überflüssig.

Hier der entsprechende Quelltext des Oracle V9 Treibers (Dekompilat):


```
static 
    {
        m_driverAccess = new Properties();
        m_driverAccess.put("thin", "oracle.jdbc.ttc7.TTC7Protocol");
        m_defaultDriver = null;
        Timestamp timestamp = Timestamp.valueOf("2000-01-01 00:00:00.0");
        try
        {
            if(m_defaultDriver == null)
            {
                m_defaultDriver = new OracleDriver();
                DriverManager.registerDriver(m_defaultDriver);
            }
        }
        catch(RuntimeException _ex) { }
        catch(SQLException _ex) { }
    }
```


----------



## guni (18. Jan 2008)

danke ... ich glaube zu verstehen


----------

