Альтернативный способ загрузки драйвера БД в Java - PullRequest
1 голос
/ 26 сентября 2010

Есть ли другой способ загрузить драйвер БД, кроме class.forName ?

Ответы [ 5 ]

9 голосов
/ 26 сентября 2010

Современные драйверы не нужно регистрировать, потому что у них есть файл META-INF / services / java.sql.Driver , который объявляет о существовании драйвера и содержит имя драйверакласс.

Просто используйте DriverManager.getConnection(...), и он обнаружит сам драйвер.


РЕДАКТИРОВАТЬ @Thilo: Я только что протестировал его с PostgreSQL, и он работает:

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

public class JdbcDriverLoadTest {

    public static void main(String[] args) throws SQLException {
        Connection c = DriverManager.getConnection("jdbc:postgresql://localhost:5434/IKOffice_Core", "ik", "ik0000");
        System.out.println(c.getMetaData().getDatabaseProductName());
    }

}
4 голосов
/ 26 сентября 2010

Предполагается, что современные драйверы JDBC предоставляют достаточно метаданных в своем манифесте jar-файла, поэтому вам может не понадобиться ничего делать.

Основной смысл Class#forName состоит в том, чтобы удалить зависимость времени компиляции от конкретного драйвера JDBC (и сделать его настраиваемым во время выполнения). Если вы все равно используете код драйвера Oracle в своей программе (для использования их нестандартных расширений JDBC) и не имеете компульсий для жесткого кодирования имени класса драйвера, вы также можете просто создать обычный экземпляр класса драйвера.

 new oracle.jdbc.driver.OracleDriver();
1 голос
/ 26 сентября 2010

Вы также можете добавить класс драйвера в системное свойство jdbc.drivers, которое представляет собой список имен классов драйверов, разделенных двоеточиями, которые загружает класс DriverManager.

Пример:

java -Djdbc.drivers=oracle.jdbc.driver.OracleDriver MyApp

Источник: DriverManager javadocs .

1 голос
/ 26 сентября 2010

Часто вы можете просто создать его экземпляр, но это приводит к жесткой зависимости от конкретного драйвера.

Причина, по которой используется Class.forName, заключается в том, что вы можете сделать его настраиваемым.Причина, по которой он работает, заключается в том, что он запускает статические инициализаторы класса, которые позволяют ему регистрироваться в jdbc.

Короче говоря, насколько я знаю, у вас есть два варианта:

  • Class.forName - позволяет настраиваемый драйвер - приятно
  • прямая реализация - создает твердую зависимость класса - не приятно
0 голосов
/ 01 июля 2016

com.mysql.jdbc.Driver dr = null;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...