Как найти все доступные драйверы JDB C? - PullRequest
0 голосов
/ 05 января 2020

У меня есть метод библиотеки, который можно использовать для подключения к базе данных, а затем для создания документа с использованием данных из базы данных.

Когда они запускают это приложение без параметров, я хочу перечислить все доступно sql подключения поставщика. Основываясь на этом вопросе Я предполагаю, что это сделано с использованием ServiceLoader , но мне не совсем ясно, как это сделать.

И критически важно, чтобы я как получить класс "com. mysql .jdb c .Driver", и я должен получить "jdb c: mysql:" начало синтаксиса строки подключения.

Итак Как я могу получить класс (необязательно) и начало строки соединения (обязательно) всех JDB C соединителей в classpath?

Ответы [ 2 ]

1 голос
/ 06 января 2020

В JDB C не определен способ автоматического обнаружения формата URL-адреса драйвера JDB C.

Вам нужно будет самостоятельно вести реестр форматов URL JDB C (например, связан с одним или несколькими драйверами), а затем с помощью ServiceLoader или DriverManager найдите доступные драйверы и используйте их, чтобы определить, какие форматы URL вы можете использовать.

Помните, что JDB C позволяет несколько драйверов используют один и тот же формат URL JDB C (первый драйвер, который успешно подключается, «выигрывает»), и один драйвер может иметь более одного формата URL JDB C.

Чтобы обнаружить JDB C драйверов на classpath, вы можете использовать

ServiceLoader<Driver> loadedDrivers = ServiceLoader.load(Driver.class);
for (Driver driver : loadedDrivers) {
    // do something with Driver
}

Помните, что использование for-each может быть не лучшим решением. Явное использование итератора может быть лучше, так как вы можете явно обработать брошенный ServiceConfigurationError, если указанный драйвер c не загружается.

В качестве альтернативы, вы можете использовать

Enumeration<Driver> drivers = DriverManager.getDrivers();

И пусть DriverManager позаботится о поиске драйверов.

0 голосов
/ 06 января 2020

Может быть, вы можете использовать каркас, который абстрагирует уровень доступа к данным, т.е. все , обращающиеся к базе данных ?

Я мог бы порекомендовать вам Spring Data JDB C . https://spring.io/projects/spring-data-jdbc

Но есть еще рамки, которые вы можете найти как OR-Mapper, которые могут вам помочь.

...