Всякий раз, когда я запускаю следующий код:JDBC драйвер не загружается должным образом в Java
public void insertIntoMysql() {
URLClassLoader childCl = new URLClassLoader(new URL[] {new URL("file:///myProjectDir/lib/mysql-connector-java-5.0.8-bin.jar")}, this.getClass().getClassLoader());
try {
// connect to mysql
Class.forName("com.mysql.jdbc.Driver", true, childCl);
String myUrl = "jdbc:mysql://localhost:3306/myDB";
Connection conn = DriverManager.getConnection(myUrl, "root", "adminpw");
...
} catch {
...
}
}
Я получаю «java.sql.SQLException: Нет подходящего драйвера найти для JDBC: MySQL: // локальный: 3306/myDB "при вызове DriverManager.
Я предполагаю, что это связано с тем, что я загрузил свой драйвер с помощью специального загрузчика классов (я не могу изменить вызывающий код, поэтому не могу изменить путь к классам, который загружается, когда мой скрипт называется). Кажется, что драйвер отлично подходит для класса Class.forName, но это похоже на тот класс, который никогда не был загружен только двумя строками позже.
Любые мысли?
--- UPDATE ---
Я понял, как добавить баночку моего пути к классам во время выполнения, используя BeanShell Util, удален устаревший forName и перестал использовать специальный загрузчик классов. Мой обновленный код ниже:
import com.mysql.jdbc.Driver;
public void insertIntoMysql() {
try {
addClassPath("/lib/mysql-connector-java-5.0.8-bin.jar");
// printing out the classpath URLs here shows several
// jar files along with the one I just added:
// file:/C:/myProjectDir/lib/mysql-connector-java-5.0.8-bin.jar
// connect to mysql
String myUrl = "jdbc:mysql://localhost:3306/myDB";
Connection conn = DriverManager.getConnection(myUrl, "root", "adminpw");
...
} catch {
...
}
}
Однако, я все еще получаю ту же SQLException, что я первоначально получаю хотя мой класс путь был обновлен.
Я также попытался вызвать метод reloadClasses() «BeanShell» сразу после добавления нового пути к классам, но безрезультатно.
Является ли «/myProjectDir/lib/mysql-connector-java-5.0.8-bin.jar» абсолютный путь к банку? – javajavajava
Yup it. Я знаю, что это плохая форма, но я буду беспокоиться о ее очистке, когда я получу эту работу. – exxodus7
Зачем вам нужен пользовательский загрузчик классов? Вы можете удалить эту строку и просто вызвать Class.forName («com.mysql.jdbc.Driver»)? – javajavajava