Java driver.connect()与DriverManager.getConnection()的比较

Java driver.connect()与DriverManager.getConnection()的比较,java,jdbc,Java,Jdbc,DriverManager.getConnection在内部调用driver.connect()以获取数据库连接。 直接使用driver.connect()是否存在任何陷阱 java.sql.Driver是一个接口,您需要一个实际的实现(例如org.firebirdsql.jdbc.FBDriver用于Firebird)来实际使用它。另一方面,DriverManager是一个具体的类,它为您抽象(隐藏)驱动程序的加载、选择和使用 通常,您不应该直接使用驱动程序实现。坚持使用DriverManag

DriverManager.getConnection在内部调用driver.connect()以获取数据库连接。
直接使用driver.connect()是否存在任何陷阱

java.sql.Driver
是一个接口,您需要一个实际的实现(例如
org.firebirdsql.jdbc.FBDriver
用于Firebird)来实际使用它。另一方面,
DriverManager
是一个具体的类,它为您抽象(隐藏)驱动程序的加载、选择和使用

通常,您不应该直接使用
驱动程序
实现。坚持使用
DriverManager
,或者使用
DataSource
实现(最好通过配置)

使用
DriverManager
将代码与实际使用的驱动程序分离。这意味着您对特定驱动程序没有编译时依赖关系。然后,更改驱动程序甚至数据库系统(假设SQL兼容或生成兼容)只是在类路径上添加/替换驱动程序jar并在配置中指定正确的JDBCURL的一种方式。这是假设JDBC 4自动加载驱动程序,否则将特定的驱动程序名添加到配置中并使用
Class.forName()

例如,对于SQL Server,您有来自Microsoft的驱动程序或jTDS驱动程序(+其他第三方驱动程序)。在这两者之间切换基本上是将正确的驱动程序添加到类路径并更改配置中的URL

在过去,微软甚至对其JDBC驱动程序进行了突破性的更改,更改了驱动程序的类名和URL。如果您硬编码了对
驱动程序
实现的依赖项,则如果您尝试升级驱动程序,代码将中断。如果您刚刚使用了
DriverManager
(并且为URL提供了一个配置选项,并且-这是在自动加载驱动程序之前-用于加载的驱动程序类名),那么在配置更改后,一切都会继续工作

有些例外情况下,您会直接使用
驱动程序
实现(通常通过反射,但仍然不是硬编码),但这些情况很少发生,除非您有很好的理由(并且知道自己在做什么),否则就不要这样做