com.microsoft.sqlserver.jdbc.SQLServerConnection 和 java.sql.Connection 有啥区别
Posted
技术标签:
【中文标题】com.microsoft.sqlserver.jdbc.SQLServerConnection 和 java.sql.Connection 有啥区别【英文标题】:What's the difference between com.microsoft.sqlserver.jdbc.SQLServerConnection and java.sql.Connectioncom.microsoft.sqlserver.jdbc.SQLServerConnection 和 java.sql.Connection 有什么区别 【发布时间】:2015-10-22 15:36:24 【问题描述】:我在连接到 SQL Server 2012 数据库的 Tomcat 8 上有一个 Maven Web 应用程序。
出于记录目的,我想使用getClientConnectionID
。
由于微软的政策,让他们的驱动程序与 Maven 一起工作是相当痛苦的(我知道这是可能的,我做了一段时间,但在我的情况下,它在迁移/共享项目后导致了几个问题)。 不幸的是,JTDS-Driver 拒绝与数据库服务器合作,原因不明。
所以现在我只是把 sqljdbc4-4.0.jar 放到 Tomcat 的 lib 文件夹和项目的 META-INF/services 中,从那以后一切都很好。
然而,在对数据库进行了更多操作之后,我不确定是否值得切换并尝试获取一些信息,com.microsoft.sqlserver.jdbc.SQLServerConnection
和 java.sql.Connection
之间的实际差异是什么,以及改变是否有意义。
到目前为止,我找不到有用的信息。大多数页面只是参考如何解决每种类型的问题...
在性能、行为或其他可能性方面是否有任何差异实际上可以证明切换回是合理的?
【问题讨论】:
【参考方案1】:java.sql.Connection
是 interface
,其中 com.microsoft.sqlserver.jdbc.SQLServerConnection
是 MS-SQL
的实现,您无法比较它们的性能,因为第一个只是 interface
,而另一个是实际实现则什么都不做。因此,您使用Connection
在代码中维护abstraction
,但实际上您将使用您提供的实现,在本例中为com.microsoft.sqlserver.jdbc.SQLServerConnection
。人们通常将它们添加为runtime
dependencies
,这样他们就不会得到一个被污染的命名空间。
【讨论】:
【参考方案2】:java.sql.Connection
是com.microsoft.sqlserver.jdbc.SQLServerConnection
实现的接口。
通常您只会针对接口进行编程以独立于特定实现。然后 - 如果您不依赖某些特定于实现的行为 - 您可以简单地将 jar 与 JDBC 驱动程序交换,并且您的代码应该仍然可以正常工作而无需任何更改。
【讨论】:
以上是关于com.microsoft.sqlserver.jdbc.SQLServerConnection 和 java.sql.Connection 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章