Charger dynamiquement le pilote JDBC

Je suis en train de charger le pilote JDBC de façon dynamique, avec ce genre de code:

        try{
        URL[] url={new URL("file:libs/mysql-connector-java-5.1.21.jar")};
        URLClassLoader loader = new URLClassLoader(url, System.class.getClassLoader());
        loader.loadClass(drivername);
        Enumeration<Driver> drivers = DriverManager.getDrivers();
        while(drivers.hasMoreElements()){
            Driver driver = drivers.nextElement();
            System.out.println("driver:"+driver);
        }
        Class.forName(drivername, true, loader);
        drivers = DriverManager.getDrivers();
        while(drivers.hasMoreElements()){
            Driver driver = drivers.nextElement();
            System.out.println("driver:"+driver);
        }
        Connection connect = DriverManager.getConnection(jdbcurl, user,
                password);

        return connect;
    }
    catch (MalformedURLException e){
        e.printStackTrace();
        return null;
    }

Le premier tout-boucle affiche les pilotes de la classpath:

driver:sun.jdbc.odbc.JdbcOdbcDriver@35712651
driver:oracle.jdbc.OracleDriver@58df0438
driver:com.ibm.db2.jcc.DB2Driver@525c7734
driver:SQLServerDriver:1

et la deuxième boucle affiche les mêmes pilotes, mais sans le pilote MySQL.

Ma Question est pourquoi? Ai-je raté quelque chose?

J'ai lu dans la JavaDoc de DriverManager que chaque conducteur tente d'inscrire lui-même par le drivermanager, si le pilote est chargé. Dans mon Code, cela devrait être loader.loadClass(drivername);. Je pensais que ce code doit invoquer la partie statique par exemple:

static {
  try {
      java.sql.DriverManager.registerDriver(new Driver());
  } catch (SQLException E) {
      throw new RuntimeException("Can't register driver!");
  }
}

de le Pilote de la classe.

OriginalL'auteur bkb | 2013-01-23