Hibernate项目配置,它与SQL Server 2008 R2配合使用,现在有了新的OS 8.1(从7开始)和SQL Server 2012(快速),我无法连接到SQL服务器.
自2008 R2起作用后,相关配置为 syntactically correct :
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
<bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean>
SQL Server 2012安装了混合模式身份验证,SQL Server Management Studio连接没有问题(有或没有实例名称).
我已经更新了SQLEXPRESS的SQL Server网络配置.
SQLEXPRESS的协议:
TCP / IP已启用
以及所有TCP / IP属性 – TCP端口到1433.
我试过禁用Windows防火墙只是为了测试它是否在路上,但它会导致相同的错误.
我最终添加了防火墙规则并遵循了这个优秀的 configure SQL Express 2012 to accept remote connections article 中的一些步骤.
错误消息:
Caused by: java.lang.AbstractMethodError at net.sourceforge.jtds.jdbc.JtdsConnection.isValid(JtdsConnection.java:2833)
bean id =“dataSource”的DBCP2“class =”org.apache.tomcat.dbcp.dbcp2.BasicDataSource“>) .请参阅下面的解决方案
通常错误堆栈跟踪如下所示:
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时,出现了这个错误.
原因是, hinted in jTDS forums 是:
>(Tomcat7使用DBCP 1,Tomcat 8使用DBCP 2)
>与DBCP 1.x不同,DBCP 2将调用java.sql.Connection.isValid(int)来验证连接
> jTDS没有实现.isValid(),因此jTDS驱动程序不能与DBCP 2一起使用,除非……
> …除非你设置validationQuery参数,这将使DBCP不能调用.isValid()来测试连接的有效性.
解决方法
因此,解决方法是设置validationQuery参数,这将使DBCP2不调用.isValid()来测试连接的有效性.这是如何做:
在Tomcat上
将validationQuery =“select 1”添加到您的Tomcat<Resource>连接池的标记,通常位于应用程序或conf / server.xml的META-INF / context.xml中:
<Resource ... validationQuery="select 1" />
在春天
通过Spring使用DBCP2时,解决方案就是:
<bean id="..." ...> ... <property name="validationQuery" value="select 1" /> </bean>
简单的java代码
dataSource.setValidationQuery("select 1");
翻译自:https://stackoverflow.com/questions/26404283/java-hibernate-with-sql-server-2012-not-working