Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Java Hibernate dengan SQL Server 2012 tidak berfungsi?

Masalah Anda adalah jTDS tidak mendukung cara DBCP2 memvalidasi koneksi secara default (saya berasumsi Anda menggunakan DBCP2 dari <bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp2.BasicDataSource"> ). Lihat solusinya di bawah.

Biasanya stacktrace kesalahan seperti yang ditunjukkan:

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)

Masalahnya, bagaimanapun, tidak terkait dengan versi SQL Server, tetapi dengan versi DBCP (Tomcat) yang digunakan (atau versi server Tomcat yang digunakan proyek).

Setelah saya menggunakan jTDS 1.3.1 dan proyek bekerja dengan baik (dan terhubung ke SQLServer 2012 juga) di bawah Tomcat7. Ketika saya mengubah ke Tomcat 8, kesalahan itu muncul.

Alasannya, seperti diisyaratkan di forum jTDS , adalah:

  • (Tomcat7 menggunakan DBCP 1 dan Tomcat 8 menggunakan DBCP 2 )
  • Tidak seperti DBCP 1.x , DBCP 2 akan memanggil java.sql.Connection.isValid(int) untuk memvalidasi koneksi
  • jTDS tidak mengimplementasikan .isValid() , jadi driver jTDS tidak akan bekerja dengan DBCP 2, kecuali...
  • ...kecuali jika Anda menyetel validationQuery parameter, yang akan membuat DBCP tidak memanggil .isValid() untuk menguji validitas koneksi.

Solusi

Jadi, solusinya adalah mengatur validationQuery parameter , yang akan membuat DBCP2 tidak memanggil .isValid() untuk menguji validitas koneksi. Begini caranya:

Di Tomcat

Tambahkan validationQuery="select 1" ke <Resource> Tom Tomcat Anda tag untuk kumpulan koneksi, yang biasanya di META-INF/context.xml aplikasi Anda atau conf/server.xml :

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

Pada Musim Semi

Saat menggunakan DBCP2 melalui Spring, solusinya ada di sekitar:

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

Pada Kode java Sederhana

dataSource.setValidationQuery("select 1"); 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. menyimpan file di sql server 2008 menggunakan opsi filestream

  2. SQL Server:DELETE vs TRUNCATE

  3. Dampak dari peristiwa yang diperluas query_post_execution_showplan di SQL Server 2012

  4. Bagaimana saya bisa menghilangkan basis data sistem dan mengizinkan pekerjaan agen SQL Server 2008 melewati ERROR_NUMBER 208?

  5. Tutorial Surat Basis Data