如何找到所有可用的 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 格式的注册表(例如,链接到一个或多个驱动程序),然后使用 ServiceLoader
或 DriverManager
,发现可用的驱动程序并使用它来确定您的 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”