Java Hibernate与SQL Server 2012无法正常工作?
我有一个Java Hibernate项目配置,它与SQL Server 2008 R2配合使用,现在有了新的OS 8.1(从7开始)和SQL Server 2012(快速),我无法连接到SQL服务器。
因为它适用于2008 R2,所以/应该在语法上正确的相关配置:
datasource.properties
jdbc.driverClassName=net.sourceforge.jtds.jdbc.Driver jdbc.url=jdbc:jtds:sqlserver://localhost:1433/dbname;instance=SQLEXPRESS jdbc.username=auser jdbc.password=xyz
我尝试了两种方言org.hibernate.dialect.SQLServerDialect
在2008 R2中工作。
hibernate.hbm2ddl.auto=create-drop hibernate.dialect=org.hibernate.dialect.SQLServerDialect #hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect hibernate.show_sql=true
springConfiguration.xml
SQL Server 2012安装了混合模式身份validation,SQL Server Management Studio连接没有问题(有或没有实例名称)。
我已经更新了SQLEXPRESS
的SQL Server Network Configuration
。
SQLEXPRESS的协议:
TCP/IP Enabled
以及所有TCP/IP Properties - TCP Port
到1433的TCP/IP Properties - TCP Port
。
我试过禁用Windows防火墙只是为了测试它是否在路上,但它会导致相同的错误。
我最终添加了防火墙规则,并按照这个优秀的配置SQL Express 2012中的一些步骤来接受远程连接文章 。
错误消息:
Caused by: java.lang.AbstractMethodError at net.sourceforge.jtds.jdbc.JtdsConnection.isValid(JtdsConnection.java:2833)
您的问题是jTDS不支持默认情况下DBCP2validation连接的方式(我假设您使用来自
DBCP2
)。 请参阅下面的解决方案
通常错误堆栈跟踪如下所示:
Caused by: java.lang.AbstractMethodError at net.sourceforge.jtds.jdbc.JtdsConnection.isValid(JtdsConnection.java:2833) at org.apache.tomcat.dbcp.dbcp2.DelegatingConnection.isValid(DelegatingConnection.java:913)
但是,问题与SQL Server版本无关,而与使用的DBCP(Tomcat)版本(或项目部署到的Tomcat服务器版本)无关。
一旦我使用jTDS 1.3.1并且该项目在Tomcat7下工作正常(并且连接到SQLServer 2012)。 当我改为Tomcat 8时,出现了这个错误。
正如jTDS论坛中暗示的那样 ,原因是:
- ( Tomcat7使用DBCP 1,Tomcat 8使用DBCP 2 )
- 与DBCP 1.x不同, DBCP 2将调用
java.sql.Connection.isValid(int)
来validation连接 - jTDS没有实现
.isValid()
,因此jTDS驱动程序不能与DBCP 2一起使用,除非…… - …除非你设置
validationQuery
参数,这将使DBCP不能调用.isValid()
来测试连接的有效性。
解决方法
因此,解决方法是设置validationQuery
参数 ,这将使DBCP2不调用.isValid()
来测试连接的有效性。 就是这样:
在Tomcat上
将validationQuery="select 1"
添加到连接池的Tomcat
标记中,该标记通常位于应用程序或conf/server.xml
META-INF/context.xml
中:
在spring
通过Spring使用DBCP2时,解决方案就是:
...
简单的java代码
dataSource.setValidationQuery("select 1");
似乎jTDS在SQL Server 2012(更新2?)中存在一些问题,或者在2012/8.1
发生了一些变化,这些问题之前在2008 R2/7
。
使用与上面几乎相同的配置并进行一些小的更改 ,我下载并更改了datasource.properties以使用Microsoft JDBC Driver 4.0 for SQL Server 。
jdbc.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver jdbc.url=jdbc:sqlserver://localhost:1433; #jdbc.url=jdbc:sqlserver://localhost\dbname:1433;
我只是将sqljdbc4.jar
放在tomcat\lib\
以validationMS JDBC驱动程序4.0与SQL Server 2012一起使用所有更新,并且它完美地运行。 方言org.hibernate.dialect.SQLServerDialect
也在2012年工作。