这是DriverManager.deregisterDriver(Driver driver)
JDK 8上的代码:
DriverInfo aDriver = new DriverInfo(driver, null);
if(registeredDrivers.contains(aDriver)) {
if (isDriverAllowed(driver, Reflection.getCallerClass())) {
DriverInfo di = registeredDrivers.get(registeredDrivers.indexOf(aDriver));
// If a DriverAction was specified, Call it to notify the
// driver that it has been deregistered
if(di.action() != null) {
di.action().deregister();
}
registeredDrivers.remove(aDriver);
} else {
// If the caller does not have permission to load the driver then
// throw a SecurityException.
throw new SecurityException();
}
请注意,它只是从列表 ( )中删除DriverInfo
实例。registeredDrivers
如果它找到DriverAction
与驱动程序关联的 ,它会调用driverAction.deregister()
. 从方法的文档中:
该deregister
方法仅供 JDBC 驱动程序使用,而不能由应用程序使用。建议不要DriverAction
在公共类中实现 JDBC 驱动程序。如果在deregister
调用该方法时存在与数据库的活动连接,则连接是否关闭或允许继续是特定于实现的。一旦调用此方法,驱动程序是否可以限制创建与数据库的新连接、调用其他驱动程序方法或抛出SQLException
. 有关其行为的更多信息,请查阅 JDBC 驱动程序的文档。
因此,在所有情况下,您都不应该指望这一点,除非您绝对确定底层实现。但这会使您的应用程序与它过于耦合。