如何找到所有可用的 JDBC 驱动程序?

Posted

技术标签:

【中文标题】如何找到所有可用的 JDBC 驱动程序?【英文标题】:How can I find all JDBC drivers available? 【发布时间】:2020-01-05 19:37:10 【问题描述】:

我有一个库方法,可用于连接到数据库,然后使用数据库中的数据构建文档。

当他们在没有参数的情况下运行这个应用程序时,我想列出所有可用 sql 供应商连接。基于this question,我猜它是使用ServiceLoader 完成的,但我不清楚具体该怎么做。

对此至关重要的是我想获得“com.mysql.jdbc.Driver”类,并且我必须获得连接字符串语法的“jdbc:mysql:”开头。

那么,如何获取类路径中所有 JDBC 连接器的类(可选)和连接字符串开始(必需)?

【问题讨论】:

@user85421 不幸的是,这不提供“jdbc”mysql:“语法信息。 您当然可以使用ServiceLoader.load(Driver.class)DriverManager.drivers() 列出驱动程序,但据我所知,没有办法自动确定驱动程序的JDBC URL 的语法。 ServiceLoader 或 DriverManager.getDrivers() 很棒;您必须从其他地方获取的 URL 列表,例如 benchresources.net 【参考方案1】:

JDBC 中没有定义自动发现驱动程序的 JDBC URL 格式的方法。

您需要自己保留 JDBC URL 格式的注册表(例如,链接到一个或多个驱动程序),然后使用 ServiceLoaderDriverManager,发现可用的驱动程序并使用它来确定您的 URL 格式可以用。

请注意,JDBC 允许多个驱动程序使用相同的 JDBC URL 格式(第一个成功连接“wins”的驱动程序),并且单个驱动程序可以有多个 JDBC URL 格式。

要发现类路径中的 JDBC 驱动程序,您可以使用

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

请注意,使用 for-each 可能不是最佳解决方案。显式使用迭代器可能会更好,因为如果特定驱动程序加载失败,您可以显式处理引发的ServiceConfigurationError

或者,您可以使用

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

DriverManager 负责发现驱动程序。

【讨论】:

【参考方案2】:

也许您可以使用一个框架来抽象数据访问层,即所有与数据库的对话

我可以向您推荐 Spring Data JDBC。 https://spring.io/projects/spring-data-jdbc

但是您可以找到更多框架作为 OR-Mapper 可以帮助您。

【讨论】:

以上是关于如何找到所有可用的 JDBC 驱动程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 JDBC 驱动列出服务器上的 PostgreSQL 数据库?

ant sql 任务使用 org.sqlite.JDBC 驱动程序抛出“没有可用的 ResultSet”

如何在执行 JDBC 语句时收集警告/通知?

如何MySQL JDBC驱动程序到Android工作室

Oracle JDBC 驱动程序 » 10.2.0.2.0 给出页面未找到 [重复]

如何使用JDBC连接TDengine数据库?