2015-06-19 5 views
0

я получаю следующее сообщение об ошибке при попытке использовать jtds 1,3 + jdk1.8 (64) на ОС Windows 7.JTDS 1,3 связь с java8 x64

Exception in thread "main" java.lang.RuntimeException: Error initializing DESEngine 
    at net.sourceforge.jtds.util.DESEngine.init(DESEngine.java:76) 
    at net.sourceforge.jtds.util.DESEngine.<init>(DESEngine.java:51) 
    at net.sourceforge.jtds.jdbc.NtlmAuth.answerLmChallenge(NtlmAuth.java:52) 
    at net.sourceforge.jtds.jdbc.TdsCore.sendNtlmChallengeResponse(TdsCore.java:2179) 
    at net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:613) 
    at net.sourceforge.jtds.jdbc.JtdsConnection.<init>(JtdsConnection.java:369) 
    at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:183) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at test4.Test4.main(Test4.java:15) 
Caused by: java.security.NoSuchAlgorithmException: DES SecretKeyFactory not available 
    at javax.crypto.SecretKeyFactory.<init>(SecretKeyFactory.java:122) 
    at javax.crypto.SecretKeyFactory.getInstance(SecretKeyFactory.java:160) 
    at net.sourceforge.jtds.util.DESEngine.init(DESEngine.java:69) 
    ... 9 more 

Пример кода здесь:

public static void main(String[] args) throws Exception { 
    String url = "jdbc:jtds:sqlserver://server:1433/db1;domain=dm1"; 
    String user = "user"; 
    String pwd = "password"; 

    Class.forName("net.sourceforge.jtds.jdbc.Driver"); 
    Connection cn = DriverManager.getConnection(url, user, pwd); 
    System.out.println("connected!"); 
} 

Java версия:

C:\Program Files\Java\jdk1.8.0_40\bin>java -version 
java version "1.8.0_40" 
Java(TM) SE Runtime Environment (build 1.8.0_40-b26) 
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode) 

А вот тесты я сделал:

jtds-1.3(1.3.1) 
Windows7 + jdk1.7.79 (32) works 
Windows7 + jdk1.7.79 (64) works 
Windows7 + jdk1.8.40 (32) works 
Windows7 + jdk1.8.40 (64) NOT working 
RedHat6.6 + jdk1.7.79 (64) works 
RedHat6.6 + jdk1.8.40 (64) works 

jtds-1.2.8: 
works on any combination of system above. 

Любые известные проблемы, связанные с jtds1.3 + java8 (64) в Windows?

+0

jtds 1.3.1 + jdk 1.8.0_45 x64 для Windows 8.1 отлично работает для меня (не должно быть разницы между окнами 7 x64 и Windows 8 x64, потому что jdk одинаково для обоих). И в соответствии с [javadoc] (http://docs.oracle.com/javase/7/docs/api/javax/crypto/SecretKeyFactory.html) должен быть предоставлен DES. Возможно, стоит попробовать с jdk 1.8.0u45, чтобы узнать, разрешает ли он вашу проблему. – assylias

+0

спасибо, он работает с 1.80_45 x64. – fivelements

ответ

4

jtds 1.3.1 имеет известную ошибку, пытаясь использовать SSL при подключении к базе данных, если запустить с Java 8. Это задокументировано: http://sourceforge.net/p/jtds/bugs/725/ Хотя он помечается как фиксированные, новая версия кода не было еще упакован. Мы используем флаг URL ssl = request при подключении к драйверу jtds, так что, если сервер поддерживает ssl, мы создадим соединение ssl. Когда мы использовали java 8, мы получили сбои в подключении к базе данных, и эта ошибка оказалась причиной. Вы можете проверить код и построить драйвер самостоятельно (как это уродливо, но это так), но поскольку он уже прошел более 1,5 лет, и новый выпуск еще не выпущен, это будет самым быстрым решением.