【问题标题】:How can I find all JDBC drivers available?如何找到所有可用的 JDBC 驱动程序?
【发布时间】: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

标签: java jdbc serviceloader


【解决方案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 JDBChttps://spring.io/projects/spring-data-jdbc

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-02
      • 2015-06-15
      • 2013-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多