我有一个库方法,可用于连接到数据库,然后使用数据库中的数据构建文档。
当他们不带参数运行此应用程序时,我想列出所有available sql供应商连接。基于this question,我猜测它是使用ServiceLoader完成的,但是我不清楚如何执行此操作。
最重要的是,我想获取类“ com.mysql.jdbc.Driver”,并且必须以连接字符串语法的开头“ jdbc:mysql:”。
所以,如何获得类路径中所有JDBC连接器的类(可选)和连接字符串开始(必需)?
没有在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
负责发现驱动程序。