sql >> Database >  >> RDS >> Sqlserver

Java Hibernate met SQL Server 2012 werkt niet?

Uw probleem is dat jTDS de manier waarop DBCP2 standaard een verbinding valideert niet ondersteunt (ik neem aan dat u DBCP2 gebruikt van <bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource"> ). Zie de oplossing hieronder.

Gewoonlijk is de fout-stacktrace als volgt:

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)

Het probleem is echter niet gerelateerd aan de SQL Server-versie, maar aan de gebruikte DBCP (Tomcat)-versie (of de Tomcat-serverversie waarop het project is geïmplementeerd).

Ooit gebruikte ik jTDS 1.3.1 en het project werkte prima (en ook verbonden met SQLServer 2012) onder Tomcat7. Toen ik overstapte naar Tomcat 8, verscheen die fout.

De reden, zoals suggereerde in jTDS-forums , is:

  • (Tomcat7 gebruikt DBCP 1 en Tomcat 8 gebruikt DBCP 2 )
  • In tegenstelling tot DBCP 1.x , DBCP 2 zal java.sql.Connection.isValid(int) . aanroepen om de verbinding te valideren
  • jTDS implementeert .isValid() niet , dus jTDS-stuurprogramma werkt niet met DBCP 2, tenzij...
  • ...tenzij u de validationQuery . instelt parameter, waardoor DBCP .isValid() . niet aanroept om de geldigheid van de verbinding te testen.

Tussenoplossing

De oplossing is dus om de validationQuery in te stellen parameter , waardoor DBCP2 .isValid() . niet aanroept om de geldigheid van de verbinding te testen. Dit is hoe:

Op Tomcat

Voeg validationQuery="select 1" toe naar uw Tomcat <Resource> tag voor verbindingspool, die zich meestal in META-INF/context.xml bevindt van uw app of conf/server.xml :

<Resource ... validationQuery="select 1" />

In de lente

Bij gebruik van DBCP2 via Spring is de oplossing iets in de buurt:

<bean id="..." ...> 
    ...
    <property name="validationQuery" value="select 1" />
</bean>

Op eenvoudige Java-code

dataSource.setValidationQuery("select 1"); 


  1. meerdere afbeeldingen uploaden met behulp van foreach-lus en invoegen in database

  2. Kan geen extensies maken plv8 postgresql

  3. hoe een voorwaardelijke uniciteitsbeperking af te dwingen?

  4. SQL uitvoeren vanuit batchbestand