答案 0 :(得分:17)
它们是截然不同的实现。 jTDS驱动程序是类型4,根据我的经验,它具有更好的性能。我在生产环境中使用jTDS驱动程序已经5年没有任何问题了。
我建议使用jTDS。
答案 1 :(得分:3)
一个相关的区别是,JTDS驱动程序的JDBC 4.0实现(v1.3.1)至少需要Java 7,而Java 6中提供了Microsoft驱动程序的JDBC 4.0实现。
如果您想使用Hibernate 4.3(依赖于JDBC 4.0 API)并支持Java 6,这一点很重要。在这种情况下,JTDS不是一个选项。
答案 2 :(得分:3)
尽管jTDS多年来一直比有问题的mssql自己的驱动程序优越,但最近情况正相反。
为什么要更改驱动程序?
Hibernate的最新版本,Bitbucket Server使用它来简化 它的持久层,引入了对JDBC的要求 使用的驱动程序和连接池符合JDBC4。 JDBC4是 Java 6中引入的。
Bitbucket Server 2.1之前的版本使用的jTDS驱动程序是 JDBC3驱动程序,与Java 1.3兼容,因此不能使用 使用较新版本的Hibernate。尽管jTDS 1.3.0和1.3.1声称 实现JDBC4和JDBC4.1,而实际上却没有。新方法 已经“实现”,但是它们的实现都是新的 AbstractMethodError(),这意味着它们实际上无法使用。 (看到 一个示例here, on GitHub。)
由于jTDS 1.3.1没有提供可运行的JDBC4实现, 决定用Microsoft自己的SQL Server替换jTDS 司机。积极维护Microsoft的驱动程序,而jTDS却没有 自2014年以来进行了更新(以及在进行一轮小规模更新之前 在2014年,它已经有多年没有更新了)。微软提供了 完整的JDBC4.2(Java 8)驱动程序,并支持SQL的所有功能 服务器,包括SQL Server 2016。
答案 3 :(得分:2)
使用jTDS的关键原因是它使用较小的GPL许可证,其中Microsoft的驱动程序使用自己的许可证,该许可证对其有更多限制。一个值得注意的限制是你可能不会
- 解决软件中的任何技术限制
许可证中有更多限制,例如:
- 将软件或本协议转让给任何第三方
- 将该软件用于商业软件托管服务
可以解释为您不能在生产代码中使用它,但许可证中的早期要点似乎允许它。
说完所有这些后,我不知道SQL Server本身的许可证可能会也可能不会限制第三方驱动程序,例如jTDS连接到它。
另一点是jTDS可以通过maven获得,微软驱动程序不是。
<dependency>
<groupId>net.sourceforge.jtds</groupId
<artifactId>jtds</artifactId>
<version>1.3.1</version>
</dependency>
对于我的选择,使用jTDS,它更宽容,最不可能让你陷入困境,并且;它是一个更好的驱动力。
答案 4 :(得分:1)
jTDS性能很好,但是jTDS似乎不支持故障转移属性,如果SQL Server切换到辅助服务器,则需要重新启动应用程序/服务器以选择新ip并重置连接。