Я пытаюсь загрузить драйвер JDBC динамически с помощью такого кода:
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;
}
Первый while-loop показывает драйверы пути к классам:
driver:[email protected]
driver:[email protected]
driver:[email protected]
driver:SQLServerDriver:1
а во втором цикле показаны одни и те же драйверы, но без драйвера MySQL.
Мой вопрос - почему? Я что-то пропустил?
Я читаю в JavaDoc DriverManager
, что каждый драйвер пытается зарегистрировать себя drivermanager, если драйвер загружен. В моем коде это должно быть loader.loadClass(drivername);
. Я думал, что этот код должен ссылаться на статическую часть, например:
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}