При использовании JDBC мы, естественно, будем использовать следующее оператор:
Кода -копия выглядит следующим образом:
Class.forname ("com.mysql.jdbc.driver");
String url = "jdbc: mysql: //127.0.0.1/test? UseUnicode = true & incerviceEncoding = utf-8";
String user = "";
String psw = "";
Connection con = DriverManager.getConnection (URL, пользователь, PSW);
Почему это естественно?
Это необходимо? Нет, мы можем заменить его этим предложением:
Кода -копия выглядит следующим образом:
com.mysql.jdbc.driver driver = new com.mysql.jdbc.driver ();
//или:
// новый com.mysql.jdbc.driver ();
String url = "jdbc: mysql: //127.0.0.1/test? UseUnicode = true & incerviceEncoding = utf-8";
String user = "";
String psw = "";
Connection con = DriverManager.getConnection (URL, пользователь, PSW);
Возможно, вы видели грубую идею. Оба вышеперечисленных метода могут реализовать эту функцию, поэтому программа может работать нормально. Обратите внимание, что если мы выполним следующие операции, программа не будет работать нормально, потому что это только приводит к загрузке класса драйверов в JVM, но не выполняет соответствующую работу по инициализации.
Кода -копия выглядит следующим образом:
com.mysql.jdbc.driver driver = null;
//или:
ClassLoader CL = новый ClassLoader ();
cl.loadclass ("com.mysql.jdbc.driver");
Мы все знаем, что JDBC разработан с использованием режима Bridge. Обратите внимание, что предыдущий драйвер является интерфейсом, а последний - это класс, который реализует предыдущий интерфейс драйвера.
В режиме Bridge Abstract (DriverManager) должен иметь ссылку на реализацию (драйвер), но во время использования мы не зарегистрировали объект Driver в DriverManager. В описании драйвера есть предложение о предложении:
Когда класс драйверов загружен, он должен создать сам экземпляр и зарегистрировать его с DriverManager
О, оказывается, что com.mysql.jdbc.driver автоматически завершил этот шаг после загрузки. Исходный код такой:
Кода -копия выглядит следующим образом:
Пакет com.mysql.jdbc
Драйвер публичного класса расширяет нерегистрирование, реализует Java.sql.driver {
// ~ статические поля/инициализаторы
// зарегистрироваться в DriverManager
//
статический {
пытаться {
java.sql.drivermanager.registerdriver (new Driver ());
} catch (sqlexception e) {
бросить новое runtimeexception («Не могу зарегистрировать драйвер!»);
}
}
// ~ конструкторы
/**
*Создайте новый драйвер и зарегистрируйте его с DriverManager
*
* @Throhs SQLexception
* Если возникает ошибка базы данных.
*/
Public Driver () бросает SQLEXCEPTER {
// требуется для class.forname (). Newinstance ()
}
}
PS: пересмотреть загрузку драйвера JDBC
Кода -копия выглядит следующим образом:
ClassLoader cl = Thread.currentThread (). GetContextClassLoader ();
Класс clazz = cl.loadclass ("com.mysql.jdbc.driver");
clazz.newinstance ();
Соединение conn = DriverManager.getConnection ("jdbcurl");
Это также может быть выполнено. Но таким образом мы строим дополнительный экземпляр com.mysql.jdbc.driver. То же, что и class.forname ("com.mysql.jdbc.driver").
Прямо сейчас:
Кода -копия выглядит следующим образом:
Class.forname ("com.mysql.jdbc.driver") == cl.loadclass ("com.mysql.jdbc.driver"). Newinstance ();
Class.forname и classloader.loadclass - это две разные вещи: один созданный класс, а другой загруженный класс