Java JAR (библиотека) использование

1

Я использовал библиотеку GSON в Eclipse, и это было очень просто. Просто добавила его как внешнюю библиотеку, а в исходный файл я ее импортировал и смог использовать ее, как и любой другой класс на Java. Пример:

Gson gson = new Gson(); //and just use it

Недавно мне пришлось работать с SQLIte базы данных SQLIte, поэтому я загрузил библиотеку драйверов JDBC и добавил ее в свой проект Eclipse. Но я заметил, что для этого есть странный (по крайней мере для меня) синтаксис. Я импортировал java.sql.* Но чтобы иметь возможность использовать его классы, я должен был сделать следующее:

 Class.forName("org.sqlite.JDBC");

Я знаю, что возвращаемое значение из этой команды является объектом класса (во время выполнения), но, как видно из синтаксиса, оно никогда не используется.

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

Теги:
jdbc

2 ответа

1

Он загружает класс динамически. Что делает метод Class.forname? это хорошая статья об этом, и это также объясняет, зачем нужны драйверы базы данных:

Посмотрите, почему вам требуется Class.forName() для загрузки драйвера в память. Все драйверы JDBC имеют статический блок, который регистрируется с помощью DriverManager, а DriverManager имеет статический только инициализатор.

У драйвера JDBC MySQL есть статический инициализатор, который выглядит так:

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

JVM выполняет статический блок, и драйвер регистрируется с помощью DriverManager.

Для управления базой данных необходимо подключение к базе данных. Чтобы создать соединение с базой данных, класс DriverManager должен знать, какой драйвер базы данных вы хотите использовать. Он делает это путем итерации по массиву (внутренне вектор) драйверов, которые зарегистрировались у него, и вызывает метод acceptsURL (url) для каждого драйвера в массиве, фактически прося водителя сказать ему, может ли он обрабатывать JDBC URL.

Источник - Что такое "Class.forName" ("org.sqlite.JDBC"); делать?

  • 0
    Я думаю, что это будет более чистый способ заставить драйвер зарегистрироваться самостоятельно, используя статический метод, скажем, Init. Class.forName выглядит как обходной путь, заставляющий JVM вызывать статический инициализатор драйвера.
  • 0
    Вместо того, чтобы копировать ответ, вы могли бы пометить его как дубликат.
Показать ещё 3 комментария
0

В основном это позволяет JVM-регистру, который использует библиотеки java.sql.* использует ваш код. Таким образом, вы можете полагаться на стандартный интерфейс, не проходя через обручи и препятствия, требующие детализации на уровне реализации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню