2009-08-21 9 views
2

Hier ist mein Code - ich überprüfe einfach meine MySQL Datenbankverbindung.
Aber zuerst habe ich das Programm erfolgreich kompiliert und ausgeführt. aber dann habe ich die Zeile Class.forName kommentiert.
Noch, wenn ich es kompilieren läuft erfolgreich, ohne Fehler. Warum?Java gibt keinen Fehler!

import java.sql.Connection; 
import java.sql.DriverManager; 


public class FirstJbdc { 
    public static void main(String[] args) { 
     Connection cn=null; 
     try { 
      //Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
      System.out.println("Driver loaded successfully"); 
      cn=DriverManager.getConnection("jdbc:odbc:myDSN","root", "java"); 
      System.out.println("Database connected successfully...."); 
      System.out.println(cn); 
     } catch (Exception e) { 
      // TODO: handle exception 
         e.printStackTrace(); 
     } 
    } 
} 
+0

schön: die Antwort ist in der Frage // TODO: handle Ausnahme – Peter

+0

FirstJdbc du meinst ..:) Ich habe eine Antwort unten. :) – DragonBorn

Antwort

7

Java 1.6 JDBC-Treiber auch ohne Verwendung Class.forName finden.

ist hier relevanten Teil von documentation:

Die DriverManager Methoden getConnection und getDrivers wurden erweitert die Java Standard Edition Service Provider Mechanismus zu unterstützen. JDBC 4.0 Treiber müssen die Datei META-INF/services/java.sql.Driver enthalten. Diese Datei enthält den Namen der JDBC-Treiberimplementierung von java.sql.Driver. Um zum Beispiel die my.sql.Driver Klasse zu laden, die META-INF/services/java.sql.Driver Datei enthalten würde den Eintrag:

my.sql.Driver 

Anwendungen müssen nicht mehr explizit JDBC-Treiber laden mit Class.forName(). Vorhandene Programme, die derzeit JDBC-Treiber mithilfe von Class.forName() laden, funktionieren weiterhin ohne Änderungen.

+0

Hey Peter - bitte kannst du auf die Dokumente zeigen, die das genau beschreiben, die gesucht haben, aber nichts finden können - Prost Nick. –

+0

Müssen Sie den JDBC-Treiber nicht in einen speziellen Ordner stellen, damit dies funktioniert? – pjp

+0

@pjp - hätte gedacht, dass Sie etwas tun müssten, wie den Treiber in einen "speziellen Ordner" zu setzen. Andernfalls würden Sie jede Klasse durchforsten, um zu prüfen, welche java.sql.Driver implementiert. was wird saugen. –

8

Ich wirft einen Fehler, in Ordnung. Es ist nur so, dass die Klausel Ihre Ausnahme stillschweigend verschluckt.

Versuchen Sie, eine

System.out.println(e.getMessage()); 

in der catch-Klausel

+0

Oder e.printStackTrace(); – pjp

+0

Zustimmen - es wird ohne Fehler ausgeführt, es wird jedoch nicht erfolgreich ausgeführt (die letzten beiden Zeilen werden nicht gedruckt). Niemals jemals (...) "Exception" fangen, ohne es zu handhaben;) –

+0

hat versucht, die Ausnahme zu behandeln, aber es läuft immer noch erfolgreich – RubyDubee

0

try {

 //Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
     System.out.println("Driver loaded successfully"); 
     cn=DriverManager.getConnection("jdbc:odbc:myDSN","root", "java"); 
     System.out.println("Database connected successfully...."); 
     System.out.println(cn); 
} catch (Exception e) { 
    // add the following statement 
    System.out.println(e.getMessage()); 
} 

Wenn Sie die Anweisung innerhalb des Blocks fangen hinzufügen, dann kompilieren und ausführen, sollten Sie die Fehlermeldung wie-

siehe [ Some Com] [Einige Treibermanager] Datenquellenname nicht gefunden und kein Standardtreiber angegeben

0

Ohne Class.forName() ist der JDBC-ODBC-Brückentreiber nicht geladen. Nach der JDBC-Spezifikation gibt getConnection() null zurück, wenn für die URL kein Treiber gefunden wird. Es wird keine Ausnahme ausgelöst. Das ist also das erwartete Verhalten.

+1

Außer wenn Sie JDBC 4.0 (Java 6) verwenden, da es nicht mehr notwendig ist, den Treiber mit Class.forName (...) zu laden. Siehe JavaDoc von java.sql.DriverManager. – Jesper

+0

Der JDBC-ODBC-Treiber von Sun ist so alt. Es kennt die neuen Tricks nicht. –

+0

Oh ja, tut es. Sehen Sie sich META-INF/services/ava.sql.Driver-Datei in jre/lib/resources.jar an - sie enthält "sun.jdbc.odbc.JdbcOdbcDriver", d. H. JDBC-ODBC-Treiber von Sun! So kann es definitiv verwendet werden * ohne * Class.forName() auf Java 6. –

Verwandte Themen