Я использовал библиотеку 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
.
Он загружает класс динамически. Что делает метод 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"); делать?
В основном это позволяет JVM-регистру, который использует библиотеки java.sql.*
использует ваш код. Таким образом, вы можете полагаться на стандартный интерфейс, не проходя через обручи и препятствия, требующие детализации на уровне реализации.